ekonomizer
25.09.2011, 22:19
Здравствуйте! Помогите пожалуйста найти ошибку, не понимаю в чем дело:(
Пишу изометрический движок. Дело встало на выстраивании плиток.
Создаю общую группу плиток(на основе Group) - world и начинаю заполнять ее в цикле 4мя
одинаковыми плитками(каждая тоже на основе Group).
Проблема в том, что плитки выстраиваются не ровно.
Каждая первая плитка ряда теряет координату по Х... По чему - вот вопрос.
То есть проблема возникает на 3ем круге цикла.
В дебагере до последнего присваивания все переменные имеют нужные координаты.
Приведу 3ий круг цикла:
http://pics.ivbt.ru/i/f/c4848a84fdc292b4969987e617b8ad67.png
// Главное приложение.
private function tileWorld():void
{
// Задаем объединяющий все плитки UIкомпонент и добавляем его на сцену.
// Тут все хорошо.
var world:Group = new Group();
world.x = stage.stageWidth / 2;
world.y = 100;
addElement(world);
// Заполняем мир плитками.
// Тут все хорошо.
for(var i:int = 0; i < 2; i++)
{
for(var j:int = 0; j < 2; j++)
{
// Просто рисуем плитку размером 20 на 20 цвета 0xcccccc.
// Тут все хорошо.
var tile:DrawnIsoTile = new DrawnIsoTile(20, 0xcccccc);
// Распологаем плитку в мире.
// Тут сложнее - Класс DrawnIsoTile наследуется от класса ObjectTile
// Который позволяет проводить хитрые преобразования 3D координат в координаты экрана. И имеет сеттер position.
// И ТУТ возникает проблема!
tile.position = new Point3D(i * 20, 0, j * 20);
world.addElement(tile);
}
}
}
public Class ObjectTile extends Group
{
public function set position(value:Point3D):void
{
_position = value;
// Преобразуем 3D координаты в координаты экрана.
var screenPos:Point = IsoUtils.isoToScreen(_position);
// на данном моменте все хорошо screenPos.x=20 screenPos.y=10
super.x = screenPos.x;
super.y = screenPos.y;
// После выхода из функции получается, что X плитки = 0, Y = 10.
// И так у каждой первой плитки ряда - X теряем, Y все правильно.
// Самое интересное если в дебагере принудительно задать screenPos.x=21 то все работает X не пропадает.
}
}
Помогите пожалуйста разобраться, в чем проблема не могу понять.
Пишу изометрический движок. Дело встало на выстраивании плиток.
Создаю общую группу плиток(на основе Group) - world и начинаю заполнять ее в цикле 4мя
одинаковыми плитками(каждая тоже на основе Group).
Проблема в том, что плитки выстраиваются не ровно.
Каждая первая плитка ряда теряет координату по Х... По чему - вот вопрос.
То есть проблема возникает на 3ем круге цикла.
В дебагере до последнего присваивания все переменные имеют нужные координаты.
Приведу 3ий круг цикла:
http://pics.ivbt.ru/i/f/c4848a84fdc292b4969987e617b8ad67.png
// Главное приложение.
private function tileWorld():void
{
// Задаем объединяющий все плитки UIкомпонент и добавляем его на сцену.
// Тут все хорошо.
var world:Group = new Group();
world.x = stage.stageWidth / 2;
world.y = 100;
addElement(world);
// Заполняем мир плитками.
// Тут все хорошо.
for(var i:int = 0; i < 2; i++)
{
for(var j:int = 0; j < 2; j++)
{
// Просто рисуем плитку размером 20 на 20 цвета 0xcccccc.
// Тут все хорошо.
var tile:DrawnIsoTile = new DrawnIsoTile(20, 0xcccccc);
// Распологаем плитку в мире.
// Тут сложнее - Класс DrawnIsoTile наследуется от класса ObjectTile
// Который позволяет проводить хитрые преобразования 3D координат в координаты экрана. И имеет сеттер position.
// И ТУТ возникает проблема!
tile.position = new Point3D(i * 20, 0, j * 20);
world.addElement(tile);
}
}
}
public Class ObjectTile extends Group
{
public function set position(value:Point3D):void
{
_position = value;
// Преобразуем 3D координаты в координаты экрана.
var screenPos:Point = IsoUtils.isoToScreen(_position);
// на данном моменте все хорошо screenPos.x=20 screenPos.y=10
super.x = screenPos.x;
super.y = screenPos.y;
// После выхода из функции получается, что X плитки = 0, Y = 10.
// И так у каждой первой плитки ряда - X теряем, Y все правильно.
// Самое интересное если в дебагере принудительно задать screenPos.x=21 то все работает X не пропадает.
}
}
Помогите пожалуйста разобраться, в чем проблема не могу понять.