0

つまり、基本的には、C#XNAゲームで敵のヘルスバーを作成しています。残りのヘルスのパーセンテージを取得しているので、たとえば80/100 = 0.8 = 80%なので、ゲームはヘルスバーの緑色の部分を描画する大きさを認識しています。したがって、馬力が80%の場合、ヘルスバーは80%になります。私が抱えている問題は、ヘルスが100から下がるとすぐに、パーセンテージが自動的に0.0 / 0%に下がり、何も描画されないことです。これが私のコードです:

            //calculate the width of the green portion of healbar
        //zDay.Game1.hp_top.Width = Original size of image (35px)
        float size = (hp/max_hp) * zDay.Game1.hp_top.Width;

        //draw percentage of health
        sb.DrawString(zDay.Game1.CourierNew, (hp/max_hp).ToString(), new Vector2(50, 80), Color.Black);
        //draw size of green portion
        sb.DrawString(zDay.Game1.CourierNew, (size).ToString(), new Vector2(50, 50), Color.Black);

        //draw green portion of health bar
        Rectangle bg = new Rectangle(x - 20, y - 30, (int)size, zDay.Game1.hp_top.Height);
        sb.Draw(zDay.Game1.hp_top, bg, Color.White);

なぜこれが起こっているのかについてのアイデアはありますか?

4

1 に答える 1

2

問題は乗算ではなく、除算にあると思います。ステートメント:

(hp/max_hp)

はゼロと評価されている可能性が高いです(intでダイビングしているため(私は推測します)、結果は0から1の間、または整数で0になります)。

使ってみてください

((float)hp/(float)max_hp)

その代わり。

于 2012-11-21T02:03:05.047 に答える