| hellopaso |
18.10.2011 23:59 |
движение по грид
ребята,
помогите пожалуйста
делаю такую игру
http://www.king.com/intermission_vir...89&action=play
все получается, только не знаю как сделать движение врагов.
Код AS3:
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);
}
}
}
Код AS3:
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);
}
Код AS3:
private function putItemToTable(actor:IActor):void
{
table[actor.yy][actor.xx] = actor;;
}
Код AS3:
private function removeItemFromTable(actor:IActor):void
{
if (table[actor.yy] && table[actor.yy][actor.xx] == actor) {
table[actor.yy][actor.xx] = "";
}
}
двигаются в правильном направлении, но стoлкиваются друг с другом
|