2013-07-23 2 views
1

현재 위치가 이동 가능한지 여부를 나타 내기 위해 타일을 사용하는 MonoGame을 사용하는 탑 다운 게임을하고 있습니다. 타일의 크기는 32x32입니다 (이미지도 있음)MonoGame Spritebatch 부분 그리기 전용 TileField

200 x 200 격자는 벽 타일로 채워져 있습니다. (임의 생성기는 경로와 실을 생성해야합니다.) 그러나 모든 화면에 타일이 많으면 많은 타일이 사라집니다. 아래는 위치 (x81 y183) 이후 타일이 그려지지 않은 이미지입니다.

http://puu.sh/3JOUO.png

어레이를 채우기 위해 사용되는 코드

그리드상의 벽 타일을두고 타일의 위치는 카메라 위치

사용되는 타일 크기 (32 × 32) 상위 곱 배열 위치의되고
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 기능은 기본적으로 각 타일을 그립니다이 함수를 호출에 happends 것입니다. 각 타일에 대한 그리기 호출이 얼마나 많이 발생했는지에 대한 카운터를 두어 보았습니다. 그리기 기능이 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); 
    } 

코드 벽에 사과드립니다. 그것은 모두 나에게 매우 간단하게 보입니다. 그러나 그것이 왜 모든 타일을 그리지 않는지 알 수는 없습니다. 하지 그려진 타일 표시 아직도 16 비트의 다수의 이미지를 그릴 때 monogame 용의 SpriteBatch 여전히 일부 버그 및 오류가

+0

SpriteBatch.Draw 호출에서 -Center는 무엇입니까? – craftworkgames

+0

중심은 스프라이트 크기의 절반입니다. 이는 일반적으로 스프라이트가 왼쪽 상단 위치에서 그려지기 때문입니다. -Center를 사용하면 이미지의 중심이 실제로 위치 자체에 있음을 의미합니다. – M4st3rM1nd

+0

게시 한 코드에서 명백한 버그를 볼 수 없습니다. 어딘가에 있을지도 모릅니다. – craftworkgames

답변

1

되어야 진정한currentImage 0이다. 내 경우에는 200.000 주위에 이것은 당신이 쉽게 해결할 수있는 것이 아닙니다. 같은 문제가 생기면 그려지는 모든 이미지가 화면에 표시되고 더 이상 문제가 없을 것입니다.

관련 문제