|
|
|||||
Banned
[+1 13.12.12]
[+6 15.11.12] [+5 14.12.12] Регистрация: Sep 2012
Сообщений: 91
|
Приемники событий не работают...
Двс.
Рисую 4 объекта в графе,в ас3 делаю 4 переменные,выставляю в координаты эти 4 картинки,завожу события для каждой кнопки с отдельной функцией,при попытке компилировать,выскакивает внутренняя ошибка привожу код: package { import flash.display.*; import flash.events.*; public class Tower extends Sprite { public function Tower { //создаю 4 переменных для соответсвующих стихий var fire:Fire = new Fire(); var water:Water = new Water(); var land:Land = new Land(); var air:Air = new Air(); fire.x=10; fire.y=10; water.x=110; water.y=10; land.x=10; land.y=110; air.x=110; air.y=110; //создаю 4 слушателя для 4 кнопок fire.addEventListener(MouseEvent.CLICK,clickFire); water.addEventListener(MouseEvent.CLICK,clickWater); land.addEventListener(MouseEvent.CLICK,clickLand); air.addEventListener(MouseEvent.CLICK,clickAir); } //функция срабатывающая при нажатии на огонь (удаляет все 4 картинки) private function clickFire(event.MouseEvent):void { var fire:Fire = targetCurrent as Fire(); if(fire) { removeChild(fire); removeChild(water); removeChild(land); removeChild(air); } } //функция срабатывающая при нажатии на вода (удаляет все 4 картинки) private function clickWater(event.MouseEvent):void { var water:Water = targetCurrent as Water(); if(water) { removeChild(fire); removeChild(water); removeChild(land); removeChild(air); } } //функция срабатывающая при нажатии на земля (удаляет все 4 картинки) private function clickLand(event.MouseEvent):void { var land:Land = targetCurrent as Land(); if(land) { removeChild(fire); removeChild(water); removeChild(land); removeChild(air); } } //функция срабатывающая при нажатии на воздух (удаляет все 4 картинки) private function clickAir(event.MouseEvent):void { var air:Air = targetCurrent as Air(); if(air) { removeChild(fire); removeChild(water); removeChild(land); removeChild(air); } } } } 2)И второй вопрос,можно ли сделать для 4-ех объектов один слушатель? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А что за переменная targetCurrent?
Добавлено через 1 минуту Цитата:
Добавлено через 2 минуты Земля — Ground.
__________________
Reality.getBounds(this); |
|
|||||
Banned
[+1 13.12.12]
[+6 15.11.12] [+5 14.12.12] Регистрация: Sep 2012
Сообщений: 91
|
Да скобки есть,я щас побыстрому в блокноте набросал.
|
|
|||||
Регистрация: Jul 2008
Сообщений: 912
|
что за targetCurrent?
currentTarget у события вызывать нужно private function clickFire(event.MouseEvent):void{ var fire:Fire = event.currentTarget as Fire(); } |
|
|||||
Banned
[+1 13.12.12]
[+6 15.11.12] [+5 14.12.12] Регистрация: Sep 2012
Сообщений: 91
|
Дело в том ,чтоэтот код я накидал в спешке, вы правы.А в основном коде у меня всё написано верно,но currentTarget необходим так?
Если я убираю условие проверки на нажатие именно той кнопки которая нужна все равно выдает какую то не понятную ошибку,что то вроде аргумент не null,при этом ошибка не является ошибкой компиляции,я так понял какая то внутренняя. з.ы.на чужом компьютере сижу просто. |
|
|||||
Регистрация: Jul 2008
Сообщений: 912
|
нет, и проверка не нужна и так понятно какая кнопка нажата.
Что за ошибку выдаёт и от каких классов наследуются классы Fire(); Water(); Land(); Air(); Добавлено через 6 минут в их дереве наследованья есть EventDispatcher? |
|
|||||
Banned
[+1 13.12.12]
[+6 15.11.12] [+5 14.12.12] Регистрация: Sep 2012
Сообщений: 91
|
Хороший вопрос)
Я создаю переменные из кнопок нарисованных в флэше,то есть,грубо говоря 4 разных квадрата. |
|
|||||
Регистрация: Jul 2008
Сообщений: 912
|
Эти квадраты должны быть чем-то что может передовать события иначе .addEventListener бесполезен. Передавать события может или экземпляр EventDispatcher или что-то что наследует класс EventDispatcher, например Sprite или MovieClip
|
|
|||||
Banned
[+1 13.12.12]
[+6 15.11.12] [+5 14.12.12] Регистрация: Sep 2012
Сообщений: 91
|
Ну вот код
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Towers extends Sprite { public function Towers():void { var fire:Fire = new Fire(); var water:Water= new Water(); var land:Land= new Land(); var air:Air = new Air(); fire.x=20; fire.y=20; water.x=20; water.y=300; land.x=300; land.y=20; air.x=300; air.y=300; addChild(fire); addChild(water); addChild(land); addChild(air); fire.addEventListener(MouseEvent.CLICK,func_fire); /*water.addEventListener(MouseEvent.CLICK,func); land.addEventListener(MouseEvent.CLICK,func); air.addEventListener(MouseEvent.CLICK,func);*/ } public function func_fire(e:MouseEvent):void { removeChild(water); removeChild(air); removeChild(land); } } } 1120: Access of undefined property water. 1120: Access of undefined property air. 1120: Access of undefined property land. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну а откуда по-вашему func_fire может знать о каких-то water, air и land?
Это же ЛОКАЛЬНЫЕ переменные конструктора. Никто, кроме функции(-конструктора) Towers, ничего о них не знает. Добавлено через 7 минут Вы можете вывести эти переменные в члены Класса, тогда любой метод класса будет иметь к ним доступ. package { import flash.display.Sprite; import flash.events.MouseEvent; public class Towers extends Sprite { private var fire:Fire; private var water:Water; private var land:Land; private var air:Air; public function Towers():void { fire = new Fire(); water = new Water(); land = new Land(); air = new Air(); fire.x=20; fire.y=20; water.x=20; water.y=300; land.x=300; land.y=20; air.x=300; air.y=300; addChild(fire); addChild(water); addChild(land); addChild(air); fire.addEventListener(MouseEvent.CLICK,func_fire); /*water.addEventListener(MouseEvent.CLICK,func); land.addEventListener(MouseEvent.CLICK,func); air.addEventListener(MouseEvent.CLICK,func);*/ } public function func_fire(e:MouseEvent):void { removeChild(water); //на самом деле надо проверять, есть ли такой чайлд removeChild(air); removeChild(land); } } } И да, надо отписываться наверное от события клика по fire после того, как его один раз кликнули, ибо удалять то уже некого.
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 21:39. |
|
« Предыдущая тема | Следующая тема » |
Теги |
Action script 3.0 , AS3 , слушатели , слушатели событий , события |
|
|