我目前正在制作一款AWT游戏引擎,这是一款简单易懂的AWT游戏引擎。我目前正在研究游戏的物理特性。我正在尝试实现一个函数,它将实体从北线或x轴向前移动。这是我用来实现此目的的代码:
public void move(double d) {
oldX = x;
oldY = y;
double angle = Math.toRadians(getDirection());
int dx = (int) Math.round(Math.cos(angle) * d);
int dy = (int) Math.round(Math.sin(angle) * d);
setLocation(x + dx, y + dy);
System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("direction = " + angle);
System.out.println("----------");
}
我在此代码段中调用此代码:
for(Entity e : entities) {
if(!e.getLevel().equals(this)) {
return;
}
e.move(3); //testing the code atm
e.changeDirection(e.getDirection() + 3);
}
问题在于,当你有一个向前向前(move(int i)
)方法时,它不会像我期望的那样进入一个圆形或椭圆形轨迹,并且每个刻度都会将方向改为3如果我们在谈论地球轨道物体,那么就会对矢量或重力起作用。这是预期的行为。
然而,这才是实际发生的事情:
你能告诉我为什么会出现这种情况以及如何解决这个问题?感谢
正如@harold所说,实际问题不是数学而是渲染。以下是呈现2d实体的固定代码:
for(Entity e : entities) {
AffineTransform trans = new AffineTransform();
trans.setTransform(identity);
Point mouse = MouseInfo.getPointerInfo().getLocation();
SwingUtilities.convertPointToScreen(mouse, this);
trans.rotate(Math.toRadians(e.getDirection()), e.getX(), e.getY());
//changed from trans.rotate(Me.getDirection(), e.getX() + e.image.getWidth(null)/2, e.getY() + e.image.getHeight(null)/2);
trans.translate(e.getX(), e.getY());
g2d.drawImage(e.getImage(), trans, this);
}