0

我正在制作一个 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);
}

有人可以帮忙吗?

4

1 回答 1

0

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

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

所以也改变你的代码......

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

并酌情将 x 转换为 int 。

于 2013-07-23T14:31:55.723 回答