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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.05.2014, 18:15
firefedot вне форума Посмотреть профиль Отправить личное сообщение для firefedot Найти все сообщения от firefedot
  № 1  
Ответить с цитированием
firefedot
 
Аватар для firefedot

Регистрация: Dec 2010
Сообщений: 129
Question Событие не отслеживается

Доброе...
Переписываю код из кадров в классы. Столкнулся с проблемой, что если вызывать события, то они не отрабатываются.

Вот пример:


Код AS3:
btn_unlock_1.addEventListener(MouseEvent.CLICK, lvl_1_stage);
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, downPers);
stage.addEventListener(KeyboardEvent.KEY_UP, upPers);
 
function lvl_1_stage(event:MouseEvent):void{
	removeChild(game_menu);
	addChild(container_lvl_1);
	container_lvl_1.addChild(lvl_1);
	hero_1.x=190;
	hero_1.y=580;
	container_lvl_1.addChild(hero_1);
	trace("Создан первый уровень и персонаж");
	addEventListener(Event.ENTER_FRAME, speedPers);
 
}
 
function downPers(event:KeyboardEvent):void{
	trace(event.keyCode);
	if(event.keyCode==38){  //Up
		up=true;
	} else if(event.keyCode==40){ //Down
		down=true;
	}else if(event.keyCode==39){ //Right
		right=true;
	}else if(event.keyCode==37){ //Left
		//pers.gotoAndPlay("left");
		left=true;
	}
 
}
 
function upPers(event:KeyboardEvent):void{
	trace(event.keyCode);
	if(event.keyCode==38){  //Up
		up=false;
		hero_1.gotoAndStop(1);
	} else if(event.keyCode==40){ //Down
		down=false;
		hero_1.gotoAndStop(1);
	}else if(event.keyCode==39){ //Right
		right=false;
		hero_1.gotoAndStop(1);
	}else if(event.keyCode==37){ //Left
		left=false;
		hero_1.gotoAndStop(1);
	}
 
}
 
function speedPers(event:Event):void{
	if(up){  //Up
		speedY -= power;
		if(hero_1.currentLabel != "up"){
      hero_1.gotoAndPlay("up");		
		}
	}
	if(down){ //Down
		speedY += power;
		if(hero_1.currentLabel != "down"){
      hero_1.gotoAndPlay("down");		
		}
	}
	if(right){ //Right
		speedX += power;
		if(hero_1.currentLabel != "right"){
      hero_1.gotoAndPlay("right");		
		}
	}
	if(left){ //Left
		speedX -= power;
		if(hero_1.currentLabel != "left"){
      hero_1.gotoAndPlay("left");		
		}		
	}	
	speedX *= friction;
	speedY *= friction;
	hero_1.x += speedX;
	hero_1.y += speedY;
 
}
Получаю ошибки:

Код:
1120: Access of undefined property stage.
1120: Access of undefined property downPers.
1120: Access of undefined property stage.
1120: Access of undefined property upPers.
Как понимаю, надо как то stage прописать, ведь если он определится, то и все остальные ошибки уйдут.

Суть такая, нажимаю на кнопку и появляется уровень и персонаж, который реагирует на нажатие клавиш клавиатуры.

stage перенес в функцию кнопки и поменял на контейнер, ошибки ушли, но и нажатие кнопок не отслеживается

Подскажите пожалуйста.
Спасибо.
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли


Последний раз редактировалось firefedot; 24.05.2014 в 18:26.
Старый 24.05.2014, 18:41
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
А зачем код из кадров переписывать в классы?
Ну, возможно, вам следует в конструкторе слушать событие Event.ADDED_TO_STAGE, и обрабатывать его в функции init, откуда и писать всю логику класса.
Ссылка на stage у экземпляра типа DisplayObject появляется только при добавлении на сцену, и удаляется при удалении со сцены.
__________________
There is no thing in this world that is not simple.

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

Регистрация: Dec 2010
Сообщений: 129
Просто до этого часть кода была в кадрах и в другом проекте)
А так, спасибо, посмотрю, что можно сделать, следуя совету....
Спасибо...
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
В таком случае лучше уж оставить в кадрах, потому, что если код из кадров использовать для классов то получается полная каша, и лучше уже писать с нуля.
__________________
There is no thing in this world that is not simple.

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

Регистрация: Dec 2010
Сообщений: 129
все переписал с нуля, а это место решил с копировать)
В общем написал
Код AS3:
container_lvl_1.addEventListener(Event.ADDED_TO_STAGE, added);
public function added(event:Event):void{
			trace("ok!");			
		}
И мои события заработали. Не понятно почему, но начали
Спасибо.

рано порадовался)))
работает через раз, именно через раз.

Добавлено через 9 минут
Точней работает, но после клика мышкой по любой области
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Попробуйте
Код AS3:
stage.focus = stage;
__________________
There is no thing in this world that is not simple.

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

Регистрация: Dec 2010
Сообщений: 129
Вот оно, спасибо.)
Мы этим тождеством указали, что все действия начинают работать разу на рабочей области?
В итоге вот это
Код AS3:
container_lvl_1.addEventListener(Event.ADDED_TO_STAGE, added);
public function added(event:Event):void{
			trace("ok!");			
		}
не пригодился.
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

Старый 24.05.2014, 19:23
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 8  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Этим мы дали флешке фокус на области, к которой крепим слушатели клавиатуры. Если текущий фокус != тот элемент, к которому мы прикрепили слушатель клавиатуры, то событие не диспатчится.
А точнее диспатчится, но у того элемента, на котором фокус.

Это относится именно к событиям клавиатуры, но не мышки.
__________________
There is no thing in this world that is not simple.

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

Регистрация: Dec 2010
Сообщений: 129
Понял, спасибо большое.
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

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

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


 


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


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