0

私はマインクラフトのようなゲームを持っていますが、トップダウンの観点から見ると、ブロックの追加は、プレーヤーが左クリックすると指定された位置にブロックが追加され、配置されたブロックを右クリックするとブロックが削除されます。

私が抱えていた問題は、プレーヤーが左クリックすると、ブロックとその位置がリストに追加されることでした (後で XML に保存するため)。したがって、論理的な結論は、プレーヤーが右クリックすると、そのブロックがゲームから削除されるということです。 、およびそのリストからの位置。

これは、ラグを生成するために使用していた方法です。

for (int b = 0; b < game.blocklist.Count; b++)
{
    for (int v = 0; v < game.blockpos1.Count; v++)
    {
        if (game.blocklist[b].visible == true)
        {
            if (game.cursor.boundingbox.Intersects(game.blocklist[b].blockrectangle) && mousestate.RightButton == ButtonState.Pressed && game.player.Builder == true)
            {
                if (game.blocklist[b].blockposition.X == game.blockpos1[v].X && game.blocklist[b].blockposition.Y == game.blockpos1[v].Y)
                {
                    game.blockpos1.RemoveAt(v);
                    game.blocklist.RemoveAt(b);
                    break;
                }
            }
        }
    }
}

これは、ラグを大幅に削減し、必要な同じ効果を達成する方法に置き換えました。

for (int b = 0; b < game.blocklist.Count; b++)
{
    if (game.blocklist[b].visible == true)
    {
        if (game.cursor.boundingbox.Intersects(game.blocklist[b].blockrectangle) && mousestate.RightButton == ButtonState.Pressed && game.player.Builder == true)
        {
            if (game.blocklist[b].blockposition.X == game.blockpos1[b].X && game.blocklist[b].blockposition.Y == game.blockpos1[b].Y)
            {
                game.blockpos1.RemoveAt(b);
                game.blocklist.RemoveAt(b);
                break;
            }
        }
    }
}

なぜこれがこれほど多くのラグを生み出すのでしょうか? 何を間違えたのかを明確にする必要があるだけなので、二度と同じことはしません。

4

1 に答える 1