여름 프로젝트로 JRPG/던전 크롤러를 개발하려고하고 있으며 코드 작성 중입니다. 전투 중에는 "헬스 바"가 존재하며 헬스 바 하나는 각 캐릭터에 대해 그려야하는 3 개의 직사각형으로 구성됩니다 (상황에 따라 총 2 ~ 8 문자는 한 번에 최대 24 개의 힐바 사각형을 의미 함).xna에서 텍스쳐로 직사각형을 그리는 여러 가지 방법의 성능 차이는 무엇입니까?
내 치유 방법을 그리는 나의 오래된 방법은 하나의 픽셀을 에서 가져 와서 직사각형 모양의 영역을 그려 넣는 1 텍스처를 기반으로했습니다. 기본적으로 "HealtBar"텍스처를 컬러 팔레트로 사용했습니다 ... 예를 들어 소스 사각형이 (0, 0, 1, 1) 인 경우 검정 직사각형을 그립니다.
Texture2D mHealthBar;
mHealthBar = theContentManager.Load<Texture2D>("HealthBar");
public override void Draw(SpriteBatch theSpriteBatch)
{
//draw healtbar
theSpriteBatch.Draw(mHealthBar, new Rectangle((int)Position.X+5,
(int)(Position.Y - 20), (MaxHealth * 5)+7, 15),
new Rectangle(0, 0, 1, 1), Color.Black);
theSpriteBatch.Draw(mHealthBar, new Rectangle((int)(Position.X + 8),
(int)(Position.Y - 17), ((MaxHealth * 5)), (mHealthBar.Height) - 2),
new Rectangle(2, 2, 1, 1), Color.White);
theSpriteBatch.Draw(mHealthBar, new Rectangle((int)(Position.X + 8),
(int)(Position.Y - 17), ((Health * 5)), (mHealthBar.Height) - 2),
new Rectangle(3, 2, 1, 1), Color.Red);
}
이 좋은 찾고 해결책을 아닌가요 ... 그래서 대신 내가 코드의 양을 줄이고 코드 선명도의 양을 증가시킬 것이다 추상 클래스를 만들려고. 나는 "mHealthBar"변수를 버리고 더 좋은 찾고 코드 방식으로 사각형을 그릴 수있는 새로운 서랍 클래스와
abstract class Drawer
{
static private Texture2D _empty_texture;
static public void DrawRect(SpriteBatch batch, Color color, Rectangle rect)
{
_empty_texture = new Texture2D(batch.GraphicsDevice, 1, 1);
_empty_texture.SetData(new[] { Color.White });
batch.Draw(_empty_texture, rect, color);
}
}
. 그러나 프레임 속도 문제가 발생하기 시작한 새로운 방법을 사용하기 시작했을 때 이전 방식은 부드러 웠습니다 ... 프레임 속도 문제의 원인은 무엇입니까?
Drawer.DrawRect(theSpriteBatch, Color.Black, new Rectangle((int)Position.X+5,
(int)(Position.Y - 20), (MaxHealth * 5)+7, 15));
Drawer.DrawRect(theSpriteBatch, Color.White, new Rectangle((int)(Position.X + 8),
(int)(Position.Y - 17), (MaxHealth * 5), 9));
Drawer.DrawRect(theSpriteBatch, Color.Red, new Rectangle((int)(Position.X + 8),
(int)(Position.Y - 17), (Health * 5), 9));
큰 감사, 그것은 문제를 해결했습니다. – Olle89