我的游戏有一个更新方法,可以处理我的角色的火力。 我的问题是我的游戏的逻辑,子弹应该从我的角色的位置开始,在游戏开始时(不移动角色)火焰子弹来自角色的位置,但当我移动我的角色时子弹的开始位置与角色的位置不一样。
子弹的方向取决于玩家的方向。
private void update() {
Vector2 direction = new Vector2(0, 0);
if (Gdx.input.isKeyPressed(Keys.D)) {
direction.x = 1f ;
}
if (Gdx.input.isKeyPressed(Keys.A)) {
direction.x = -1f ;
}
if (Gdx.input.isKeyPressed(Keys.W)) {
direction.y = 1f ;
}
if (Gdx.input.isKeyPressed(Keys.S)) {
direction.y = -1f;
}
if (direction.x != 0 || direction.y != 0) {
playerDirection.set(direction);
System.out.println("player x: " +playerDirection.x + "\t" +"player y:"+playerDirection.y);
}
if (Gdx.input.isKeyPressed(Keys.F)) {
bulletPos = new Vector2(startPos);
bulletDirection.set(playerDirection);
}
if (bulletPos != null) {
bulletPos.x += direction.x;
bulletPos.y +=direction.y;
if (bulletPos.x < 0 || bulletPos.x > mapPixelWidth
|| bulletPos.y < 0 || bulletPos.y > mapPixelHeight) {
bulletPos = null;
}
}
}
任何人都可以知道逻辑错误,或者任何人都可以提供射击方向的简单逻辑吗?
答案 0 :(得分:0)
从我看到的,你总是从玩家开始位置(startPos)开始按钮,然后,当子弹移动时,你根据玩家的方向(direction.x,.y)更新它的位置?但是当玩家改变方向时,子弹也开始向其他方向移动。那是错的。
创建后,应始终独立于播放器移动子弹。所以当你创建它时,它必须有自己的开始位置(取自当前玩家位置)和自己的方向(基于当前玩家位置)。你的玩家移动不再能改变子弹位置。
类似的东西:
if (Gdx.input.isKeyPressed(Keys.F)) {
bulletPos.set(currentPlayerPosition);
bulletDirection.set(currentPlayerDirection);
}
//and then in update()
bulletPos.x+=bulletDirection.x;
bulletPos.y+=bulletDirection.y;
//until it goes out of screen, or passes given distance,
//or new bullet is created, or whatever condition you like