1136:参数数量不正确。预期1

时间:2011-04-01 10:59:21

标签: flash actionscript-3 timer

我有一个函数可以将一个项目添加到一个随机位置到一个网格(这是在一个计时器事件上完成),在这个函数中,我有一个检查,看看该项目是否击中了玩家。如果是,则调用该函数。但是当我再次调用该函数时,它会给我错误。可能是因为函数是(event:TimerEvent)?

以下是功能

 private function placeFood(event:TimerEvent = null):void{   
        var rndI:uint = Math.floor(Math.random() * DIM);  //sets a random integer based on the the floor
        var rndJ:uint = Math.floor(Math.random() * DIM);

        var rndX:Number = grid[rndI][rndJ].x; // sets a grid position for the food item to go
        var rndY:Number = grid[rndI][rndJ].y;

        if(_foodMap[int(rndX)] == null){
         _foodMap[rndX] = [];
        }

        if(_foodMap[int(rndX)][int(rndY)] == null){
         _foodMap[rndX][rndY] = food;
        }




        food = makeItem(Math.random() * 0xFFFFFF);// random color
        food.x = rndX;
        food.y = rndY;


        addChild(food); //adds the food to the board


        for (var i:uint = 0; i < snake.length; i++){
            if (rndY == snake[i].y && rndX == snake[i].x){ 
                placeFood();
            }
        } 
        }

3 个答案:

答案 0 :(得分:2)

如果手动调用该函数而没有函数期望的TimerEvent,则会出现错误。因此,您需要定义param的默认值为null:

private function placeFood(event:TimerEvent = null):void {
    //code
}

对于食物图,创建多维数组,其中包含对食物的引用。

private var _foodMap:Array = [];

然后在你添加食物的地方然后将它添加到食物地图中,就像我在下面所做的那样你可以检查蛇的头部位置是否为空。

if(_foodMap[int(rndX)] == null){
    _foodMap[rndX] = [];
}

if(_foodMap[int(rndX)][int(rndY)] == null){
    _foodMap[rndX][rndY] = food;
}

然后如果同时_foodMap[int(snakesHeadX)] == null_foodMap[int(snakesHeadX)][int(snakesHeadY)] == null则意味着蛇头的位置是空的。

答案 1 :(得分:1)

如果要为事件侦听器提供函数,那么定义需要与侦听器期望的内容相匹配。

此:

private function placeFood(event:TimerEvent):void{

将匹配TIMER_EVENT,但没有其他事件。

如果您希望其他事件调用此侦听器,请将其更改为:

private function placeFood(event:Event):void{   

答案 2 :(得分:0)

使用placeFood(Event);这是一个大都会。