0

わかりましたので、始めたばかりのゲームがあり、スムーズなスクロールに固執しています。基本的なスクロール部分は完了しましたが、背景 (グリッド) は 50 間隔でしか移動しません。

for (int x = (getPlayerX() / getTileSize()) - 6; x < (getPlayerX() / getTileSize()) + 9; x++)
{
    for (int y = (getPlayerY() / getTileSize()) - 5; y < (getPlayerY() / getTileSize()) + 8; y++)
    {

        int xPos = ((x - (getPlayerX() / tileSize)) + (getScreenX() / tileSize) - 1) * tileSize;
        int yPos = ((y - (getPlayerY() / tileSize)) + (getScreenY() / tileSize) - 1) * tileSize;
        if (x > 0 && x < mapX && y > 0 && y < mapY)
        {
            if (getTiles()[x][y].tileID == 0)
            {
                g.drawRect(xPos, yPos, tileSize, tileSize);
            }

            if (getTiles()[x][y].tileID == 1)
            {
                g.fillRect(xPos, yPos, tileSize + 1, tileSize + 1);
            }
        }
    }
}

forループの減算と加算について申し訳ありませんが、0から何でも-1ではなく、1から何でも表示するように設定しました。

したがって、基本的には、50ピクセルごとではなく、移動するピクセルごとにグリッドを再描画したいと考えています.Put I don't want to iterate over every pixel on the screen

4

1 に答える 1

0

わかりました、最初は背景とグリッドを混同しています。グリッドは、衝突をチェックする方法であり、移動しない空間分割アルゴリズムです。背景は、ゲーム内のすべてのレベルのすべてのエンティティの背後に描画される画像です。

あなたがやろうとしているのは、私が理解しているように、レベルをスクロールさせることです。そのために、プレーヤーによって制御されるエンティティを中央に配置することにより、背景と目に見えるエンティティを描画するViewa とも呼ばれるクラスを作成します。Camera

エンティティを中央に配置してマップを描画するには、これらのクラスを使用します。C# で記述したことをご理解いただければ幸いです。

そして、これがGridの私の実装です。ここに同じクラスの Java バージョンがありますが、Javaで Grid クラスを実装していません。

Using Grids For Collisionsそれがどのように機能するかの詳細については、私のチュートリアルを読むことができます。それが役に立てば幸い。

于 2013-07-16T08:29:33.950 に答える