在一段时间内移动精灵

时间:2013-07-23 14:15:22

标签: java animation 2d

我正在制作一个2d矿工/冒险游戏,我正试图让太阳在屏幕上移动。

它应该如何工作,它必须从点A(屏幕的左上角)到点B(屏幕的右上角)与时间一致。

我发现了如何进行数学运算,但是当我运行游戏时,太阳精灵并没有让步。我甚至等了一夜才能摔倒,但它还没有让步。我想弄清楚它为什么不动。

我验证了数学:

public int dayFrame = 0;
int u = 0;
int x;
int y = 36;
public int dayTime = 7500;


public void tick()
{
    x = (TritonForge.pixel.width / dayTime) * dayFrame;
    u += 1;
    if (u > 4)
    {
        dayFrame += 1;
        u = 0;
    }
    (rest of code...)

以单位为单位获取屏幕宽度,并将其除以当天的总时间。 然后它将它乘以当前的时间。我知道这是有效的,因为(TritonForge.pixel.width / dayTime)* dayTime = 640(以单位为单位的屏幕宽度)。

public void render(Graphics gr)
{
    gr.setColor(new Color(r,g,b));
    gr.fillRect(0, 0, TritonForge.pixel.width, TritonForge.pixel.height);
    gr.drawImage(TileArt.sun,x,y, null);
    gr.drawImage(TileArt.forestback,0,0, null);
    gr.drawImage(TileArt.foresttree,0,0, null);
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这与整数除法有关。您的屏幕宽度大概是TritonForge.pixel.width?将它除以dayTime时,它可能总是等于零,因为你的屏幕不是7,500像素(再次假设在这里。)

这是因为整数除法向下舍入到最接近的整数。假设你的屏幕是1200像素。 1200/7500 = .16。这会减少到0。

所以改为代码也是如此......

double x;
x = (TritonForge.pixel.width / (double)dayTime) * dayFrame;

并根据需要将x转换为int。