![]() |
error 1061
Пару дней назад начал изучать as3. Постепенно врубаюсь. Начал делать игру по примеру MerlinTwi http://flasher.ru/forum/showthread.php?t=83431 и встрял в начале на 2 странице на прелоадере.
Цитата:
Даже в мане опечатку нашел пока искал Цитата:
|
Номера ошибок никто не знает наизусть. Если вы хотите получить ответ - не называйте темы так никогда.
И читайте, что говорится в ошибке - вы вызываете методо play() у переменной типизированой как DisplayObjectContainer - возможно у нее есть такой метод, но вы должны компилятору это явно объяснить = кастовать к объекту, у которого такой метод есть. |
Вставь в прелоадаре вместо parent.play();
Код AS3:
|
Код AS3:
|
Штобы компилятор не ругался, не?
|
еще один весельчак)) даж я с минимальными знаниями ас3 и то понимаю, что если объект уже мувиклип, то компилятор не будет ругаться на объект.методКлипа().
Добавлено через 41 секунду хотя если ошибаюсь мне будет оч стыдно за свои слова :) |
чувак...
Код AS3:
|
Цитата:
Элементарный пример: Код AS3:
|
Ну да если объект диспейконтейнер просто тогда да. Согласен. Но тогда и надо писать так:
Код AS3:
|
Цитата:
Вот здесь вы проверяете: parent является ли DisplayObjectContainer - так он и так им является, иначе что это за parent. Единственная ситуация, когда это условие не проканает - parent == null. Ладно проверили, убедились, что parent не null. Далее вы ему, сразу так не церемонясь, заявляете, что он MovieClip. Откуда такая уверенность? А что если он Sprite? Так вот если он будет Sprite, то (parent as MovieClip) в рантайме у вас превратиться в null. А у null вы попытаетесь вызвать метод play();, за что получите рантайм-ошибку. Так что человек здесь все правильно делал: Код AS3:
|
Цитата:
Цитата:
Цитата:
|
стыдно конечно) ну не суть. зато много полезного
|
А мне не нравится кастовать по 2 раза. Достаточно вспомнить, что
Код AS3:
Код AS3:
|
gloomyBrain, достаточно if (someClip)
|
Цитата:
Если же необходимо вызвать много методов / свойств - то ваш вариант безусловно лучше. |
etc, спасибо =) но я в курсе. Привык так просто, вот и пишу
@i.o. Кастинг несколько медленнее создания переменной. |
gloomyBrain, гм, по моему быстрее или медленнее — это сущая мелочь.
|
Читал предыдущие посты, но не догнал такую вещь. В Flash IDE на основной шкале имеются мувики с вложенными кадрами. Класс WeaponDemo - это Document Class.
Код AS3:
|
Метод getChildAt возвращает DisplayObject, не обязательно MovitClip, это уже выше обсудили.
|
Цитата:
Код AS3:
|
goldlider, а что делает функция trace?
|
Код AS3:
|
Цитата:
|
Неявно.
Как тут: Код AS3:
|
метод трейс умеет выводить только строки, если ему скормить что-то что отличается от строки, он сперва конвертнёт это в строку
|
Тут еще подумал, получается, у всех классов этот метод сам переопределяется компилятором.
|
Цитата:
Цитата:
|
gloomyBrain, да. Это и имел в виду. В обоих случаях.
|
Цитата:
|
да, втихаря
|
Объясните пожалуйста такую вещь. В приведенном мной выше коде, над объектом какого класса выз-ся метод getChildAt()?
Если этот метод вызывается над объектом класса WeaponsDemo, который яв-ся наследником DisplayObjectContainer. Так зачем приведение метода getChildAt() к типу MovieClip, если этот метод итак передается по наследству. Получается что запись getChildAt(i).stop аналогична записи this.getChildAt(i).stop. Что из этого выходит, что объекту WeaponsDemo из метода getChildAt(i) возвращается объект DisplayObjectContainer и затем вызывается метод stop(). У меня какая-то каша ничего понять не могу. |
Цитата:
И даже если бы возвращался DisplayObjectContainer, то у этого класса нету метода stop, о чем опять таки рассказывает документация. Читайте книги и документацию, и каша пропадет. |
Цитата:
Код AS3:
Код AS3:
|
Цитата:
Код AS3:
|
bgg, вы о чем? Я знаю, что в каком порядке идет в дисплей листе. Вы сказали, что getChildIndex возвращает объект класса DisplayObject. Как тогда DisplayObject может приводится к классу MovieClip, который находится ниже в иерархии?
|
Причем тут дисплей лист? Мда, вам ещё оказывается все объяснили на второй странице, если бы заметил раньше, то не распинался бы.
Все, ушел из темы, тут я бессилен. |
Человек просто совсем начинает, что вы так сразу на него то? )
Смотри. Есть такая штука: наследование. Создали класс А, и унаследовали от него класс Б. Класс Б является наследником класса А, т.е. он унаследовал его поведения и свойства, но при этом он его расширил, добавив что-то своё новое. И фишка в том, что мы можем в переменную с типом А записать ссылку на экземпляр с типом Б: Код AS3:
Манипуляции происходят со ссылками. Мы не изменили сущность экземпляра класса Б, записав ссылку на него в переменную с типом А. Однако компилятор то этого не знает ) Ему побоку что там записано: А или Б. Он точно знает, что там А и поступать он будет как с А. К чему я клоню? К тому что если в Б создать метод hello, то мы не сможем его вызвать через переменную с типом А: потому что компилятор не знает, что там записано на самом деле. Это остается на откуп программисту. И надо подсказать ему: Код AS3:
Код AS3:
Вот этот method в твоём примере это toString. (на самом деле, насколько я знаю это неправда, но для понимания считай так: не нужно тебе в прототипы лезть). А метод hello в это stop. Цепочка вообще такая: MovieClip->Sprite->DisplayObjectContainer->InteractiveObject->DisplayObject->EventDispatcher. В переменную с типом EventDispatcher ты можешь записать любой MovieClip. Или любой DisplayObject. А в переменную с типом DisplayObjectContainer ты можешь записать Sprite. Но ты не можешь записать в переменную с типом DisplayObjectContainer, скажем, EventDispatcher. |
Тигра красавец =) Тебе бы маны писать =) Плюс в карму
|
| Часовой пояс GMT +4, время: 23:21. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.