我想要发生的是我的球员从春天跳到另一个。例如,如下图所示:
这是我的代码(我到目前为止尝试过的)。这会在update()
方法
public void springCollision(Box containsSpring) {
// player object
Player player = ((Player) this.object);
// first spring
Spring boxSpring = containsSpring.getSpring();
// second spring
Spring platformSpring = containsSpring.getPartnerPlatform().getSpring();
// if player collides with first spring
if (player.getRect().overlaps(boxSpring.getRect())) {
// distance in x between first & second spring
float dx = platformSpring.getxPos()
+ platformSpring.getSprite().getWidth()
- boxSpring.getxPos() - player.getSprite().getWidth();
// distance in y between first & second spring
float dy = platformSpring.getyPos() - boxSpring.getyPos();
Vector2 directionToSpring = new Vector2(dx, dy);
// normalise vector then set player speed
player.setxSpeed(directionToSpring.nor().x);
player.setySpeed(directionToSpring.nor().y + player.getGravity());
}
}
目前发生的事情是,当他跳到一个弹簧上时,他的跳跃只会继续但由于某种原因在慢动作中。谁能明白为什么我的算法不起作用?如果评论不清楚,请告诉我
答案 0 :(得分:1)
我认为问题在于你将玩家的速度设置为单位方向向量的值。单位矢量的总幅度为1,x和y分量的值在0-1之间。这可以解释为什么你的球员移动得如此缓慢,如果你在x方向的速度小于1,而在y方向,影响速度的主要因素可能是重力,如果这是一个大于1的数字。所以你需要增加方向通过一些力/速度值矢量。
您如何确定该值取决于您希望玩家对弹簧做出反应的方式。你是否希望玩家只是以与弹簧相同的速度继续移动并且仅在击中弹簧时改变方向?或者你是否希望弹簧为玩家提供力量让他进入下一个春天?或者也许是两者的某种组合,比如球员击中弹簧的速度决定了弹簧在另一个方向发射的力度有多大?最简单的方法是保持相同的速度,只改变方向,这是一个开始的好地方,然后你可以建立。