2010-09-22 57 views
0

創建一個類似pacman的遊戲,玩家可以在其中玩遊戲。當一個MovieClip(盒子)在舞臺上吃圓圈時,動態文本字段中的分數應該增加10分。Flash遊戲創建分數動態文本字段(AS3)

接收到錯誤: line:`scoreField.text =「」+ string(currentScore);

錯誤消息:調用一個可能未定義的方法字符串。

package { 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 

    public class Move extends MovieClip { 

    //var ScoreObjects:Array = new Array(); // creates ScoreObjects array 
     var circle:MovieClip; 


     private var keyRight:Boolean=false; 
     private var keyLeft:Boolean=false; 
     private var keyForward:Boolean=false; 
     private var keyBackward:Boolean=false; 
     private var forwardMove:int=0; 
     private var sideMove:int=0; 

     private var inertia:int=8; //amount of friction 

    //var score_field:String; 
    //var point:MovieClip; 
    //private var playerScore:int; 

    var currentScore:int; 


// Constructor-------------------------------------------------------------------- 
     public function Move() { 
     init(); 
     } 

// function init ----------------------------------------------------------------- 
    function init():void { 

     //stage.frameRate=60; 
    //var score_field:String=""; 

    /*ScoreObjects[0] = new Circle(); 
    ScoreObjects[0].amount = 1; // amount of point -- not sure 
    ScoreObjects[0].name = "circle";*/ 
    circle.amount = 10; // each circle is worth 10 points 

    //var playerScore:int = 0; 
    var currentScore:int = 0; 

     stage.addEventListener(Event.ENTER_FRAME, frameloop); 
     stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownEvent); 
     stage.addEventListener(KeyboardEvent.KEY_UP, keyUpEvent); 

    box.addEventListener(Event.ENTER_FRAME, eatCircle); 
    wall.addEventListener(Event.ENTER_FRAME, hitWall); 



    //stage.addChild(ScoreObjects[0]); // add Score Objects to stage ------------------------------ 
    //trace(ScoreObjects[0]); 

    /*ScoreObjects[0].x = 105; 
    ScoreObjects[0].y = 233;*/ 

     } 

// function eatCircle -------------------------------------------------------------- 
function eatCircle(event:Event):void { 

    if (box.hitTestObject(circle)) { 
    trace ("I ate the circle"); 
    stage.removeChild(circle); 
    var newPoint:int; 
    newPoint = circle.amount; 
    // point = ScoreObjects[0].amount //store property's value of amount in variable...? 
    calcPoints(newPoint); 
    //box.deleteEventListener(Event.ENTER_FRAME, eatCircle) 
    //calcScore(); 
    //playerScore++; 
    } else { 
    trace ("I didn't eat the circle"); 
    } 
} 

function calcPoints(newPoint:int):void { 
    currentScore += newPoint; 
    updateDisplayScore(currentScore); 
} 

function updateDisplayScore(currentScore:int) { 
    scoreField.text = " " + String(currentScore); 
    var displayText:String=""; 
    displayText = scoreField.text; // assigning the message to the field*/ 
} 



// function hitWall -------------------------------------------------------------- 
function hitWall(event:Event):void { 
    if (box.hitTestObject(wall)) { 
    box.y+=6; 
    } else if (box.hitTestObject(wall2)) { 
    box.y-=6; 

    } else if (box.hitTestObject(wall3)) { 
    box.x+=6; 

    } else if (box.hitTestObject(wall4)) { 
    box.x-=6; 
     } 

} 

// function keyDownEvent ------------------------------------------------------------ 
    function keyDownEvent(event:KeyboardEvent):void { 
     switch (event.keyCode) { 
      case Keyboard.UP: 
       keyForward = true; 
       keyBackward = false; 
       break; 

      case Keyboard.DOWN: 
       keyBackward = true; 
       keyForward = false; 
       break; 

      case Keyboard.LEFT: 
       keyLeft = true; 
       keyRight = false; 
       break; 

      case Keyboard.RIGHT: 
       keyRight = true; 
       keyLeft = false; 
       break; 
     } 
     } 

// function keyUpEvent ------------------------------------------------------------ 
    function keyUpEvent(event:KeyboardEvent):void { 
     switch (event.keyCode) { 

      case Keyboard.UP: 
       keyForward = false; 
       break; 

      case Keyboard.DOWN: 
       keyBackward = false; 
       break; 

      case Keyboard.LEFT: 
       keyLeft = false; 
       break; 

      case Keyboard.RIGHT: 
       keyRight = false; 
       break; 
     } 
     } 

// function frameloop ------------------------------------------------------------ 
    function frameloop(event:Event):void { 

     //amount of force 
     if (keyForward) { 
      forwardMove -=2; 
     } 
     if (keyBackward) { 
      forwardMove += 2; 
     } 
     if (keyLeft) { 
      sideMove -= 2; 
     } 
     if (keyRight) { 
      sideMove += 2; 
     } 

     forwardMove +=(0-forwardMove)/inertia; 
     sideMove +=(0-sideMove)/inertia; 

     box.y+=forwardMove; 
     box.x+=sideMove; 

    //point = e.currentTarget.amount; 


     } 

    }// end of class 
}// end of package 
+0

和錯誤是什麼? – Serge 2010-09-22 22:12:06

+0

抱歉不知道我的問題發生了什麼。我一直在試圖發佈代碼,但它沒有顯示出來。 – jc70 2010-09-22 22:13:36

回答

2
scoreField.text = " " + string(currentScore); 

應該

scoreField.text = " " + String(currentScore); 
+0

啊!感謝捕捉!這肯定需要修復。現在我收到一個新的錯誤:無法訪問空對象引用的屬性或方法。 \t在Move/init() \t at Move() – jc70 2010-09-22 22:26:02

+0

不知道我是否應該把它作爲一個新的問題發佈...抱歉,我在這裏有點新 – jc70 2010-09-22 22:27:04

+1

錯別字真的很痛!至於新的問題,是的,最好把它作爲一個新的問題,因爲它不是同一個錯誤。但我敢肯定你會得到這個錯誤,因爲你沒有聲明你的函數是'public' – Serge 2010-09-22 22:33:16

0
scoreField.text = "" + String(currentScore); 

會工作,你也可以使用

scoreField.text = " " + currentScore.toString();