![]() |
общение между классами и базовые концепции
Надо сделать такую штуку: появляется текстовое поле со словом (вариант ответа теста), оно таскается мышью, через 10 секунд исчезает и появляется следующее. За эти 10 с слово (если ответ верный) надо оттащить на мувик, который так или иначе среагирует.
С помощью советов форума, хелпа, О'Рейли и Гурского удалось сделать появление и исчезновение слов, и мышью они успешно таскаются. Дальше картинку кораблика на сцене конвертирую в символ, класс назначаю "ship", базовый класс - flash.display.Sprite, instance name - caravella. Почему-то в Output всё равно считается MovieClip-ом. В ship.as создаю одноимённый класс, наследуя его от Sprite, импортирую и основной класс документа. В основной функции ship пытаюсь для начала оттрассировать hitTestObject каравеллы с объектом box из осн. класса документа (в нём сидит вариант ответа). Должно бы появиться "false", а появляется ругань на "possibly undefined variables". Проверял видимость переменных одного класса из другого в той же директории на более простых вещах (оттрассировать функцией одного класса переменную из другого) - то же самое. Всё объявлял "public". Ничего не понимаю! В хелпе и О'Рейли не смог найти объяснения, вроде, сказано, что если в публичном классе объявить публичную переменную или функцию, то её вполне можно прочитать в другом классе. Пожалуйста, если у кого найдётся время помотреть исходники и объяснить ошибки, сделайте это! Я какие-то базовые понятия путаю? В php, например, переменные любого публичного класса можно (импортировав) прочитать и даже переопределить в любом же. Исходники не могу загрузить. Вставляю код основного класса: Код:
package Код:
package |
Граждане, это я такую каку написал, что отвечать противно, или что-то непонятно?
|
Если хочешь обратится из конструктора ship к box, то напиши так:
Код:
Object(root).box |
не очень-то ясно как объяснить:
вот ты смотришь хиттест this.caravella с неким answers.box оба объекта не существуют : -у this(т.е. ship) нет сойства caravella , если надо смотреть хиттест этого объекта (ship), то и пиши this.hitTestObject, а по сути просто trace(hitTestObject(answers.box)); -дальше: у answers нет статического свойства box, сделай его статическим (static var box:Sprite=new Sprite; в классе answers)и тогда ship его увидит.. зы: а иначе, правильно derhab говорит, надо искать этот бокс не в классе, а в экземпляре (руте или где-ты там это добро создаешь) |
Цитата:
Надоело извиняться за глупые вопросы, но если я их не буду задавать, то ничему не научусь. |
Цитата:
|
Цитата:
|
:) я со своей стороны подумал: раз answers.box, то имеется ввиду статик..
чего лучше, не всегда ясно, хотя если это document class, то чего бы ему не быть статиком |
Цитата:
Спасибо за советы! Сделал box статическим, каравеллу добавил, как на AS3.ru написано (и Miramax спасибо!), вроде заработало. Но, естественно, один раз - листенер ENTER_FRAME после срабатывания убирается, иначе постоянно генерит. Пытаюсь присобачить проверку столкновения к box: Код:
package Теперь соответственно, ругань на каравеллу. Статической я её сделать не могу, так? По-всякому пробовал к ней обращаться - либо undefined, либо possibly undefined, либо, в последнем варианте (в коде выделено красненьким) Type error: hitTestObject param must not be null. Почему такой вариант - trace(caravella.parent), если добавить сразу после addChild(caravella), выводит [object answers] Просветите, пожалуйста, где я опять ошибся? |
что ж ты пишешь?)
Код:
(box.hitTestObject(Object(answers).caravella))Код:
(box.hitTestObject(caravella)) |
| Часовой пояс GMT +4, время: 07:17. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.