Просмотр полной версии : Событие не присваивается
PasserBy
20.12.2012, 22:07
Проблема в том, что не происходит присваивания события клика мышь на элемент.
То есть в трейс при клике ничего не вылезает. =\
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 ;
}
}
}
}
А вы фактически не на шэйп ли вешаете слушателя?
var _eye:Shape = new Shape();
...
_mamaContainer.addChild(_eye);
...
_mamaContainer.getChildAt(j3).addEventListener(MouseEvent.CLICK, clickListener);
На шэйпы не вешайте... оборачивайте их в спрайты что ли.
PasserBy
20.12.2012, 22:16
На шейпы нельзя "вешать"? В этом вся проблема?
..и как их обратить в спрайт?
http://www.flasher.ru/forum/showthread.php?t=189726
почитайте.
var container:Sprite = new Sprite();
container.addChild( myShape );
addChild(container);
...
container.addEventListener(MouseEvent.CLICK, clickHandler);
Ну как-то так.
PasserBy
20.12.2012, 22:29
http://www.flasher.ru/forum/showthread.php?t=189726
почитайте.
var container:Sprite = new Sprite();
container.addChild( myShape );
addChild(container);
...
container.addEventListener(MouseEvent.CLICK, clickHandler);
Ну как-то так.
нет, же!!! обратите внимание на мой код, Вы делаете то же самое... К тому же мне нужно, чтобы каждый элемент реагировал индивидуально.!
Сдаюсь.
Хотя нет.
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 ;
}
}
}
}
PasserBy
20.12.2012, 23:05
Сдаюсь.
Хотя нет.
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 минуту
Прочекал код, в итоге Ваше решение оказалось неверным, слушатель присвоился ко всем и вся модель поведения программы изменилась, попробуйте запустить мой код без ваших изменений, чтобы вы поняли чего я хотел.
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 ;
}
}
}
}
Frost47rus
21.12.2012, 13:41
Шейпы не являются EventDispatcher'ами. По этой причине они не реагируют на события мыши.
И не нужно вешать на каждый из объектов листенеры, учитывая, что все они предполагаются одинаковыми.
Достаточно повесить листенер на родительском контейнере и установить фазу перехвата события.
Шейпы не являются EventDispatcher'ами.
неверно.
шейпы являются EventDispatcher'ами, но не являются InteractiveObject'ами
Frost47rus
21.12.2012, 16:39
неверно.
шейпы являются EventDispatcher'ами, но не являются InteractiveObject'ами
Shape -> DisplayObject -> EventDispatcher -> Object
Ссылка (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/Shape.html)
шейпы являются EventDispatcher'ами, но не являются InteractiveObject'ами
Shape -> DisplayObject -> EventDispatcher -> Object
Sprite -> DisplayObjectContainer -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object
Sprite (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/Sprite.html)
Frost47rus, Hauts
что вы доказываете, я что то не так сказал?
Shape -> DisplayObject -> EventDispatcher -> Object
Ссылка (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/Shape.html)
Ну как бэ сам говоришь что шейп EventDispatcher.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.