私はマインクラフトのようなゲームを持っていますが、トップダウンの観点から見ると、ブロックの追加は、プレーヤーが左クリックすると指定された位置にブロックが追加され、配置されたブロックを右クリックするとブロックが削除されます。
私が抱えていた問題は、プレーヤーが左クリックすると、ブロックとその位置がリストに追加されることでした (後で 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;
}
}
}
}
なぜこれがこれほど多くのラグを生み出すのでしょうか? 何を間違えたのかを明確にする必要があるだけなので、二度と同じことはしません。