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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.11.2012, 01:09
says вне форума Посмотреть профиль Найти все сообщения от says
  № 1  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
Tip Приемники событий не работают...

Двс.
Рисую 4 объекта в графе,в ас3 делаю 4 переменные,выставляю в координаты эти 4 картинки,завожу события для каждой кнопки с отдельной функцией,при попытке компилировать,выскакивает внутренняя ошибка

привожу код:
Код AS3:
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);
			}
		} 
	}
}
1)Кто подскажет в чем проблема,мне кажется что в currentTarget , я бы его не стал писать вообще?
2)И второй вопрос,можно ли сделать для 4-ех объектов один слушатель?

Старый 15.11.2012, 01:29
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А что за переменная targetCurrent?

Добавлено через 1 минуту
Цитата:
public function Tower
{
А скобки где?

Добавлено через 2 минуты
Земля — Ground.
__________________
Reality.getBounds(this);

Старый 15.11.2012, 02:24
says вне форума Посмотреть профиль Найти все сообщения от says
  № 3  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
Да скобки есть,я щас побыстрому в блокноте набросал.

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

Регистрация: Jul 2008
Сообщений: 912
что за targetCurrent?
currentTarget у события вызывать нужно
Код AS3:
private function clickFire(event.MouseEvent):void{
		var fire:Fire = event.currentTarget as Fire();
}
и зачем проверяете что нажато если в условии одно и то-же?
Код AS3:
removeChild(fire);
			removeChild(water);
			removeChild(land);
			removeChild(air);

Старый 15.11.2012, 04:28
says вне форума Посмотреть профиль Найти все сообщения от says
  № 5  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
Дело в том ,чтоэтот код я накидал в спешке, вы правы.А в основном коде у меня всё написано верно,но currentTarget необходим так?
Если я убираю условие проверки на нажатие именно той кнопки которая нужна все равно выдает какую то не понятную ошибку,что то вроде аргумент не null,при этом ошибка не является ошибкой компиляции,я так понял какая то внутренняя.
з.ы.на чужом компьютере сижу просто.

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

Регистрация: Jul 2008
Сообщений: 912
Цитата:
Сообщение от says Посмотреть сообщение
currentTarget необходим так?
нет, и проверка не нужна и так понятно какая кнопка нажата.

Что за ошибку выдаёт и от каких классов наследуются классы
Fire(); Water(); Land(); Air();

Добавлено через 6 минут
в их дереве наследованья есть EventDispatcher?

Старый 15.11.2012, 22:32
says вне форума Посмотреть профиль Найти все сообщения от says
  № 7  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
Хороший вопрос)
Я создаю переменные из кнопок нарисованных в флэше,то есть,грубо говоря 4 разных квадрата.

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

Регистрация: Jul 2008
Сообщений: 912
Цитата:
Сообщение от says Посмотреть сообщение
грубо говоря 4 разных квадрата.
Эти квадраты должны быть чем-то что может передовать события иначе .addEventListener бесполезен. Передавать события может или экземпляр EventDispatcher или что-то что наследует класс EventDispatcher, например Sprite или MovieClip

Старый 15.11.2012, 23:25
says вне форума Посмотреть профиль Найти все сообщения от says
  № 9  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
Ну вот код
Код AS3:
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.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну а откуда по-вашему func_fire может знать о каких-то water, air и land?
Это же ЛОКАЛЬНЫЕ переменные конструктора. Никто, кроме функции(-конструктора) Towers, ничего о них не знает.

Добавлено через 7 минут
Вы можете вывести эти переменные в члены Класса, тогда любой метод класса будет иметь к ним доступ.
Код AS3:
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);
 
		}
	}
}
Добавлено через 8 минут
И да, надо отписываться наверное от события клика по fire после того, как его один раз кликнули, ибо удалять то уже некого.
__________________
Reality.getBounds(this);

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

Теги
Action script 3.0 , AS3 , слушатели , слушатели событий , события
Опции темы
Опции просмотра

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

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


 


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


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