2011-04-01 43 views
1

我有一个函数可以将一个物品添加到网格的随机位置(这是在一个计时器事件上完成的),并且在这个函数中我有一个检查项目是否击中了玩家。如果它确实调用了该函数。但是当我再次调用该函数时,它会给我带来错误。这可能是因为该函数是一个(事件:TimerEvent)?下面1136:参数数量不正确。预期1

是功能

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

改变placeFood();放置食物(事件); – 2011-04-01 17:31:33

回答

2

如果手动调用该函数没有这些功能期待你会得到错误的TimerEvent。所以,你需要定义帕拉姆的默认值为null:

​​

对于美食地图创建多维数组这将包含对食品的引用。

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那么就意味着蛇的头部的位置是空的。

+0

完美。欢呼声,你不知道我怎么编码它,所以当对象(蛇击中食物)时,它会追踪什么? – DIM3NSION 2011-04-01 11:08:25

+0

@ DIM3NSION,当蛇碰到食物时,您需要知道如何追踪事件或如何为事件制作听众?如果你需要跟踪一些东西,使用trace(“追踪东西..”);'。附:选择答案。 (:??? – Rihards 2011-04-01 11:12:25

+0

如何将我的代码的侦听器,当蛇碰到食物感谢理查兹 – DIM3NSION 2011-04-01 11:28:07

1

如果你给一个事件监听器一个函数,那么这个定义需要匹配监听器所期望的。

此:

private function placeFood(event:TimerEvent):void{ 

将匹配TIMER_EVENT,但没有其他活动。

如果你想其他事件来调用这个监听器,将其更改为:

private function placeFood(event:Event):void{ 
0

使用placeFood(事件);这是一个大写E.

相关问题