我的游戏中的角色/玩家一旦接近边缘就会慢慢滑下平台。我该如何解决这个问题?理想情况下,即使在这样的情况下,我的角色也会保持在平台上:x1c 0d1x
我的Player类(onCollision方法是相关部分):
class Player extends SpriteAnimationGroupComponent with HasGameRef<Gain>, KeyboardHandler, CollisionCallbacks {
String character;
Player({pos, this.character = "Ninja Frog"}) : super(position: pos);
final double stepTime = 0.05;
...
@override
void onCollision(Set<Vector2> intersectionPoints, PositionComponent other) {
if (other is Platform) {
if (intersectionPoints.length == 2) {
Vector2 mid = (intersectionPoints.elementAt(0) + intersectionPoints.elementAt(1)) / 2;
Vector2 collisionNormal = absoluteCenter - mid;
final seperationDist = (size.x / 2) - collisionNormal.length;
collisionNormal.normalize();
if (Vector2(0, -1).dot(collisionNormal) > 0.9) {
_isOnGround = true;
}
position += collisionNormal.scaled(seperationDist);
}
}
super.onCollision(intersectionPoints, other);
}
}
字符串
我的平台类,代表游戏的墙壁,地面,天花板:
class Platform extends PositionComponent with CollisionCallbacks {
bool canJumpThrough;
Platform({required Vector2 position, required Vector2 size, this.canJumpThrough = false}) : super(position: position, size: size);
@override
FutureOr<void> onLoad() {
add(RectangleHitbox(collisionType: CollisionType.passive));
return super.onLoad();
}
}
型
1条答案
按热度按时间a0x5cqrl1#
有多种方法可以解决这个问题,一种方法是将
onCollision
改为onCollisionStart
。由于onCollisionStart
只在碰撞开始时调用,因此您应该保持玩家和平台重叠一个像素,然后一旦玩家离开平台,onCollisionEnd
将被调用,您可以重新激活重力等功能。您现在使用的
onCollision
方法将在每个tick中被调用,并且可能存在一些舍入错误,使玩家滑动。