as3: MOUSE_OVER медленно / не работает правильно - PullRequest
1 голос
/ 31 августа 2010

Хорошо, так что я работаю в чистом as3 (без Creative Suite или XML).У меня есть спрайт.Он рисует большой прямоугольник, а затем немного меньший прямоугольник.Я хочу изменить цвет немного меньшего прямоугольника, когда наведу на него курсор мыши.Прямо сейчас, хотя он или не будет отвечать (я могу просто навести курсор мыши на прямоугольник, и ничего не происходит), или он будет медленно реагировать.Кроме того, область столкновения прямоугольника кажется немного неактивной, то есть она реагирует чаще, когда у меня есть мышь в верхнем левом углу прямоугольника, чем когда у меня есть мышь в другом месте на нем.

В любом случае вот код, который я использую:

public function MAIN()
        {
   BUTTON_1.graphics.clear();
   BUTTON_1.graphics.beginFill(0x000000);
   BUTTON_1.graphics.drawRect(188,96,104,24);
   BUTTON_1.graphics.endFill();
   BUTTON_1.graphics.beginFill(0x0000DC);
   BUTTON_1.graphics.drawRect(190,98,100,20);
   BUTTON_1.graphics.endFill();
   addChild(BUTTON_1);
   BUTTON_1.addEventListener(MouseEvent.MOUSE_OVER,MOUSE_OVER_1);
   function MOUSE_OVER_1():void
   {
    removeChild(BUTTON_1);
    BUTTON_1.graphics.clear();
    BUTTON_1.graphics.beginFill(0x000000);
    BUTTON_1.graphics.drawRect(188,96,104,24);
    BUTTON_1.graphics.endFill();
    BUTTON_1.graphics.beginFill(0x0000A0);
    BUTTON_1.graphics.drawRect(190,98,100,20);
    BUTTON_1.graphics.endFill();
    addChild(BUTTON_1);
   }
}

Я довольно новичок в as3, так что, если есть лучший способ сделать это, скажите мне.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2010

В итоге я использовал hitTestPoint, например:

        if (BUTTON_1.hitTestPoint(mouseX,mouseY,true)) 
        {   

            removeChild(BUTTON_1);
            removeChild(TEXT_MENU_1);
            BUTTON_1.graphics.clear();
            BUTTON_1.graphics.beginFill(0x000000);
            BUTTON_1.graphics.drawRect(188,96,104,24);
            BUTTON_1.graphics.endFill();
            BUTTON_1.graphics.beginFill(0x0000A0);
            BUTTON_1.graphics.drawRect(190,98,100,20);
            BUTTON_1.graphics.endFill();
            addChild(BUTTON_1);
            addChild(TEXT_MENU_1);
        }
        else
        {
            removeChild(BUTTON_1);
            removeChild(TEXT_MENU_1);
            BUTTON_1.graphics.clear();
            BUTTON_1.graphics.beginFill(0x000000);
            BUTTON_1.graphics.drawRect(188,96,104,24);
            BUTTON_1.graphics.endFill();
            BUTTON_1.graphics.beginFill(0x0000DC);
            BUTTON_1.graphics.drawRect(190,98,100,20);
            BUTTON_1.graphics.endFill();
            addChild(BUTTON_1);
            addChild(TEXT_MENU_1);
        }
0 голосов
/ 31 августа 2010

этот код кажется неправильным. слушатель событий мыши принимает объект MouseEvent в качестве параметра. Таким образом, ваш MOUSE_OVER_1 должен быть как function MOUSE_OVER_1(e:MouseEvent):void.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...