![]() |
Как обратиться к экземпляру класса из другого класса?
Здравствуйте! Есть 2 файла - класса .as. И 1 скрепляющий .fla.
Собственно, вопрос: как прописать в коде 1 из классов обращение к экземпляру второго класса (данный экземпляр находится на stage файла .fla)? Код AS3:
Раньше вместо hero вычислял положение мыши (ведь, по сути, тоже объект на сцене), у неё есть зарезервированное имя, а вот к другому объекту как... |
если у вас персонаж действительно на сцену добавлен, то так
Код AS3:
|
Сделал так, как вы предложили:
Код AS3:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at characters::turret/movement() at characters/game() Идентичность названия сверил. |
Значит его там и нет. Вообще он врятли лежит на stage. getChildByName вызывать нужно не у stage, а у того класса куда добавляются "2 файла - класса .as" (скорее всего это и есть класс 1).
|
Если класс 1 является документ классом, то да, объект добавляется в экземпляр этого класса, а не на сцену
|
Stitch512, так в том-то и дело, что я добавляю два классовых файла не к третьему классу, а на сцену файла .fla.
Следовательно, не получается создать код типа: Код AS3:
goodguy, не совсем понял, что такое документ-класс. |
Класс 1
Код AS3:
Код AS3:
Код AS3:
|
HardCoder, классный способ! Мне все ясно, но у меня уже голова идет кругом...
В fla записал следующие строки: Код AS3:
1136: Incorrect number of arguments. Expected 0. Почему 0 ожидалось, если в конструкторе прописал 1 аргумент??? Код AS3:
1203: No default constructor found in base class characters:turret. |
А что такое characters?
|
2 файла as находятся в папке characters и, соответственно, в таком пакете.
Fla лежит в 1 директории с папкой characters. |
Stalin45, а вы точно создаёте непосредственно объект класса turret, а не объект класса из библиотеки, расширяющий turret? Просто такая ошибка обычно поэтому возникает.
|
Parez, я добавлял именно базовый класс, описанный в файле as, но да, действительно, спасибо, проблему обнаружил (даже после удаления всех экземпляров объектов turret и связей с ними он выдавал ошибку, но! мне же нужен именно библиотечный класс (он графически оформлен).
Так как же создать библиотечный класс (CS4), принимающий аргумент?? Или, если так нельзя, как тогда графически оформить экземпляр? P.S. И отсюда ещё важный вопрос: так а разве можно будет в коде файла turret.as записать в obj ссылку на библиотечный экземпляр? Он его распознает? |
Да, все просто. Создаете мувиклип. В свойствах пишете где class: turret. А где base class ничего не пишете. По умолчанию base class должен быть мувиклип. Пишете свой класс turret, где он принимает параметры. И создаете экземпляр
Код AS3:
А если не подходит вам такое, то способов столько, что мама дорогая. Класс 1 Код AS3:
Код AS3:
|
Ура! Ну, наконец-то...все заработало как надо! Спасибо, HardCoder!
Использовал второй предложенный вами вариант. Но, если у вас будет время, ответьте пожалуйста на вопрос: Если мы базовый класс turret'а сделаем обычным MC, то не могу понять, где же тогда описать сам класс turret, ведь он уже описан в пакете characters (связь с которым мы поменяли на связь с MC)? |
Пишем класс
Код AS3:
Код AS3:
|
Вы не совсем поняли, так где именно хранится код, описанный вами (напр., base class раньше был в папке characters в файле turret, а код для графы class - ?)? В директории файла fla или где-то ещё?
|
Вот мой способ поиска чего бы то ни было та сцене
Код AS3:
|
Ваш мувиклип turret - это всего лишь "мультик". Для того чтобы этот мультик имел свое поведение, свои свойства мы пишем для него класс. Код выше
Код AS3:
Теперь написанный вами класс turret имеет код actionscript но кроме того он имеет и графическое представление в виде вашего мувиклипа из библиотеки. Графа base class указывает на базовый класс. Базовый класс = это класс от которого унаследован ваш класс turret. Эту графу можно оставить пустую. Флеш сама установит базовый класс. Не умею более грамотно обьяснить :( Добавлено через 4 минуты booksmaster, можно пример, где такое может пригодится? |
Ещё есть неплохой вариант привязывать графику из библиотеки к кастом классу. Сначала экспортируете ваш мувик из библиотеки для ActionScript. А в классе делаете импорт этого класса из библиотеки.
Код AS3:
получается что-то вроде этого: Код AS3:
p.s. Либо, как вариант, чтобы класс был более универсальным, можно одним из аргументов в конструкторе передавать класс из библиотеки. Код AS3:
|
Parez, а в чем преимущество использования композиции, вместо банальной привязки мувиклипа напрямую к классу?
Добавлено через 1 минуту Все, понял. Преимущество в том что не обязательно наследовать класс от MovieClip или Sprite, а можно от другого класса, конструктор которого принимает обязательные параметры. |
Цитата:
Например, тем, что в конструктор можно передать любой графический класс уже в рантайме. Благодаря этому он более универсален. Или вы о другом? |
| Часовой пояс GMT +4, время: 02:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.