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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.12.2012, 22:07
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 1  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
По умолчанию Событие не присваивается

Проблема в том, что не происходит присваивания события клика мышь на элемент.

То есть в трейс при клике ничего не вылезает. =\
Код AS3:
package  {
	import flash.display.*;//MovieClip
	import flash.events.*; //some
	import flash.events.MouseEvent;
	import flash.ui.*;
	import flash.utils.Timer;
 
 
	public class Min extends MovieClip {
	var _positionDefX:Number = 100;
	var _positionDefY:Number = 100;
	var _setPlus:Number = 0;
 
	var _mamaContainer:Sprite;
	var _timer:Timer;
	var _mama:Array = new Array();
 
		public function Min() {
			//Конструктор класса
			var _wall:wall = new wall();
			addChild(_wall);
			addEventListener(Event.ADDED_TO_STAGE, goFunc);
		}
 
		private function goFunc(e:Event):void{
			removeEventListener(Event.ADDED_TO_STAGE, goFunc);
 
			_mamaContainer = new Sprite();
			addChild(_mamaContainer);
			for(var j:int = 0; j < 10; j++){
				for(var j2:int = 0; j2 < 10; j2++){
					var _eye:Shape = new Shape();
					var _size:Number = 30;
					var _color:Number = Math.random() * 999999;
					_eye.graphics.beginFill(_color, 0.6);
					_eye.graphics.drawRect(0 - _size/2, 0 - _size/2, _size, _size);
					_eye.graphics.endFill();
					_eye.x = (35 * j) + 40;
					_eye.y = (35 * j2) + 40;
 
					_eye.rotationY += 30;
					_eye
 
					_mamaContainer.addChild(_eye);
				}
			}
 
			for(var j3:int = 0; j3 < _mamaContainer.numChildren; j3++){
				_mamaContainer.getChildAt(j3).addEventListener(MouseEvent.CLICK, clickListener); //ВОТ ЭТО
			}
			stage.addEventListener(MouseEvent.MOUSE_MOVE, updateWindow);
		}
 
		private function clickListener(e:MouseEvent):void{
			trace(e.target);
			trace("hehe");
			e.target.removeEventListener(MouseEvent.CLICK, clickListener);
		}
 
		private function updateWindow(e:MouseEvent):void{
			for(var i:int = 0; i < _mamaContainer.numChildren; i++){
				var some:* = _mamaContainer.getChildAt(i);
				some.rotationX = ((some.y - mouseY) / stage.width) * -80 ;
				some.rotationY = ((some.x - mouseX) / stage.height) * 80 ;
			}
		}
	}
}

Старый 20.12.2012, 22:12
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
А вы фактически не на шэйп ли вешаете слушателя?

Код AS3:
var _eye:Shape = new Shape();
...
_mamaContainer.addChild(_eye);
...
_mamaContainer.getChildAt(j3).addEventListener(MouseEvent.CLICK, clickListener);
На шэйпы не вешайте... оборачивайте их в спрайты что ли.
__________________
hauts.ru

Старый 20.12.2012, 22:16
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 3  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
На шейпы нельзя "вешать"? В этом вся проблема?

..и как их обратить в спрайт?

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

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
http://www.flasher.ru/forum/showthread.php?t=189726

почитайте.

Код AS3:
var container:Sprite = new Sprite();
container.addChild( myShape );
addChild(container);
...
container.addEventListener(MouseEvent.CLICK, clickHandler);
Ну как-то так.
__________________
hauts.ru

Старый 20.12.2012, 22:29
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 5  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от Hauts Посмотреть сообщение
http://www.flasher.ru/forum/showthread.php?t=189726

почитайте.

Код AS3:
var container:Sprite = new Sprite();
container.addChild( myShape );
addChild(container);
...
container.addEventListener(MouseEvent.CLICK, clickHandler);
Ну как-то так.
нет, же!!! обратите внимание на мой код, Вы делаете то же самое... К тому же мне нужно, чтобы каждый элемент реагировал индивидуально.!

Старый 20.12.2012, 22:33
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 6  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Сдаюсь.

Хотя нет.

Код AS3:
package  {
	import flash.display.*;//MovieClip
	import flash.events.*; //some
	import flash.events.MouseEvent;
	import flash.ui.*;
	import flash.utils.Timer;
 
 
	public class Min extends MovieClip {
	var _positionDefX:Number = 100;
	var _positionDefY:Number = 100;
	var _setPlus:Number = 0;
 
	var _mamaContainer:Sprite;
	var _timer:Timer;
	var _mama:Array = new Array();
 
		public function Min() {
			//Конструктор класса
			var _wall:wall = new wall();
			addChild(_wall);
			addEventListener(Event.ADDED_TO_STAGE, goFunc);
		}
 
		private function goFunc(e:Event):void{
			removeEventListener(Event.ADDED_TO_STAGE, goFunc);
 
			_mamaContainer = new Sprite();
			addChild(_mamaContainer);
			for(var j:int = 0; j < 10; j++){
				for(var j2:int = 0; j2 < 10; j2++){
					var _eye:Shape = new Shape();
					var _size:Number = 30;
					var _color:Number = Math.random() * 999999;
					_eye.graphics.beginFill(_color, 0.6);
					_eye.graphics.drawRect(0 - _size/2, 0 - _size/2, _size, _size);
					_eye.graphics.endFill();
					_eye.x = (35 * j) + 40;
					_eye.y = (35 * j2) + 40;
 
					_eye.rotationY += 30;
					_eye
 
					var container:Sprite = new Sprite();
					container.addChild(_eye);
 
					_mamaContainer.addChild(container);
				}
			}
 
			for(var j3:int = 0; j3 < _mamaContainer.numChildren; j3++){
				_mamaContainer.getChildAt(j3).addEventListener(MouseEvent.CLICK, clickListener); //ВОТ ЭТО
			}
			stage.addEventListener(MouseEvent.MOUSE_MOVE, updateWindow);
		}
 
		private function clickListener(e:MouseEvent):void{
			trace(e.target);
			trace("hehe");
			e.target.removeEventListener(MouseEvent.CLICK, clickListener);
		}
 
		private function updateWindow(e:MouseEvent):void{
			for(var i:int = 0; i < _mamaContainer.numChildren; i++){
				var some:* = _mamaContainer.getChildAt(i);
				some.rotationX = ((some.y - mouseY) / stage.width) * -80 ;
				some.rotationY = ((some.x - mouseX) / stage.height) * 80 ;
			}
		}
	}
}
__________________
hauts.ru

Старый 20.12.2012, 23:05
PasserBy вне форума Посмотреть профиль Найти все сообщения от PasserBy
  № 7  
Ответить с цитированием
PasserBy
Banned

Регистрация: Nov 2012
Сообщений: 43
Цитата:
Сообщение от Hauts Посмотреть сообщение
Сдаюсь.

Хотя нет.

Код AS3:
package  {
	import flash.display.*;//MovieClip
	import flash.events.*; //some
	import flash.events.MouseEvent;
	import flash.ui.*;
	import flash.utils.Timer;
 
 
	public class Min extends MovieClip {
	var _positionDefX:Number = 100;
	var _positionDefY:Number = 100;
	var _setPlus:Number = 0;
 
	var _mamaContainer:Sprite;
	var _timer:Timer;
	var _mama:Array = new Array();
 
		public function Min() {
			//Конструктор класса
			var _wall:wall = new wall();
			addChild(_wall);
			addEventListener(Event.ADDED_TO_STAGE, goFunc);
		}
 
		private function goFunc(e:Event):void{
			removeEventListener(Event.ADDED_TO_STAGE, goFunc);
 
			_mamaContainer = new Sprite();
			addChild(_mamaContainer);
			for(var j:int = 0; j < 10; j++){
				for(var j2:int = 0; j2 < 10; j2++){
					var _eye:Shape = new Shape();
					var _size:Number = 30;
					var _color:Number = Math.random() * 999999;
					_eye.graphics.beginFill(_color, 0.6);
					_eye.graphics.drawRect(0 - _size/2, 0 - _size/2, _size, _size);
					_eye.graphics.endFill();
					_eye.x = (35 * j) + 40;
					_eye.y = (35 * j2) + 40;
 
					_eye.rotationY += 30;
					_eye
 
					var container:Sprite = new Sprite();
					container.addChild(_eye);
 
					_mamaContainer.addChild(container);
				}
			}
 
			for(var j3:int = 0; j3 < _mamaContainer.numChildren; j3++){
				_mamaContainer.getChildAt(j3).addEventListener(MouseEvent.CLICK, clickListener); //ВОТ ЭТО
			}
			stage.addEventListener(MouseEvent.MOUSE_MOVE, updateWindow);
		}
 
		private function clickListener(e:MouseEvent):void{
			trace(e.target);
			trace("hehe");
			e.target.removeEventListener(MouseEvent.CLICK, clickListener);
		}
 
		private function updateWindow(e:MouseEvent):void{
			for(var i:int = 0; i < _mamaContainer.numChildren; i++){
				var some:* = _mamaContainer.getChildAt(i);
				some.rotationX = ((some.y - mouseY) / stage.width) * -80 ;
				some.rotationY = ((some.x - mouseX) / stage.height) * 80 ;
			}
		}
	}
}
Хм...позже разберусь, спасибо

Добавлено через 41 минуту
Прочекал код, в итоге Ваше решение оказалось неверным, слушатель присвоился ко всем и вся модель поведения программы изменилась, попробуйте запустить мой код без ваших изменений, чтобы вы поняли чего я хотел.

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

Регистрация: Mar 2007
Сообщений: 319
Код AS3:
package  {
	import flash.display.*;//MovieClip
	import flash.events.*; //some
	import flash.events.MouseEvent;
	import flash.ui.*;
	import flash.utils.Timer;
 
 
	public class Min extends MovieClip {
	var _positionDefX:Number = 100;
	var _positionDefY:Number = 100;
	var _setPlus:Number = 0;
 
	var _mamaContainer:Sprite;
	var _timer:Timer;
	var _mama:Array = new Array();
 
		public function Min() {
			//Конструктор класса
			var _wall:wall = new wall();
			addChild(_wall);
			addEventListener(Event.ADDED_TO_STAGE, goFunc);
		}
 
		private function goFunc(e:Event):void{
			removeEventListener(Event.ADDED_TO_STAGE, goFunc);
 
			_mamaContainer = new Sprite();
			addChild(_mamaContainer);
			for(var j:int = 0; j < 10; j++){
				for(var j2:int = 0; j2 < 10; j2++){
					var _eye:Sprite = new Sprite();
					var _size:Number = 30;
					var _color:Number = Math.random() * 999999;
					_eye.graphics.beginFill(_color, 0.6);
					_eye.graphics.drawRect(0 - _size/2, 0 - _size/2, _size, _size);
					_eye.graphics.endFill();
					_eye.x = (35 * j) + 40;
					_eye.y = (35 * j2) + 40;
 
					_eye.rotationY += 30;
 
					_mamaContainer.addChild(_eye);
				}
			}
 
			for(var j3:int = 0; j3 < _mamaContainer.numChildren; j3++){
				_mamaContainer.getChildAt(j3).addEventListener(MouseEvent.CLICK, clickListener); //ВОТ ЭТО
			}
			stage.addEventListener(MouseEvent.MOUSE_MOVE, updateWindow);
		}
 
		private function clickListener(e:MouseEvent):void{
			trace(e.target);
			trace("hehe");
			e.target.removeEventListener(MouseEvent.CLICK, clickListener);
		}
 
		private function updateWindow(e:MouseEvent):void{
			for(var i:int = 0; i < _mamaContainer.numChildren; i++){
				var some:* = _mamaContainer.getChildAt(i);
				some.rotationX = ((some.y - mouseY) / stage.width) * -80 ;
				some.rotationY = ((some.x - mouseX) / stage.height) * 80 ;
			}
		}
	}
}

Старый 21.12.2012, 13:41
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 9  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
Шейпы не являются EventDispatcher'ами. По этой причине они не реагируют на события мыши.
И не нужно вешать на каждый из объектов листенеры, учитывая, что все они предполагаются одинаковыми.
Достаточно повесить листенер на родительском контейнере и установить фазу перехвата события.

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

Регистрация: Mar 2007
Сообщений: 319
Цитата:
Сообщение от Frost47rus Посмотреть сообщение
Шейпы не являются EventDispatcher'ами.
неверно.
шейпы являются EventDispatcher'ами, но не являются InteractiveObject'ами

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

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

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


 


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


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