0

本当の問題がわからないので、タイトルが正確かどうかは完全にはわかりません。基本的に、燃料要素をゲームにレンダリングしようとしていますが、98 ピクセルのコンテナーに収まるようにしたいと考えています。私がすでに行ったことは次のとおりです。

    float fuelDisplay = fuel / maxFuel;
    float fuelDisplayFinal = fuelDisplay*98;
    g.setColor(Color.YELLOW);
    g.fillRect(15, 81, (int)fuelDisplayFinal, 38);
    g.drawImage(Bank.bar, 0, 70, null);

ゲームを開始すると問題ないように見えますが、変数 'fuel' が減少するとすぐに、バーが完全に消えます (幅が 0 に設定されている可能性が高い)。

ここで、整数にキャストされるとすぐにゼロに切り捨てられると想定していますが、これを回避する方法がわかりません。私はどこにも解決策を見つけることができませんでした.私が見つけた同様の問題は、私が行ったことを正確に行うことによって「解決」されました. ありとあらゆる助けをいただければ幸いです。これは私の無知のせいかもしれませんが、そうでないことを願っています。みんな、ありがとう!

4

1 に答える 1

2

fuelとの両方が整数の場合、に代入する前にmaxFuelの結果はfuel / maxFuel整数になります。fuelDisplay

したがって、 と の場合fuel == 99maxFuel == 100整数除算の結果はゼロになり、fuelDisplayそれ自体が float であるにもかかわらずゼロになります。

変数に float を使用するか、(おそらくより良い) キャストを使用して、結果が浮動小数点になるようにすることで、これを回避できます。

float fuelDisplay = (float) fuel / maxFuel;

または、数式を再配置することで、浮動小数点を完全に取り除くことができます。

int fuelDisplayFinal = fuel * 98 / maxFuel;
g.setColor(Color.YELLOW);
g.fillRect(15, 81, fuelDisplayFinal, 38);
g.drawImage(Bank.bar, 0, 70, null);

ここではローカルでのみ使用され、後で浮動小数点形式fuelDisplayが必要になることはないと仮定します。fuelDisplayFinal

于 2013-06-25T05:48:41.013 に答える