代码之家  ›  专栏  ›  技术社区  ›  user1078385

在下一个关键帧AS3上显示动态变量

  •  0
  • user1078385  · 技术社区  · 13 年前

    我正在使用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的值是动态的,并且递增一,我不能只显示

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

    因为变量默认值为0。

    我试过了,但我不知道如何使它发挥作用。

    var playerScore = playerScore;   
    
    2 回复  |  直到 13 年前
        1
  •  0
  •   BenMorel Manish Pradhan    12 年前

    如果你想在每一帧中使用var,你必须把它放在一个类中(在Main函数之前)。此外,您应该使用公共或私人前缀。如果你添加private,你只能在这个类中使用这个变量,public将使你能够在与该文件相关的每个类中使用它。此外,最好使用uint而不是int。

    例如,它应该是这样的:

    package
    {
           //import...
           public class Main extends //(you should write Sprite, MovieClip... there)
           {
                public var playerScore:uint = 0;
                public function Main()
                {
                    //constructor
                }
           }
    }
    
        2
  •  0
  •   cleong    13 年前

    如果你摆脱了 = 0 那么它应该起作用。playerScore被帧脚本设置为0。如果你只有声明 var playerScore:int; ,变量将默认为零,Flash不会添加该语句 playerScore = 0 到帧脚本(每次到达特定帧时调用的函数)。

    一般来说,最好显式地声明一个类。Flash从添加到框架中的脚本生成类的方式可能相当令人困惑,因为一条语句可能会出现在两个地方。例如,您上面的代码实际上将变成以下代码:

    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(); 
        }
      }
    }