Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MOUSE_MOVE над всей рабочей областью (http://www.flasher.ru/forum/showthread.php?t=129128)

p0okm 25.08.2009 15:11

MOUSE_MOVE над всей рабочей областью
 
Сделал такой вот тестовый ролик
Цитата:

Код AS1/AS2:

package 
{
          import flash.events.*;
            import flash.display.*;
 
      public class Mysha extends MovieClip
          {               
                var kolo:MovieClip;
                          var koor_x;
                        var koor_y;
 
                    public function Mysha()
                  {       
                            kolo = new MovieClip();
                            kolo.graphics.lineStyle(1, 0xFF0000);
                            kolo.graphics.beginFill( 0xFF00FF );
                            kolo.graphics.drawCircle( koor_x, koor_y, 30);
                            addChild(kolo);
                            addEventListener(MouseEvent.MOUSE_MOVE, move_Mysha);
                  }
                  public function move_Mysha(event:MouseEvent):void
                  {       
                                    kolo.x = mouseX;
                                    kolo.y = mouseY;
                  }
          }
}


Работает как и должно реагирует на перемещение курсора мыши только над кругом.
Подскажите а как сделать что бы MOUSE_MOVE работало над всей рабочей областью клипа.

Gaen 25.08.2009 15:23

Код AS3:

this.stage.addEventListener(MouseEvent.MOUSE_MOVE, move_Mysha);


p0okm 25.08.2009 18:04

GAIKER - спасибо!

p0okm 05.09.2009 16:36

В развитие темы...

Для MOUSE_MOVE у меня заработало...теперь захотел функции события мыши описать в отдельном файле и подгружать в основной для использования.

Основной файл теперь выглядит так:
Код AS3:

package  
{
            import flash.display.*;
          import flash.events.*;       
 
      public class zovnish_funkc extends MovieClip
          {                 
                    private var krug:Sprite;
                    private var Sobytia_Mouse:Vnesh_Mysh;           
                    public function zovnish_funkc() 
                  {
                            krug = new Sprite();
                            krug.graphics.lineStyle(1, 0xFF0000);
                            krug.graphics.beginFill( 0xFF00FF );
                            krug.graphics.drawCircle( 0, 0, 30);
                            addChild(krug);                 
                            Sobytia_Mouse = new Vnesh_Mysh(this);
                            addEventListener(Event.ENTER_FRAME, play_game);                 
                  }
                  private function play_game(event:Event):void
                  {                       
                            krug.x = Sobytia_Mouse.koor_x;
                            krug.y = Sobytia_Mouse.koor_y;
                  }                         
            }
}

Файл Vnesh_Mysh с функцией отслеживания курсора мыши такой:
Код AS3:

package  
{
          import flash.events.MouseEvent;
            import flash.display.Sprite;
 
      public class Vnesh_Mysh extends Sprite
          {                 
                          var koor_x = 100;
                        var koor_y = 100;
 
                      public function Vnesh_Mysh(navigacia)
                  { 
                    navigacia.stage.addEventListener(MouseEvent.MOUSE_MOVE, on_MouseMove);
                  }
                    private function on_MouseMove (event:MouseEvent):void
                  {
                              koor_x = mouseX;
                        koor_y = mouseY;
                  }
          }
}

Всё работает.
Пытаюсь увеличить функциональность событий мыши добавив обработку событий MOUSE_DOWN и MOUSE_UP ...
Код AS3:

package  
{
          import flash.events.MouseEvent;
            import flash.display.Sprite;
 
      public class Vnesh_Mysh extends Sprite
          {                 
                          var koor_x = 100;
                        var koor_y = 100;
 
                      public function Vnesh_Mysh(navigacia)
                  { 
                        navigacia.stage.addEventListener(MouseEvent.MOUSE_DOWN, on_MouseDown);
                        navigacia.stage.addEventListener(MouseEvent.MOUSE_UP, on_MouseUp);
                  }
                          private function on_MouseDown(event:MouseEvent):void
                  {
                            stage.addEventListener(MouseEvent.MOUSE_MOVE, on_MouseMove);
                  }                 
 
                    private function on_MouseMove (event:MouseEvent):void
                  {
                              koor_x = mouseX;
                        koor_y = mouseY;
                  }
                    private function on_MouseUp(event:MouseEvent):void
                  {
                          stage.removeEventListener(MouseEvent.MOUSE_MOVE, on_MouseMove);
                  }
          }
}

а в ответ неподвижный круг, а при нажатии и отпускании ЛКМ сообщение:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at proba::Vnesh_Mysh/on_MouseDown()
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at proba::Vnesh_Mysh/on_MouseUp()

Никак не пойму в чём дело, помогите разобраться.

veisss 05.09.2009 16:51

наверное
Код AS3:

private function on_MouseDown(event:MouseEvent):void
                  {
                            stage.addEventListener(MouseEvent.MOUSE_MOVE, on_MouseMove);
                  }       
 
 private function on_MouseUp(event:MouseEvent):void
                  {
                          stage.removeEventListener(MouseEvent.MOUSE_MOVE, on_MouseMove);
                  }

stage и есть тот null

Felicast 05.09.2009 17:17

navigacia.stage и stage в Vnesh_Mysh - это ни одно и тоже. вы Vnesh_Mysh не добавляете на сцену, следовательно stage у него равен null

etc 05.09.2009 18:45

p0okm, вас самого французский с нижегородским в коде не смущает?

p0okm 05.09.2009 19:41

Честно говоря ничего не могу понять из Ваших ответов.

Felicast 05.09.2009 23:15

Цитата:

Сообщение от p0okm (Сообщение 848527)
Честно говоря ничего не могу понять из Ваших ответов.

Код AS3:

navigacia.stage.addEventListener(MouseEvent.MOUSE_DOWN, on_MouseDown);
...
stage.addEventListener(MouseEvent.MOUSE_MOVE, on_MouseMove);

чувствуете разницу?
navigacia - добавлена на сцену, и поэтому у нее есть stage
экземпляр вашего класса не добавлен на сцену: stage нет.

и вообще нужно подписывать на событие ADDED_TO_STAGE, и только после него добавлять слушателей к stage

p0okm 05.09.2009 23:42

Цитата:

Сообщение от Felicast (Сообщение 848560)
Код AS3:

navigacia.stage.addEventListener(MouseEvent.MOUSE_DOWN, on_MouseDown);
...
stage.addEventListener(MouseEvent.MOUSE_MOVE, on_MouseMove);

чувствуете разницу?
navigacia - добавлена на сцену, и поэтому у нее есть stage
экземпляр вашего класса не добавлен на сцену: stage нет.
...

Перед тем как задать вопрос я это уже проверил и получил сообщение
1120: Access of undefined property navigacia.
а как решить эту проблему не знаю:(


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

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