ヘルスバー/プログラミング トリック 2 パーティ
-
21-12-2019 - |
質問
トップダウンのゾンビシューティングゲームが進行中で、ヘルスバーを表示する例からの奇妙な方法があります。コードは次のようになります。
private function createLives():Void
{
BaseLifeText = new FlxText(4, 28, 220, "Base Health: ", 12);
BaseLifeText.color = 0xffFFFFFF;
guiGroup.add(BaseLifeText);
for (i in 0...9) {
var cur:Int = lifeGroup.length + 1;
//Start Trick
var colnum:Int = cur;
var xPos:Float = (BaseLifeText.x + 96) + 14 * (colnum - 1);
//End Trick
life = new FlxSprite(xPos, 34,"assets/BaseHealth.png");
lifeGroup.add(life);
}
}
これは haxe/haxeflixel ですが、私はこのトリックを as3 でもう一度見たことがありますが、描画呼び出しでのみ行われます。上記のトリックでは、1 つのスプライトを表示するだけでなく、9 つのスプライトを表示します。この特定のトリックに名前はありますか?
上のトリックに関するパート2では、ベースを癒す収集品を追加しようとしています。ただし、数値的に追加することに成功しただけです。私はこれをやっています:
private function collectCoolant(player:FlxObject, cooler:Coolant):Void
{
cooler.kill();
var cur:Int = lifeGroup.length + 1;
lives ++;
life.x += 14 * cur;
lifeGroup.length + 1;
}
それはその物の寿命を延ばしますが、それが作成されたときのようにグラフィック的にそれを行うわけではありません。このシステムを使用して、オブジェクトの健全性をグラフィカルに復元するにはどうすればよいでしょうか?
解決
- それはトリックではありません。ご覧のとおり、これは問題に対する些細なアプローチであり、非常に奇妙であり、機能していません。
今のようにできるわけがありません。初めに、
lifeGroup.length + 1;
そうでない場合は無意味なステートメントです+
過負荷になっていますが、そうではありません。長さを取得してそれに 1 を加えるだけです。だからあなたは次のようなことをしたかったと思いますlifeGroup.length+= 1;
長さを 1 ずつ増加させますが、残念ながらこれも機能しません。まず第一に、length プロパティは読み取り専用であるため、コンパイルできません。また、コンパイルが完了し、グループの長さの変更が Flixel に実装されたとしても、どのオブジェクトをグループに追加すればよいのか分からないため、クラッシュしてしまいます。私の提案は、適切なヘルスバーコンポーネントを作成し、それを操作することです。そうしないと、間違ったコードを書き続けて、ライフを増やすために作成コードをコピーペーストすることになります。