![]() |
AS2, mtasc и this.
Здравствуйте!
Вот не могу понять такую вещь. Во FlashIDE для того чтобы узнать где я нахожусь (в каком объекте), например для трассирования я делал такую команду trace("This "+this); И мне показывался полный путь до текущего объекта. При компиляции через mtasc я тоже пытаюсь определить путь, например с помощью трассировки через flashout такой командой Flashout.info("This "+this); и где бы не дал эту команду, в логе получаю This [object Object] Что делаю не так, и как можно узнать путь до текущего объекта, в котором выполняется код? |
this указывает на текущую область видимости, это может быть не только мувиклип, но и любой другой объект. В том же IDE можно получить [object Object]
Код:
function a () { |
Можно добавить, что trace() неявно вызывает метод toString():
Код:
function whois() {trace (this);} |
Да вполне явно он его вызывает.
toString() у MovieClip возвращает путь к клипу. Там же _target и targetPath. |
Цитата:
Код:
class gamerender extends MovieClipКод:
var gamerenderinstance:gamerender=new gamerender();Код:
Gamerender constructor, this [object Object]Почему снова нет пути в this? Класс gamerender - это же теперь полноценный мувиклип. Еще вопрос - а почему вообще работает вызов this.gameinit()? По идее, если this не содержит путь к объекту, то как может вызваться его метод? Тут должна быть ошибка, а ее нет. Вообще, меня интересует, как писать классы - производные от MovieClip, чтобы в их коде можно было свободно пользоваться this, и this содержал осмысленное значение. Пожалуйста, дайте примерчик такого класса, и кода который делает инстанс этого класса в виде клипа. |
Названия классов должны начинаться с прописной (заглавной) буквы, ни больше, ни меньше.
MovieClip не создается через конструктор, клипы с классом создаются через attachMovie. Так что был создан объект, но это не MovieClip. Про «если this не содержит путь к объекту, то как может вызваться его метод?» ничего не понял. з.Ы. Есть ещё методы создания клипа без создания мувика в библиотеке, например у меня для этого есть класс McFactory (можно найти на форуме). Но это не очень хорошее решение. |
Цитата:
Подключение Gamerender теперь делаю так Код:
class Application Код:
class Gamerender extends MovieClipВсе это компилится без ошибок. Но! Судя по логу, вызова метода printthis() не происходит. Лог такой Gamerender constructor, this [object Object] Gameinit start, this [object Object] а "Gamerender print this ..." нету. То есть ничего с приаттаченыйм мувиком сделать не могу. Чего еще я не учел? Какой всеже правильный код подключения класса как мувика? PS: Да, приписал методу printthis ключевое слово public. Ничего не изменилось, он всеравно не вызывается. |
OMG, купите уже книгу по AS2, господи…
Ещё раз: экземпляры-наследники MovieClip НЕ создаются оператором new, ВООБЩЕ. Вы ничего не поняли, совершенно. Откройте хелп, прочитайте про то, как прописывать класс и linkage для мувиклипа в библиотеке и как создавать экземпляры таких клипов. Ей богу. Если не сработал attachMovie, значит клипа с linkage равным gamerenderinstance в либе нет, либо на этот клип не прописан соответствующий класс. А строка с new вообще не рабочая. |
Цитата:
Цитата:
Хочется просто кодом (без IDE, и без хаков) создавать классы наследователи мувиклипа. Пускай имея один (!) мувик в качестве заготовки. Но создавать классы в любом необходимом количестве. Это невозможно? |
Цитата:
Цитата:
|
Цитата:
Хаком получилось сделать, спасибо. И this начал содержать осмысленную строку. Честноговоря, не совсем удобно устроен create-метод, при копировании его в новый класс надо следить за именами в коде данного метода (везде надо прописать название текущего класса). Пока не сообразил, можно ли переделать его так чтоб просто копировать в новый класс. Ну это уже детали. |
Тут была небольшая дискуссия на сей счет. Лично я не вижу ничего плохого в использовании данного хака, учитывая что в AS3 создание мувика сделано по-человечески. Но не стоит забывать о композии, о которой напомнил Нокс. То есть, вы создаете обычный мувик, а класс не расширяете от MovieClip, а делаете как обычно с помощью new передавая ссылку на созданный мувик. Тогда класс будет выглядить примерно так:
Код:
import mx.utils.Delegate;Код:
new NewClass (mc); |
| Часовой пояс GMT +4, время: 19:08. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.