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

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

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

Регистрация: Apr 2009
Сообщений: 167
Записей в блоге: 1
По умолчанию Не срабатывает addEventListener

всем хеллоу!

Есть у меня класс Craft :
Код AS3:
package classes
{
 
	import flash.display.MovieClip;
	import flash.events.*;
	import classes.assisted.keyPressed;
 
	public class Craft extends MovieClip
	{
		var kp = new keyPressed();
 
		public function Craft():void
		{
			trace("class craft called");	
			addEventListener(Event.ENTER_FRAME, ef);						
		}
 
		public function ef(e:Event)
		{			
		    kp.keyP(this);		
		}
	}
}
и есть у меня другой класс keyPressed

Код AS3:
package classes.assisted
{
	import flash.events.*;
 
	public class keyPressed
	{		
		public function keyPressed():void
		{
			trace("class keyPressed called");				
		}
 
		public function keyP(obj):void
		{
			obj.addEventListener(KeyboardEvent.KEY_DOWN, kd);	
			obj.y-=1;
		}
 
		public function kd(event:KeyboardEvent)
		{
			trace("^_^");
			//trace(event.keyCode);
		}
	}
}
и после компиляции компилятор пишет "class keyPressed called", а как бы я по клавишам не стучал, то "^_^" некак не хочет написаться, хотя объект я явно передал классу, тк он медленно но верно ползет вверх
Почему такая несправедливость в мире?
Неужто мне прийдеться передовать не только сам объект, но и коды нажатых клавишь?

Старый 16.01.2010, 17:14
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
1. Названия классов с прописной.
2. super() первой строчкой в конструкторе.
3. Вы каждый кадр вызываете addEventListener() - зачем?
4. переменные, аргументы и возвращаемый тип функций должны быть типизированы.
5. визуальные объекты диспатчат события клавиатуры только когда они в фокусе (например, если вы нажали клавишу Tab чтобы на них перевести фокус), иначе события клавиатуре диспатчатся из stage.
6. Не пишите звездочки в импортах - используйте нормальный редактор кода, где импорты подставляются сами.
__________________
Hell is the possibility of sanity

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

Регистрация: Apr 2009
Сообщений: 167
Записей в блоге: 1
Цитата:
Сообщение от wvxvw Посмотреть сообщение
2. super() первой строчкой в конструкторе.
если чесно не очень понял зачем это, мой класс вдеь нечего не расширяет

Цитата:
Сообщение от wvxvw Посмотреть сообщение
3. Вы каждый кадр вызываете addEventListener() - зачем?
исправил, действительно глупо

Цитата:
Сообщение от wvxvw Посмотреть сообщение
4. переменные, аргументы и возвращаемый тип функций должны быть типизированы.
ну это я потом все сделаю, когда основную кость доделаю =)

Цитата:
Сообщение от wvxvw Посмотреть сообщение
5. визуальные объекты диспатчат события клавиатуры только когда они в фокусе (например, если вы нажали клавишу Tab чтобы на них перевести фокус), иначе события клавиатуре диспатчатся из stage.
когда я в классе keyPressed пишу в конструкторе "stage.addEventListener(KeyboardEvent.KEY_DOWN, kd);", то компилятор мне выдает:
"1120: Обращение несуществующего свойства stage."

что же делать-то?!

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

Регистрация: Mar 2006
Сообщений: 44
А у вот тоже вопрос, уже очень давнишний, но он в тему, поэтому решил не делать новый тред..)
При запуске выскакивает варнинг : Warning: 1090: Ошибка миграции: Flash Player не запускает обработчик событий onMouseDown автоматически во время выполнения в ActionScript 3.0. Сначала нужно зарегистрировать этот обработчик для события, используя addEventListener ("mouseDown", callback_handler).

Привязка(addEventListener) происходит после объявления Sprite, и добавления его на stage

при этом не срабатывает первый щелчок на моем спрайте, все последующие работают..о0

в чем может быть проблема..? 0о

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

Регистрация: Apr 2009
Сообщений: 167
Записей в блоге: 1
dex157
не очень ты тут в тему, но вот - держи:
http://help.adobe.com/ru_RU/AS3LCR/F...imeErrors.html
иши там свое 1090

Старый 16.01.2010, 20:12
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> если чесно не очень понял зачем это, мой класс вдеь нечего не расширяет
Классов, которые ничего не расширяют в AS3 не бывает.

что же делать-то?!
>> Дождаться когда стейдж станет доступным, например после события Event.ADDED_TO_STAGE

dex157:
Это дурацкое предупреждение, просто вам говорят о том, что onMouseDown - это неудачное название для функции потому что такое использовалось в AS2.
__________________
Hell is the possibility of sanity

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

Регистрация: Apr 2009
Сообщений: 167
Записей в блоге: 1
Цитата:
Сообщение от wvxvw Посмотреть сообщение
что же делать-то?!
>> Дождаться когда стейдж станет доступным, например после события Event.ADDED_TO_STAGE
вся беда в том, что объект уже на сцене, и почему я не могу задействовать stage. я не понимаю.
Объясните пажалуйста..

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
Сообщение от dixlofos Посмотреть сообщение
вся беда в том, что объект уже на сцене, и почему я не могу задействовать stage. я не понимаю.
Объясните пажалуйста..
Значит не на сцене. Может, просто куда то вложен, но на сцене он не отображается.

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

Регистрация: Apr 2009
Сообщений: 167
Записей в блоге: 1
Psycho Tiger
даю руку на отсечение, что на сцене! =]
Сам мышкой перетащил из библиотеки, и вкладывать его некуда он единственный мувик в флэшке.

dimarik
Не помогло

etc
а что значит "рутом повешен"?


...
В ходе дальнейших экспериментов, решил попробовать решить проблему через наследование, и нашел вот такую странную закономерность:

Создал fla файл, создал мувиклип Задал ему базовый класс (ну тот что в свойствах мувиклипа так назван, прошу меня не ругать опять за эту, совсем не мою выдумку):
Код AS3:
package classes
{
	import flash.display.MovieClip;
 
	public class R2Class extends MovieClip
	{
		public function R2Class():void
		{
			trace("r2 class called");
		}
	}
}
потом создал опять в другом пакете другой класс, расширяющий класс "R2Class" :
Код AS3:
package classes.assisted
{
	import classes.R2Class;
 
	public class AssistedClass extends R2Class
	{
		public function AssistedClass():void
		{
			trace("assistedClass called");			
		}
	}
}
ну и есть у меня еще и третий класс, который тоже привязан к мувиклипу (ну или мувиклип привязан к нему), который вызывает класс "AssistedClass" :
Код AS3:
package classes
{
	import flash.display.MovieClip;
	import classes.assisted.AssistedClass;
 
	public class R1Class extends MovieClip
	{
		var AC:AssistedClass = new AssistedClass();
 
		public function R1Class():void
		{
			trace("r1class called");				
		}
	}
}
и после компиляции, многоуважаемый компилятор пишет мне, что все пучком
Код:
r2 class called
assistedClass called
r1class called
r2 class called
Но если я в функции конструкторе класса "R2Class" пишу
Код AS3:
trace(stage.stageHeight);
То компилятор выдает мне:
Код:
r2 class called
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
	at classes::R2Class()
	at classes.assisted::AssistedClass()
	at classes::R1Class()
	at r1()
	at flash.display::Sprite/constructChildren()
	at flash.display::Sprite()
	at flash.display::MovieClip()
r2 class called
400
тобишь классы "R1Class" и соответственно "AssistedClass" не вызываються, и это меня порядком бесит >_<.
Почему такая несправедливость в мире ActionScript3.0 ?

Добавлено через 4 минуты
Вобще мне больше всего интересно как делаються профессиональные крупные проекты. Управляют ли там отдельные классы отображаемыми объектами полностью, или вспомогательные классы используються лишь для приема-возврата значений?

Я клоню к тому, что может я вобще порю ужасную ерись и все делаеться совсем не так?

Старый 18.01.2010, 20:58
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 10  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Цитата:
Сообщение от dixlofos Посмотреть сообщение
var AC:AssistedClass = new AssistedClass();
...
Но если я в функции конструкторе класса "R2Class" пишу
Код AS3:
trace(stage.stageHeight);
То компилятор выдает мне:
Экземпляр AssistedClass (переменная AC, которая кстати не должна начинаться с заглавной буквы) в момент создание (т.е. вызова конструктора) НЕ НАХОДИТСЯ в дисплей листе, поэтому его свойство stage нулевое. Слушайте Event.ADDED_TO_STAGE

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

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

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


 


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


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