![]() |
|
||||||||||
|
|||||
|
[+1.3 13.07.09]
Регистрация: Aug 2004
Сообщений: 24
|
Пишу первую примитивную игру леталку-стрелялку. Вот такой код:
field.addEventListener(MouseEvent.CLICK, fieldClick); function fieldClick(a:MouseEvent):void { var shoot:sh=new sh; addChild(shoot); shoot.x=sam.x; shoot.y=sam.y; shoot.addEventListener(Event.ENTER_FRAME, shootTrace); } function shootTrace(a:Event):void { if (shoot.y>0) { shoot.y-=5; field.removeEventListener(MouseEvent.CLICK, fieldClick); } if (shoot.y<0) { removeChild(shoot); } } Цитата:
После этого "shoot" получает координаты мувиклипа "sam" и движется вверх. Если его координата по у станет меньше нуля, то он удаляется). Подскажите, пожалуйста, где я допустил ошибку. Пожалуйста. объясните, как тупому, так как знаний у меня буквально после 20 видеоуроков по AS3. И еси можно, поправьте, пожалуйста, код. Заранее большое спасибо за помощь и терпение! Последний раз редактировалось iNils; 13.07.2009 в 20:12. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
По идее, shoot объявляется как локальная переменная, которая исчезает сразу по завершению функции fieldClick. А она это делает (завершается) за доли секунды ))
Так что когда вызывается функция shootTrace - ей просто нечего обрабатывать. Отсюда и выскакивает ошибка 1120. для ваших целей - переменная должна быть объявлена извне функции fieldClick. Другое дело - преобразовать код для ваших задач. Это я подумаю - если местные спецы не помогут раньше. |
|
|||||
field.addEventListener(MouseEvent.CLICK, fieldClick); //Создавать экземпляр sh нужно здесь, когда используете ссылку на него из //разных функций (Знакомство с областью действия переменной) // Когда создаете экземпляр класса ( var shoot:sh=new sh; ) пишется new sh() //у вас скобки пропущены (Объекты и Классы) кстати имя класса (sh) //принято писать с заглавной (Sh) var shoot:sh=new sh(); function fieldClick(a:MouseEvent):void { // Здесь sh не создается, пропущены () - должно быть var shoot:sh=new sh(); // var shoot:sh=new sh; addChild(shoot); shoot.x=sam.x; shoot.y=sam.y; shoot.addEventListener(Event.ENTER_FRAME, shootTrace); } function shootTrace(a:Event):void { if (shoot.y>0) { shoot.y-=5; field.removeEventListener(MouseEvent.CLICK, fieldClick); } if (shoot.y<0) { // Здесь неплохо бы удалить сначала листенер shoot.removeEventListener(Event.ENTER_FRAME, shootTrace); removeChild(shoot); } } Объекты и классы |
|
|||||
function shootTrace(a:Event):void { var shoot:sh = e.target as sh; if (shoot.y>0) { shoot.y-=5; field.removeEventListener(MouseEvent.CLICK, fieldClick); } if (shoot.y<0) { shoot.removeEventListener(Event.ENTER_FRAME, shootTrace); removeChild(shoot); } } и еще: тут поменяйте что-нибудь..а то у вас каждый фрэйм филд отписывается от клика.)
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью Последний раз редактировалось cleptoman; 13.07.2009 в 22:45. |
|
|||||
|
Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
|
Партизан абсолютно необязательно использовать круглые скобки при создании экземпляра класса. Это является делом вкуса. Разумеется, когда метод-конструктор класса запрашивает обязательные параметры, Вы будете должны их передать, а так разницы никакой не будет
и абсолютно тождественны! И в первом и во втором случае, программа разместит в памяти AVM2 экземпляр класса Sprite, на который будет ссылаться переменная spOne
__________________
04.08 1516 23:42 |
|
|||||
|
стервочка (я мужик)
|
Мечтатель, просто в первом случаи видно, что у "повара" проблемы со вкусом, и кушать его стрепню опасно для здоровья
|
|
|||||
|
Регистрация: Dec 2007
Сообщений: 204
|
BlooDHounD, красиво сказал. Такую стряпню действительно есть не хочется.
__________________
http://www.infinity3d-engine.com |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Допускается оба варианта записи. Уж кому как нравиться выделяться. Я пользуюсь вторым вариантом по привычке, и это новичков не пугает)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
[+1.3 13.07.09]
Регистрация: Aug 2004
Сообщений: 24
|
Братцы, большое спасибо за помощь!
Подскажите, пожалуйста, как можно рационально вызвать функцию fieldClick? Пока я создал прозрачный мувиклип field на заднем плане и вызываю fieldClick кликом по нему. Есть ли вариант MousEventa кликом не по field, а за его пределами. Тогда я мог бы сделать маленький мувиклип field, поместил бы его де-то за пределами рабочей области игры и вызывал бы fieldClick кликом мимо мувиклипа field. Спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|