0

私は AS3 を初めて使用し、テキストベースのゲームを作成していますが、画面からテキストだけを消去するのに苦労しています。FlxText と FlxButtons を使用しています。clear() を使用すると、すべてが削除されます。これがどのように見えるかです(これが私が入れるべき以上のものである場合は申し訳ありません。私は急いでおり、コード作業もおそらく悪いです.):

public function DragonState() 
		{
			
			FlxG.mouse.show();
			menuButton = new FlxButton(240, 220, "Menu", menu);
			add(menuButton);
			swordButton = new FlxButton(0, 220, "Slash", sword);
			add(swordButton)
			shieldButton = new FlxButton(80, 220, "Sheild Bash", shield);
			add(shieldButton)
			bowButton = new FlxButton(160, 220, "Shoot", bow);
			add(bowButton)
			
		}
		private function menu():void
		{
			FlxG.mouse.hide();
			FlxG.switchState(new MenuState);
		}
		public function sword():void 
		{
			
			playerAttack = Math.floor(Math.random() * (2 - 0 +2) * 7);
			dragonAttack = Math.floor(Math.random() * (1 - 0 + 1) * 7);
			add(new FlxText(0, 0, 320, "The Dragon hit you for " + String(dragonAttack)));
			add(new FlxText(0, 10, 320, "You hit the Dragon for " + String(playerAttack)));
			updateHealth()
		}
		public function shield():void
		{
			playerAttack = Math.floor(Math.random() * (2 - 0 +2) * 2);
			dragonAttack = Math.floor(Math.random() * (1 - 0 + 1) * 2);
			add(new FlxText(0, 0, 320, "The Dragon hit you for " + String(dragonAttack)));
			add(new FlxText(0, 10, 320, "You hit the Dragon for " + String(playerAttack)));
			updateHealth()
		}
		public function bow():void
		{
			playerAttack = Math.floor(Math.random() * (2 - 0 + 2) * 4);
			dragonAttack = Math.floor(Math.random() * (2 - 0 + 2) * 4);
			add(new FlxText(0, 0, 320, "The Dragon hit you for " + String(dragonAttack)));
			add(new FlxText(0, 10, 320, "You hit the Dragon for " + String(playerAttack)));
			updateHealth()
		}
		public function updateHealth():void
		{
			dragonHealth = dragonHealth - playerAttack
			playerHealth = playerHealth - dragonAttack
			add(new FlxText(0, 20, 320, "The Dragon has " + String(dragonHealth) + " health left."));
			add(new FlxText(0, 30, 320, "You have " + String(playerHealth) + " health left."));
			
			if (dragonHealth <= 0) {
				add(new FlxText(0,0,320,"Good Job"));
			}else if (playerHealth<=0) {
				add(new FlxText(0,0,320,"Oh No!"));
			} else {
				add(new FlxText(0,0,320,"What will you do?"));	
			}
		}

4

2 に答える 2

1

Flixel をcreate()使用する場合、クラス コンストラクターを使用する代わりに、状態のメソッドで要素をインスタンス化することをお勧めします。メモリを節約し、余分なガベージ コレクターの実行を回避することで、パフォーマンスが向上します。

ボタンで行うのと同じように、画面にレンダリングする要素への参照/プロパティを設定することもお勧めします。そうすれば、状態の任意のメソッドでそれらにアクセスできます。これは、たとえば、テキストをクリアするのに役立ちます。

その慣行に従って、画面に表示するテキストごとにプロパティを用意する必要があります。

class DragonState {
     // Properties for buttons
      private var menuButton :FlxButton;
      private var swordButton :FlxButton;
      private var shieldButton :FlxButton;

      // Properties for texts
      private var enemyAttack :FlxText;
      private var enemyHealth :FlxText;
      private var playerAttack :FlxText;
      private var playerHealth :FlxText;


      override public function create():void {
          // instantiate buttons
          FlxG.mouse.show();
          menuButton = new FlxButton(240, 220, "Menu", menu);
          add(menuButton);
          swordButton = new FlxButton(0, 220, "Slash", sword);
          add(swordButton);
          shieldButton = new FlxButton(80, 220, "Sheild Bash", shield);
          add(shieldButton);
          bowButton = new FlxButton(160, 220, "Shoot", bow);
          add(bowButton);

          // instantiate texts (they are empty by default)
          enemyAttack = new FlxText(0, 0, 320);
          enemyHealth = new FlxText(0, 20, 320,);
          playerAttack = new FlxText(0, 10, 320);
          playerHealth = new FlxText(0, 30, 320);

          add(enemyAttack);
          add(enemyHealth);
          add(playerAttack);
          add(playerHealth);
      }


      public function sword():void {
          playerAttack = Math.floor(Math.random() * (2 - 0 +2) * 7);
          dragonAttack = Math.floor(Math.random() * (1 - 0 + 1) * 7);

          // Change the content of texts
          enemyAttack.text = "The Dragon hit you for " + String(dragonAttack);
          playerAttack.text = "You hit the Dragon for " + String(playerAttack);
          updateHealth()
      }

      public function updateHealth():void {
          dragonHealth = dragonHealth - playerAttack
          playerHealth = playerHealth - dragonAttack
          enemyHealth.text = "The Dragon has " + String(dragonHealth) + " health left.";
          playerHealth.text = "You have " + String(playerHealth) + " health left.";

          // (...)
     }

      public function clearTexts():void {
          enemyAttack.text = "";
          playerAttack.text = "";
          enemyHealth.text = "";
          playerHealth.text = "";
     }
}

すべてのテキストを非表示にする場合は、それらを に追加して、FlxGroupそのグループを非表示にすることができます。グループを非表示にすると、グループに含まれるすべてが非表示になります。次のように実装できます。

class DragonState {
      // (...)

      // Properties for texts
      private var enemyAttack :FlxText;
      private var enemyHealth :FlxText;
      private var playerAttack :FlxText;
      private var playerHealth :FlxText;

      // Group containing all texts
      private var texts :FlxGroup;

      override public function create():void {
          // (...)

          // create the texts group
          texts = new FlxGroup();

          // instantiate texts (they are empty by default)
          enemyAttack = new FlxText(0, 0, 320);
          enemyHealth = new FlxText(0, 20, 320,);
          playerAttack = new FlxText(0, 10, 320);
          playerHealth = new FlxText(0, 30, 320);

          // add all texts to the group
          texts.add(enemyAttack);
          texts.add(enemyHealth);
          texts.add(playerAttack);
          texts.add(playerHealth);

          // Add the group to the state
          add(texts);
      }


      public function sword():void {
          // (...)

          // Change the content of texts
          enemyAttack.text = "The Dragon hit you for " + String(dragonAttack);
          playerAttack.text = "You hit the Dragon for " + String(playerAttack);
          updateHealth();
      }

      public function updateHealth():void {
          // (...)
          enemyHealth.text = "The Dragon has " + String(dragonHealth) + " health left.";
          playerHealth.text = "You have " + String(playerHealth) + " health left.";
          // (...)
     }

     public function hideTexts():void {
          texts.visible = false;
     }

     public function showTexts():void {
          texts.visible = true;
     }
}
于 2014-10-01T12:50:27.210 に答える