2012-09-15 58 views
1

我想在一個遊戲中混合兩個教程。級別3以前用在動作腳本文件中,但我將其轉換爲正常的AS3時間線。閃存錯誤#1063參數計數不匹配AS3

我得到這個錯誤:

ArgumentError: Error #1063: Argument count mismatch on adventure_fla::MainTimeline/newObjects(). Expected 0, got 1. 
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction() 
at flash.events::EventDispatcher/dispatchEvent() 
at flash.utils::Timer/flash.utils:Timer::tick() 

這是代碼...對不起,如果它的混亂。

const speed:Number = 5.0; 
    var nextObject:Timer; 
// array of objects 
    var objects:Array = new Array(); 

function initGame():void{ 
player.x=200; 
player.y=400; 
stage.addEventListener(MouseEvent.MOUSE_MOVE,movePlayer); 
Mouse.hide(); 
player.gotoAndStop("arrow"); 
setGameTimer(); 
newObjects(); 
addEventListener(Event.ENTER_FRAME, moveObject); 
} 

    function movePlayer(e:MouseEvent):void{ 

    player.x=mouseX; 
    e.updateAfterEvent();} 

    function setGameTimer():void { 
trace("GAME TIMER STARTED"); 
var gameTimer:Timer = new Timer(40000, 1); 
gameTimer.addEventListener(TimerEvent.TIMER_COMPLETE, endGame); 
gameTimer.start() 
    } 

    function endGame(e:Event):void { 
    trace("Game Over"); 
    // remove all objects 
    for (var i:int=objects.length-1; i>=0; i--) { 
     removeChild(objects[i]); 
     objects.splice(i, 1); 
    } } 

    function setNextObject():void { 
nextObject = new Timer(1000, 1); 
nextObject.addEventListener(TimerEvent.TIMER_COMPLETE, newObjects); 
nextObject.start(); 

    function newObjects():void{ 
//create next object 
     // array of good and bad objects 
     var badObjects:Array = ["Bad_1", "Bad_2"] 
     var goodObjects:Array = ["Good_1", "Good_2"] 
     // create random number 
     if (Math.random() < .5) { 
      //based of treat object length 
      var r:int = Math.floor(Math.random()*goodObjects.length); 
      // get the treat object by name and cast it as its own class in a temporary variable 
      var classRef:Class = getDefinitionByName(goodObjects[r]) as Class; 
      // now we can make a new version of the class 
      var newObjects:MovieClip = new classRef(); 
      // dynamic var (because mc is an object) typestr it as good 
      newObjects.typestr = "good"; 
     } else { 
      // for bad same as above 
      r = Math.floor(Math.random()*badObjects.length); 
      var classRef:Class = getDefinitionByName(badObjects[r]) as Class; 
      var newObjects:MovieClip = new classRef(); 
      // typestr it bad 
      newObjects.typestr = "bad"; 
     } 
     // random pos 
     newObjects.x = Math.random()* 500; 
     newObjects.scaleX = newObjects.scaleY = .4; 
     addChild(newObjects); 
     // push it to array 
     objects.push(newObjects); 
     // create another one 
     setNextObject(); 

    } 

    function moveObject(e:Event):void { 
    // cycle thru objects using a for loop 
    for (var i:int=objects.length-1; i>=0; i--) { 
     //move objects down based on speed 
     objects[i].y += speed; 
     objects[i].rotation += speed; 
     // if objects leaves the stage 
     if (objects[i].y > 400) { 

      removeChild(objects[i]); 

      objects.splice(i, 1); 

     } 
    } 
    } 

回答

5

newObjects不接受任何參數,但它用作事件偵聽器(要求它接受事件對象)。

它應該看起來像function newObjects(event:TimerEvent):void

3

用作事件偵聽器的函數應接受Event類型的一個參數,具體取決於它偵聽的事件類別。您正在監聽TimerEvent類的事件,所以是的,將參數聲明爲TimerEvent。要添加不需要傳遞給它的事件偵聽器參數的函數,使用默認值構造是這樣的:

function newObjects(event:TimerEvent=null):void {...} 

的「= NULL」除了可以讓你沒有任何參數傳遞給你的函數,以及聲明的參數將允許您在將其作爲事件處理程序調用時不會收到異常。

相關問題