День добрый,
В приведённом ниже коде я пытаюсь вызвать функцию RenderField, указав в качестве параметра другую функцию, описанную на месте. В моём понимании AddPart должна передаться в рендер и там выполнится. Но при выполнении почему то исполняется сразу AddPart (с вызова RenderField уходит на него) в следствии чего падает с ошибкой, так как переменные (x,y,cell) ещё не определены, так как они определяются в RenderField.
Участок проблемного кода:
reconnaissanceState.prototype={
preload:function()
{
},
create:function()
{
game.curState='reconnaissance';
game.squads=game.add.group();
game.tiles=game.add.group();
RenderField(this.AddPart,1);
},
AddPart:function()
{
game.map[x][y].xCoordinate=xCoordinate;
game.map[x][y].yCoordinate=yCoordinate;
cell.row=x;
cell.collomn=y;
cell.inputEnabled=true;
cell.events.onInputDown.add(this.addSquad,this)
},
Код самого RenderField:
function RenderField(addPart,point)
{
for(var x=(battle.BS.xSize-1); x>=0; x--)
{
for(var y=((battle.BS.ySize+battle.BS.xSize/2)-1); y>=0; y--)
{
if(OffsetOut(battle.BS.xSize,x,battle.BS.ySize,y))
{
var cell;
var tmp=battle.BS.map[x][y].ground;
var xCoordinate;
var yCoordinate;
//for changeable field and different first shift
//this part from lab, where A* pathfinder was realised
//only removed horisontal offset (now idea why) and add vertical shift
if(battle.BS.xSize%2 == 1)
{
xCoordinate=game.yLineSize*(y-(battle.BS.xSize-1-x)/2);
yCoordinate=game.xLineSize*x*0.75;
}
else
{
xCoordinate=game.yLineSize*(y-(battle.BS.xSize-1-x)/2);
yCoordinate=game.xLineSize*x*0.75;
}
switch(tmp)
{
case 1:
cell=game.tiles.create(xCoordinate,yCoordinate,'Grass');
break;
case 2:
cell=game.tiles.create(xCoordinate,yCoordinate,'Cover');
break;
case 3:
cell=game.tiles.create(xCoordinate,yCoordinate,'Danger');
break;
case 4:
cell=game.tiles.create(xCoordinate,yCoordinate,'Diff');
break;
case 5:
cell=game.tiles.create(xCoordinate,yCoordinate,'Ruin');
break;
case 0:
cell=game.tiles.create(xCoordinate,yCoordinate,'Unreached');
break;
default:
cell=game.tiles.create(xCoordinate,yCoordinate,'Offset');
break;
}
if (point==1) {addPart();}
}
}
}
}
Такая конструкция появилась так как несколько раз надо сделать одно и тоже, заменив несколько строк, которые и были бы описаны в передаваемой функции. В точке вызова все переменные уже определены.
Как правильно передать код, чтобы не проходил вызов AddPart на месте определения?
Если это имеет значение, то сам reconnaissanceState является описанием состояния для Phaser.io