0
我正在创建塔防游戏的原型。现在,我正在攻击一些箭(就像后面塔的子弹一样),这些箭应指向四处奔跑的怪物中心。我在第一次逻辑调用中设置了相应的旋转,但我不知道如何更改代码以防止发生以下情况:http://recordit.co/jBdXtGGeN8图片旋转经常发生
简而言之:箭头旋转整个时间,即使它应该spawn旋转,然后只为小值旋转以适应移动的怪物。
的构造函数箭头:
逻辑更新呼叫:
public void move(float delta) {
position.add((movementVector.getX() * delta)/1000, (movementVector.getY() * delta)/1000);
if(targetEntity.getBounds().contains(position.getX(), position.getY())) {
isDone = true;
}
bounds.setLocation((int) position.getX(), (int) position.getY());
rotation = Math.atan2(targetEntity.getBounds().getCenterY()
- position.getY(), targetEntity.getBounds()
.getCenterX() - position.getX());
rotation += Math.PI/2.0;
angle = Math.toDegrees(rotation);
calculateMovementVector(targetEntity.getCenter());
}
渲染调用:
public void draw(Graphics2D g) {
int x = (int) position.getX() + sprite.getWidth()/2;
int y = (int) position.getY() + sprite.getHeight()/2;
g.rotate(angle, x, y);
sprite.draw(g, (int) position.getX(), (int) position.getY());
g.rotate(-angle, x, y);
}
我计算移动向量(被应用到位置的方式):
private void calculateMovementVector(Vector2 to) {
float dX = to.getX() - (float) bounds.getCenterX();
float dY = to.getY() - (float) bounds.getCenterY();
float distance = (float) Math.sqrt(dX * dX + dY * dY);
float sX = speed * dX/distance;
float sY = speed * dY/distance;
movementVector.set(sX, sY);
}
我想我应该更频繁地阅读文档:/ 感谢吨,它的工作! – gub
@gub它肯定有帮助! – childofsoong