Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Логика классов (http://www.flasher.ru/forum/showthread.php?t=149764)

SONce 31.01.2011 10:49

Логика классов
 
В общем ситуация такова.
Только начинаю работать с классами.
Существует два класса, первый - Universe, второй Tiler.
Оба экстенды от мувиклипа.

Класс Universe создает мир. Проходит циклом по XML и размещает на сцене Tilerы.
Получается сетка.
Tiler простой мувиклип с набором дополнительных опций.

Создаю третий класс, Player. Стоит задача получить реальные(x,y) координаты Tilerа, пытаюсь в классе Player сделать
Код AS3:

stage.getChildByName(имя_тилера)

возвращяет нул, пытаюсь к карте обратится
(map - это обьект Universe)
Код AS3:

stage.map.getChildByName(имя_тилера)

ругается на мап.

В итоге я так и не осилил как добратся до нужного тилера. Может кто что подскажет?

cleptoman 31.01.2011 10:51

1 - если вы создавали тайлы программно - проверьте, что при создании вы задаете тайлам свойство name, чтобы потом можно было обратиться к нужному через getChildByName
2 - у stage нет свойства map

SONce 31.01.2011 10:52

Цитата:

Сообщение от cleptoman (Сообщение 969196)
1 - если вы создавали тайлы программно - проверьте, что при создании вы задаете тайлам свойство name, чтобы потом можно было обратиться к нужному через getChildByName
2 - у stage нет свойства map


да, при создании тайла у него есть
Код AS3:

this.name = 'x'+gridX+'y'+gridY;

map в данном случае я пытался к обьекту обратится.

cleptoman 31.01.2011 11:01

а вы тайлы на стейдж чтоле добавляете?

SONce 31.01.2011 11:03

тайлы добавляются внутрь обьекта map
тоесть в кадре:
Код AS3:

map:Universe = new Universe();
addChild(map);

в классе
Код AS3:

.......
var tileID:Tiler = new Tiler(gridX,gridY);
.......
addChild(tileID);
.......


cleptoman 31.01.2011 11:06

ну а почему вы тогда их на стейдж ищите?..в мапе и ищите

внутри map

Код AS3:

...
super.getChildByName("someName")
...


SONce 31.01.2011 11:18

Добавил в Universe:
Код AS3:

                function tileCoord(coordX,coordY){
                        return this.getChildByName("x"+coordX+"y"+coordY);
                }

из плеера делаю
Код AS3:

                        var un:Universe;
                        trace(un.tileCoord(1,1));

получаю
"TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"."

Добавлено через 28 минут
Тут я понимаю проблема обращения класс-класс

Wolsh 31.01.2011 11:55

Нет, здесь проблема в том что un не инициализирован. Это пустая переменная, в ней нет ссылки ни на какой Universe, так как Universe то Вы не создали. Так у кого Вы спрашиваете .tileCoord(1,1) ?
Код AS3:

var un:Universe = new Universe();
trace(un.tileCoord(1,1));
trace(un.getChildByName("x"+1+"y"+1));

Кроме того Ваш метод tileCoord должен что-то возвращать? Определите правильно сигнатуру.

SONce 31.01.2011 11:57

Цитата:

Сообщение от Wolsh (Сообщение 969211)
Нет, здесь проблема в том что un не инициализирован. Это пустая переменная, в ней нет ссылки ни на какой Universe, так как Universe то Вы не создали. Так у кого Вы спрашиваете .tileCoord(1,1) ?
Код AS3:

var un:Universe = new Universe();
trace(un.tileCoord(1,1));
trace(un.getChildByName("x"+1+"y"+1));

Кроме того Ваш метод tileCoord должен что-то возвращать? Определите правильно сигнатуру.


если я иниализирую Universe то на стейдж добавиться еще одно поле) как быть?

Wolsh 31.01.2011 12:03

))) Наверно,
Код AS3:

trace(map.tileCoord(1,1));
trace(map.getChildByName("x"+1+"y"+1));

, раз уже есть ссылка map на экземпляр Universe, добавленный на стейдж.
Метод перепишите!
Код AS3:

function tileCoord(coordX,coordY):Tiler
{
        return (this.getChildByName("x"+coordX+"y"+coordY) as Tiler);
}



Часовой пояс GMT +4, время: 12:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.