私は現在、位置が歩行可能かどうかを示すためにタイルを使用する MonoGame を使用したトップダウン ゲームに取り組んでいます。タイルのサイズは 32x32 (画像にもあります)
200 x 200 のグリッドが壁のタイルで埋められています (そして、ランダム ジェネレーターがパスと部屋を作成することになっています) が、画面にすべてのタイルを描画すると、多くのタイルが失われます。以下は、位置 (x81 y183) の後にタイルが描画されない画像ですか?
配列を埋めるために使用されるコードは、壁タイルをグリッドに配置します。タイルの位置は、その配列位置にタイル サイズ (32x32) を掛けたものです。親はカメラ位置に使用されます。
public override void Fill(IResourceContainer resourceContainer)
{
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
{
objectGrid[i, j] = new Wall(resourceContainer);
objectGrid[i, j].Parent = this;
objectGrid[i, j].Position = new Vector2(i * TileWidth, j * TileHeight);
}
}
描画するときは、すべてのタイルをループして、それに応じて描画します。これは Game.Draw 関数で起こることです
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Yellow);
// TODO: Add your drawing code here
spriteBatch.Begin();
map.Draw(gameTime, spriteBatch);
spriteBatch.End();
base.Draw(gameTime);
}
map.draw 関数は、基本的に各タイルを描画するこの関数を呼び出します。各タイルの描画呼び出しがヒットした回数にカウンターを置いてみました。描画関数が更新されるたびに、使用するタイルの量である 40000 回呼び出されます。だからそれはそれらすべてを描画しますが、私はまだそれらすべてを画面に表示していません
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
{
if (objectGrid[i, j] != null)
{
objectGrid[i, j].Draw(gameTime, spriteBatch);
}
}
}
これは、タイルを描画するためのコードです。現在の画像は常に 0 で、GlobalPositionはタイルの位置からカメラの位置を引いたものです。
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
if (visible)
spriteBatch.Draw(textures[currentImage], GlobalPosition, null, color, 0f, -Center, 1f, SpriteEffects.None, 0f);
}
コードの壁についてお詫び申し上げます。私にはすべてが非常に単純に見えますが、すべてのタイルを描画していない理由がわかりません。描画されていないタイルの表示はまだtrueで、currentImageは 0 である必要があります