Здравствуйте!
По уроку
http://www.ant-karlov.ru/TowerDefence5-poisk-puti.html делаю движок поиска пути, с некоторыми изменениями. Вот тут привожу код:

Код AS3:
package ru.reNiks
{
import flash.geom.Point;
import ru.RainbowAdventure.Universe;
public class PathFinder
{
private static const WATER_KEY:int = 999;
private var _mapDirs:Array = [];
private var _mapWidth:int = 29;// Ширина карты
private var _mapHeight:int = 19;// Высота карты
private var _freeCell:int = 0;// Вид свободной ячейки
private var _maxIterations:int = 500;// Счетчик повторов
private var _mapMask:Array;
public function PathFinder()
{
_mapMask = Universe.Map;
trace("hahahah",_mapMask);
}
private function lox()
{
for (var a:int = 0; a < _mapHeight; a++)
{
_mapDirs[a] = [];
for (var g:int = 0; g< _mapWidth; g++)
{
if (_mapMask[a][g] == 1 || _mapMask[a][g] == 0)
{
_mapDirs[a][g] = 0;
}
}
}
trace("yyy",_mapDirs);
}
private function inMap(ax:int, ay:int):Boolean
{
if (ax >= 0 && ay < _mapWidth && ay >= 0 && ay < _mapHeight)
{
return true;
}
else
{
return false;
}
}
private function goWater(ay,ax):void
{
trace("1AY=",ay,ax);
// Если клеточка сверху свободна
if (inMap(ax,ay - 1) && _mapMask[ay - 1][ax] == _freeCell)
{
trace("afs",_mapMask);
_mapMask[ay - 1][ax] = WATER_KEY;// Заполняем её водой
// Запоминаем из какой клетки вода пришла
(_mapDirs[ay - 1][ax] as Point).x = ax;
(_mapDirs[ay - 1][ax] as Point).y = ay;
}
// Если клеточка слева свободна
if (inMap(ax + 1,ay) && _mapMask[ay][ax + 1] == _freeCell)
{
_mapMask[ay][ax + 1] = WATER_KEY;// Заполняем её водой
// Запоминаем из какой клетки вода пришла
trace("AY=",ay,ax);
trace("eee",_mapDirs);
(_mapDirs[ay][ax + 1] as Point).x = ax;
(_mapDirs[ay][ax + 1] as Point).y = ay;
trace("ees",_mapDirs);
}
// Если клеточка снизу свободна
if (inMap(ax,ay + 1) && _mapMask[ay + 1][ax] == _freeCell)
{
_mapMask[ay + 1][ax] = WATER_KEY;// Заполняем её водой
// Запоминаем из какой клетки вода пришла
(_mapDirs[ay + 1][ax] as Point).x = ax;
(_mapDirs[ay + 1][ax] as Point).y = ay;
}
// Есле клеточка справа свободна
if (inMap(ax - 1,ay) && _mapMask[ay][ax - 1] == _freeCell)
{
_mapMask[ay][ax - 1] = WATER_KEY;// Заполняем её водой
// Запоминаем из какой клетки вода пришла
(_mapDirs[ay][ax - 1] as Point).x = ax;
(_mapDirs[ay][ax - 1] as Point).y = ay;
}
trace("aaa",_mapDirs);
}
public function findWay(starte:Point, end:Point):Array
{
trace("finish",starte,end);
// Устанавливаем точку куда льем "воду"
_mapMask[end.y][end.x] = WATER_KEY;
var counter:int = 0;// Счетчик проходов по карте
// Выполняем проходы по карте
while (counter < _maxIterations)
{
// Ищим путь / размазываем воду по маске проходимости
for (var a:int = 0; a < _mapHeight; a++)
{
for (var d:int = 0; d < _mapWidth; d++)
{
// Если в текущей ячейке вода
if (_mapMask[a][d] == WATER_KEY)
{
goWater(a, d);// то распространяем её в соседние ячейки
}
}
}
trace("asss",_mapDirs);
// Проверяем не попала ли вода в точку финиша
if (_mapMask[starte.y][starte.x] == WATER_KEY)
{
// Ура! Путь найден!
// Возвращаем путь
return getWay(starte, end);
}
counter++;
}
// Количество проходов исчерпано, путь не найден
// Возвращаем пустой массив
return [];
}
private function getWay(starte:Point, end:Point):Array
{
var way:Array = [];// Маршрут
var p1:Point = new Point(starte.x,starte.y);
var p2:Point = new Point();
trace("p1",p1);
trace("ASSS",_mapDirs);
// Добавляем в маршрут все точки
// пока не дойдем до конца
while (true)
{
trace("xDDD",p1, p2);
trace("Xddd",p1.x, p1.y);
trace("mab",_mapDirs);
// Получаем новую точку из направления предыдущей
p2.x = (_mapDirs[p1.y][p1.x] as Point).x;
p2.y = (_mapDirs[p1.y][p1.x] as Point).y;
way.push(new Point(p2.x, p2.y));
// Добавляем новую точку в маршрут;
p1.x = p2.x;
p1.y = p2.y;
// Проверяем, не добрались ли до конца
if (p1.x == end.x && p1.y == end.y)
{
break;
}
}
return way;
trace(way);
}
public function set freeCell(value:int):void
{
_freeCell = value;
}
public function set maxIterations(value:int):void
{
_maxIterations = value;
}
}
}
при компиляции вот такая ошибка:

Код:
TypeError: Error #1010: Термин не определен и не имеет свойств.
at ru.reNiks::PathFinder/goWater()
at ru.reNiks::PathFinder/findWay()
at ru.RainbowAdventure.Characters::Enemys/init()
at ru.RainbowAdventure.Characters::Enemys/init1()
at flash.display::DisplayObjectContainer/addChildAt()
at flash.display::Stage/addChildAt()
at fl.rsl::RSLPreloader/contentComplete()
в 81ой строчке "(_mapDirs[ay][ax + 1] as Point).x = ax" и, при этом в абсолютно идентичной 69ой строчке, которая между прочим выполняется раньше, вот кстати и она "(_mapDirs[ay - 1][ax] as Point).x = ax;", никакой ошибки не появляется.
Подскажите пожалуйста в чем проблема? Спасибо заранее