PDA

Просмотр полной версии : движение по грид


hellopaso
18.10.2011, 23:59
ребята,

помогите пожалуйста

делаю такую игру
http://www.king.com/intermission_viral.jsp?gameId=189&action=play


все получается, только не знаю как сделать движение врагов.



private function handleCreatures():void
{

var heroPoint:Point = new Point(hero.x, hero.y);

for (var i:int = 0; i < enemies.length; i++) {

var e:Enemy = enemies[i] as Enemy;

var ltg:Point = gameContainer.localToGlobal(new Point(e.x, e.y)) as Point;

if (isOnStage(ltg)) {


var enemyPoint:Point = new Point(e.x, e.y);

var diffPoint:Point = heroPoint.subtract(enemyPoint);
diffPoint.normalize(1);

tryToMoveActor(e, diffPoint.x, diffPoint.y, 1);


}
}
}





private function tryToMoveActor(e:Enemy, xV:Number, yV:Number, speed:Number):void
{
/// узнай новую позицию
var nextTablePos:Point = new Point();
nextTablePos.x = Math.floor((e.x + xV * speed) / MainSettings.CELL_SIZE);
nextTablePos.y = Math.floor((e.y + yV * speed) / MainSettings.CELL_SIZE);

/// если кто то уже занимает место
if ((table[nextTablePos.y] && table[nextTablePos.y][nextTablePos.x] is IActor)) {


if (IActor(table[nextTablePos.y][nextTablePos.x]) != e) {

return;
}


}

e.x += xV * speed;
e.y += yV * speed;

e.updateTablePos();



putItemToTable(e);
removeHeroFromTable(e);




}



private function putItemToTable(actor:IActor):void
{
table[actor.yy][actor.xx] = actor;;
}





private function removeItemFromTable(actor:IActor):void
{
if (table[actor.yy] && table[actor.yy][actor.xx] == actor) {

table[actor.yy][actor.xx] = "";
}
}



двигаются в правильном направлении, но стoлкиваются друг с другом