Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Событие не присваивается (http://www.flasher.ru/forum/showthread.php?t=190128)

PasserBy 20.12.2012 22:07

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

То есть в трейс при клике ничего не вылезает. =\
Код 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 ;
                        }
                }
        }
}


Hauts 20.12.2012 22:12

А вы фактически не на шэйп ли вешаете слушателя?

Код AS3:

var _eye:Shape = new Shape();
...
_mamaContainer.addChild(_eye);
...
_mamaContainer.getChildAt(j3).addEventListener(MouseEvent.CLICK, clickListener);

На шэйпы не вешайте... оборачивайте их в спрайты что ли.

PasserBy 20.12.2012 22:16

На шейпы нельзя "вешать"? В этом вся проблема?

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

Hauts 20.12.2012 22:18

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);

Ну как-то так.

PasserBy 20.12.2012 22:29

Цитата:

Сообщение от Hauts (Сообщение 1111014)
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 20.12.2012 22:33

Сдаюсь.

Хотя нет.

Код 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 ;
                        }
                }
        }
}


PasserBy 20.12.2012 23:05

Цитата:

Сообщение от Hauts (Сообщение 1111016)
Сдаюсь.

Хотя нет.

Код 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 минуту
Прочекал код, в итоге Ваше решение оказалось неверным, слушатель присвоился ко всем и вся модель поведения программы изменилась, попробуйте запустить мой код без ваших изменений, чтобы вы поняли чего я хотел.

Nooob 21.12.2012 01:21

Код 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 ;
                        }
                }
        }
}


Frost47rus 21.12.2012 13:41

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

Nooob 21.12.2012 14:58

Цитата:

Сообщение от Frost47rus (Сообщение 1111092)
Шейпы не являются EventDispatcher'ами.

неверно.
шейпы являются EventDispatcher'ами, но не являются InteractiveObject'ами


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

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