Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.07.2009, 19:44
SONICTOM вне форума Посмотреть профиль Отправить личное сообщение для SONICTOM Найти все сообщения от SONICTOM
  № 1  
Ответить с цитированием
SONICTOM
[+1.3 13.07.09]

Регистрация: Aug 2004
Сообщений: 24
По умолчанию Access of undefined property

Пишу первую примитивную игру леталку-стрелялку. Вот такой код:

Код AS3:
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);
 
 }
}
При тесте вылазит ряд ошибок:
Цитата:
1120: Access of undefined property shoot.
Я предпологал сделать так, чтобы при клике по мувиклипу "field" создается объект "shoot", который библиотеке лежит в Библиотеке в виде мувиклипа. В свойствах объекта в Библиотеки указано имя класса "sh".
После этого "shoot" получает координаты мувиклипа "sam" и движется вверх. Если его координата по у станет меньше нуля, то он удаляется).

Подскажите, пожалуйста, где я допустил ошибку. Пожалуйста. объясните, как тупому, так как знаний у меня буквально после 20 видеоуроков по AS3. И еси можно, поправьте, пожалуйста, код.

Заранее большое спасибо за помощь и терпение!


Последний раз редактировалось iNils; 13.07.2009 в 20:12.
Старый 13.07.2009, 20:51
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 2  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
По идее, shoot объявляется как локальная переменная, которая исчезает сразу по завершению функции fieldClick. А она это делает (завершается) за доли секунды ))

Так что когда вызывается функция shootTrace - ей просто нечего обрабатывать. Отсюда и выскакивает ошибка 1120.

для ваших целей - переменная должна быть объявлена извне функции fieldClick. Другое дело - преобразовать код для ваших задач. Это я подумаю - если местные спецы не помогут раньше.

Старый 13.07.2009, 20:56
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 3  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Код AS3:
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);
 
 }
}
Знакомство с областью действия переменной
Объекты и классы

Старый 13.07.2009, 22:42
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 4  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
Код AS3:
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);
 
 }
}
var shoot:sh = e.target as sh;

и еще:
Код AS3:
field.removeEventListener(MouseEvent.CLICK, fieldClick);
тут поменяйте что-нибудь..а то у вас каждый фрэйм филд отписывается от клика.)
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью


Последний раз редактировалось cleptoman; 13.07.2009 в 22:45.
Старый 14.07.2009, 00:01
Мечтатель вне форума Посмотреть профиль Отправить личное сообщение для Мечтатель Найти все сообщения от Мечтатель
  № 5  
Ответить с цитированием
Мечтатель
 
Аватар для Мечтатель

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
Партизан абсолютно необязательно использовать круглые скобки при создании экземпляра класса. Это является делом вкуса. Разумеется, когда метод-конструктор класса запрашивает обязательные параметры, Вы будете должны их передать, а так разницы никакой не будет
Код AS3:
var spOne:Sprite = new Sprite;
и
Код AS3:
var spOne:Sprite = new Sprite();
абсолютно тождественны! И в первом и во втором случае, программа разместит в памяти AVM2 экземпляр класса Sprite, на который будет ссылаться переменная spOne
__________________
04.08 1516 23:42

Старый 14.07.2009, 00:18
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 6  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Партизан абсолютно необязательно использовать круглые скобки при создании экземпляра класса.
не знал спасибо.

Старый 14.07.2009, 01:02
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 7  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Мечтатель, просто в первом случаи видно, что у "повара" проблемы со вкусом, и кушать его стрепню опасно для здоровья

Старый 14.07.2009, 08:01
MonkDead вне форума Посмотреть профиль Отправить личное сообщение для MonkDead Посетить домашнюю страницу MonkDead Найти все сообщения от MonkDead
  № 8  
Ответить с цитированием
MonkDead
 
Аватар для MonkDead

Регистрация: Dec 2007
Сообщений: 204
BlooDHounD, красиво сказал. Такую стряпню действительно есть не хочется.

Старый 14.07.2009, 09:30
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 9  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Допускается оба варианта записи. Уж кому как нравиться выделяться. Я пользуюсь вторым вариантом по привычке, и это новичков не пугает)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 14.07.2009, 11:46
SONICTOM вне форума Посмотреть профиль Отправить личное сообщение для SONICTOM Найти все сообщения от SONICTOM
  № 10  
Ответить с цитированием
SONICTOM
[+1.3 13.07.09]

Регистрация: Aug 2004
Сообщений: 24
Братцы, большое спасибо за помощь!

Подскажите, пожалуйста, как можно рационально вызвать функцию fieldClick?
Пока я создал прозрачный мувиклип field на заднем плане и вызываю fieldClick кликом по нему.
Есть ли вариант MousEventa кликом не по field, а за его пределами. Тогда я мог бы сделать маленький мувиклип field, поместил бы его де-то за пределами рабочей области игры и вызывал бы fieldClick кликом мимо мувиклипа field.

Спасибо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:20.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.