0

AS3 を使用してゲームを作成しています。ゲームが終了したら、次のキー フレームでプレーヤーの最終スコアを表示する必要があります。プレイヤーが敵と衝突すると、プレイヤーのスコアが 1 増加します。

これは、スコアを更新するコードです。

var playerScore:int = 0;

function updateTextFields():void
{
    playerScoreText.text = ("Score: " + playerScore);
}

function caught(enemy:MovieClip):void 
{
    enemy.removeEventListener(Event.ENTER_FRAME,dropEnemy);
    removeChild(enemy);
    playerScore++;
    updateTextFields(); 
}

ゲーム オーバー画面でプレイヤーの最終スコアを表示する必要がありますが、playerScore の値は動的で 1 ずつ増加するため、単に表示することはできません。

playerScoreText.text = ("Score: " + playerScore); 

変数のデフォルトは 0 です。

私は試してみましたが、それを機能させる方法がわかりません。

var playerScore = playerScore;   
4

2 に答える 2

0

すべてのフレームで var を使用する場合は、それをクラスに配置する必要があります (Main 関数の前)。また、パブリックまたはプライベート プレフィックスを使用する必要があります。private を追加すると、この変数をこのクラスでのみ使用でき、public を追加すると、そのファイルに関連するすべてのクラスで使用できるようになります。また、int の代わりに uint を使用することをお勧めします。

たとえば、次のようになります。

package
{
       //import...
       public class Main extends //(you should write Sprite, MovieClip... there)
       {
            public var playerScore:uint = 0;
            public function Main()
            {
                //constructor
            }
       }
}
于 2012-09-03T20:52:39.340 に答える
0

を取り除けば、うまく= 0いくはずです。playerScore は、フレーム スクリプトによって 0 に設定されています。宣言しかない場合var playerScore:int;、変数はデフォルトでゼロになり、Flash はこのステートメントplayerScore = 0をフレーム スクリプト (特定のフレームに到達するたびに呼び出される関数) に追加しません。

一般に、クラスを明示的に宣言する方が適切です。フレームに追加されたスクリプトから Flash がクラスを生成する方法は、1 つのステートメントが 2 つの場所で終わる可能性があるため、かなり混乱する可能性があります。たとえば、上記のコードは実際には次のようになります。

package filename_fla 
{
  public dynamic class MainTimeLine extends MovieClip
  {
    public var playerScore:int;

    internal function frame1:* 
    {
      playerScore = 0;
    }

    public function updateTextFields():void 
    {
      playerScoreText.text = ("Score: " + playerScore);
    }

    public function caught(enemy:MovieClip):void 
    {
      enemy.removeEventListener(Event.ENTER_FRAME,dropEnemy);
      removeChild(enemy);
      playerScore++;
      updateTextFields(); 
    }
  }
}
于 2012-09-04T05:13:32.723 に答える