0

私は夏のプロジェクトとしてpaJRPG/ダンジョンクローラーを開発しようとしていますが、コードをクリーンアップしています。戦闘では「ヘルスバー」が存在し、1つのヘルスバーはキャラクターごとに描画する必要のある3つの長方形で構成されます(コンテキストに応じて合計2〜8文字は、一度に最大24のヒールバー長方形を意味します)。

ヒールバーを描画する私の古い方法は、長方形の領域から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);
      }

これは見栄えの良いソリューションではありません...代わりに、コードの量を減らし、コードの明確さの量を増やす抽象クラスを作成しようとしました。

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クラスを使用すると、「mHealthBar」変数を破棄して、より見栄えの良いコード方法で長方形を描画できます。しかし、ゲームを描画するための新しい方法を使い始めたとき、フレームレートの問題が発生し始めました。古い方法はスムーズでした...フレームレートの問題の理由は何ですか?

        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));
4

1 に答える 1

1

問題は、新しいテクスチャを作成し、描画するたびに色を設定していることです。

すべきことは、テクスチャを 1 回だけ作成することです (他のコンテンツをロードするとき)。

于 2011-08-02T09:22:11.603 に答える