私は夏のプロジェクトとしてJRPG/dungeonクローラを開発しようとしています。私は自分のコードで解決しています。戦闘では「健康バー」が存在し、1つのヘルスバーは各キャラクタに描かれる必要がある3つの矩形で構成されます(コンテキストに応じて合計2〜8文字は一度に24個のヒールバーの長方形を意味します)。xnaのテクスチャから四角形を描画するさまざまな方法のパフォーマンスの違いは?
ヒールバーを描く私の古い方法は、1つのテクスチャに基づいていました。ここでは、 から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);
}
これは格好良い解決策をaintの...ので、代わりに私は、コードの量を削減し、コード内で明確にする量を増加させる抽象クラスを作成しようとしました。私は「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