我有一个函数可以将一个项目添加到一个随机位置到一个网格(这是在一个计时器事件上完成),在这个函数中,我有一个检查,看看该项目是否击中了玩家。如果是,则调用该函数。但是当我再次调用该函数时,它会给我错误。可能是因为函数是(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();
}
}
}
答案 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);这是一个大都会。