![]() |
общение между классами и базовые концепции
Надо сделать такую штуку: появляется текстовое поле со словом (вариант ответа теста), оно таскается мышью, через 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)) |
имхо ты ошибся, взявшись за задачу, совершенно не представляя как и что происходит..
попробуй на простых примерах: тогда и вопросы будут конкретнее, да и ответить тебе будет проще, а может и нужды не будет.. а перетряхивать десятки строк дикого кода, чтобы подстроиться под невнятную логику и обьяснить где ты ошибся, согласись, мало охотников найдется: так и будет игра в угадайку.. |
Я тоже так думал, но когда писал именно так, то возникала ошибка компиляции "Access of undefined property caravella"
|
у меня не возникает ошибка...
|
Цитата:
silin, если не трудно, можно поподробнее, в чём дикость и невнятность заключаются? И где бы найти материалы, изучение которых может помочь? Курсы в "Специалисте" были основаны на маленьких конкретных примерах 5-го Флэша. В форумах тоже обсуждаются отдельные конкретные моменты, и я согласен, что мучать людей диким кодом нехорошо. Гурский ООП касается краем, тем более, что AS2 и AS3 - это две большие разницы. Читаешь теорию на абстрактных примерах типа "создание класса Кот со свойствами "кол-во лап:int =4", создание событий и листенеров - всё так логично и понятно, а когда пытаешься эти концепции на практике применить - дикий код. :( :( :( Хотя насчёт "совершенно не представляешь" - имхо, малость перебор. Печально... и ноут сгорел, где все эти эксперименты проводились, хорошо хоть бэкап сделал. |
нене, без обид тока.., ничего личного, к тому ж это исключительно ИМХО (что и было подчеркнуто)
может и перебор, но что прикажешь думать о коде, проверяющем хиттест двух несуществующих объектов, заметь, однако, я не поленился как мог этот момент объяснить, но ты не сдаешься: ты создаешь каравелу, которую потом не поймать: var caravella:ship=new ship ; как ты думаешь, можно так что-нибудь создать (без () и их пустого класса), кроме undefined ? ищешь ты ее тоже, мягко говоря, своеобразно :Object(answers).caravella далее смотреть не стал .. а насчет простого, пример: еслиб ты написал var caravella:ship=new ship ; trace(caravella);//undefined и спросил почему, ты бы уже вчера знал ответ.., а вылавливать подобные баги в чужом проекте, занятие не помне, мне на самом деле есть чем заняться, еще раз сори.. из материалов: главное хелп к 9ке/флексу, как всегда хороший и с множеством примеров, да и в сети обсуждений навалом , специально подборку не собирал, но найти, думаю не составит труда.. |
Я не обижаюсь, на самом деле спасибо за критику, тем более подробную, которая чему-то учит.
Кстати о птичках, сделать trace(caravella) я в ближайшее время не смогу (как писано выше, ноут сгорел, а старенький рабочий комп 9-й флэш не тянет вообще), но (как опять писал выше) trace(caravella.parent) показывает [object answers]. Или родитель undefined-объекта может быть определён? Можно не отвечать, починят комп - сам проверю на простых примерах ;) Естественно, хелп буду курить изо всех сил. Просто сложилась дурацкая ситуация. В 2005-м окончив помянутые курсы по Флэш, проработав Гурского и вылизав демо-движок презентации с XML и эффектами, накидал объяв о поиске работы. Глухо было, как в танке - на совместительство никто не хочет. Потом подвернулась разовая большая работа по php+mysql, которых я тогда не знал, но сроки не давили, и всё сделал, учась на ходу. Знакомый профи не поленился изучить всё это, и сообщил, что кроме времени исполнения работы, очень даже ничего. Я не в смысле похвальбы, а в смысле, что на сложных вещах вполне можно учиться, если не торопят. И вот почти через 2 года предлагают работу - в основном такого рода школьные тесты делать, даже на совместительство, поскрипев, согласились. Причём я честно сообщил, что мне ещё учиться и учиться. Единственно, что потребовали в рекордные сроки сделать этот тест. Такое бывает, может быть, раз в жизни. Самое смешное, что та часть, которая работает, их удовлетворила на уровне приглашения на собеседование. Так что пойду и скажу, что берусь только если дадут по ходу учиться без дедлайнов :) . Извиняюсь за длинный оффтоп, просто не смог удержаться, и вдруг кто из опытных совет даст, как лучше поступить в данной ситуации. Может, не позориться и отказаться, а может не сдаваться. |
еще можно и третьи силы подключить, не вижу в этом никакой проблемы..
тем более, что у тебя форсмажорный комп.. пиши в личку, может чего решим |
| Часовой пояс GMT +4, время: 03:33. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.