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...)

画面の幅を単位で取得し、それを 1 日の合計時間で割ります。次に、それを現在の時刻で乗算します。(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

This has to do with integer division. Your screen width is presumably TritonForge.pixel.width? When dividing this by dayTime it will probably always equal zero as your screen is not 7,500 pixels (again assuming here.)

This is because integer division rounds down to the nearest whole number. Say your screen is 1200 pixels. 1200 / 7500 = .16. That rounds down to 0.

So instead change your code too...

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

And cast x to an int as appropriate.

于 2013-07-23T14:31:55.723 に答える