将实体“向前”移动到其轨迹中不按预期工作

时间:2015-01-25 16:07:23

标签: java swing awt

我目前正在制作一款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如果我们在谈论地球轨道物体,那么就会对矢量或重力起作用。这是预期的行为。

然而,这才是实际发生的事情:

gif demonstration - imgur

你能告诉我为什么会出现这种情况以及如何解决这个问题?感谢


正如@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);

    }

0 个答案:

没有答案