Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   contextMenu и mouseEnabled (http://www.flasher.ru/forum/showthread.php?t=86206)

Nirth 10.10.2006 14:42

а если юзать MOUSE_OVER\MOUSE_OUT?

Код:

package {
        import flash.display.Sprite;
        import flash.ui.ContextMenu;
        import flash.events.ContextMenuEvent;

        public class Context extends Sprite
        {
                public function Context()
                {
                        addChild(new Square());
                }
       
                private function onMenuSelect(event:ContextMenuEvent):void
                {
                }
        }
}
        import flash.display.Sprite;
        import flash.events.*;;
        import flash.ui.*;
       


class Square extends Sprite
{
        public function Square()
        {
                graphics.beginFill(0xFF6600);
                graphics.drawRect(0,0,100,100);
                graphics.endFill();
               
                addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
                addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
                addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
               
                var menu:ContextMenu = new ContextMenu();
                        menu.addEventListener(ContextMenuEvent.MENU_SELECT,onMenuSelect);
                        menu.customItems.push(new ContextMenuItem("Hello world"));               
                contextMenu = menu;
        }
        private var cursor:Cursor = new Cursor();
       
       
        private function onMouseOver(event:MouseEvent):void
        {
                addChild(cursor);
                Mouse.hide();               
        }
       
        private function onMouseOut(event:MouseEvent):void
        {
                removeChild(cursor);
                Mouse.show()
        }
       
        private function onMouseMove(event:MouseEvent):void
        {
                cursor.x = event.localX;
                cursor.y = event.localY;
        }
       
        private function onMenuSelect(event:ContextMenuEvent):void
        {
                trace(this);
        }
}

class Cursor extends Sprite
{
        public function Cursor()
        {
                graphics.beginFill(0xFF0000);
                graphics.drawRect(0,0,10,10);
                graphics.endFill();
               
                mouseEnabled = false;
        }
}


etc 10.10.2006 14:42

Код:

import flash.ui.ContextMenu;
import flash.events.MouseEvent;
import flash.display.Sprite;
var sp:Sprite = new Sprite();
var cursor:Sprite = new Sprite();
var cm:ContextMenu = new ContextMenu();
var cmItem:ContextMenuItem = new ContextMenuItem('cmItem');
/////////////////
cm.customItems.push(cmItem);
/////////////////
sp.graphics.beginFill(0xFF0000);
sp.graphics.drawRect(10,10,100,100);
sp.contextMenu = cm;
/////////////////
cursor.graphics.beginFill(0x0000FF);
cursor.graphics.drawRect(0,0,10,10);
cursor.visible = false;
mouseMove = function(e:MouseEvent):void {
        e.updateAfterEvent();
}
mouseOver = function(e:MouseEvent):void {
        Mouse.hide();
        e.updateAfterEvent();
        cursor.startDrag(true);
        cursor.visible = true;
}
mouseOut = function(e:MouseEvent):void {
        Mouse.show();
        e.updateAfterEvent();
        cursor.stopDrag();
        cursor.visible = false;
}
/////////////////
this.addChild(sp);
this.addChild(cursor);
sp.addEventListener(MouseEvent.MOUSE_MOVE,mouseMove);
sp.addEventListener(MouseEvent.MOUSE_OVER,mouseOver);
sp.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);

Вроде работает… (Ну там, доработать надо)

Nirth 10.10.2006 14:54

ОФФТОП
а зачем ты во флэше импорты пишешь, там же вроде по умолчанию все импортированно? или я путаю

MerlinTwi 10.10.2006 15:00

Nirth, в вашем примере курсор мыши добавляется внутрь мувика, а значит будет обрезаться, если у мувика будет маска.
__etc, частный вариант, для произвольного мувика не подойдет, но можно сделать контейнер только для мыши, и по mouseOver делать cursor.parent.contextMenu = e.target.contextMenu; Тогда все работает, только в событии MENU_SELECT будут неправильные target, что я переживу. Этот вариант мне подходит.
Всем спасибо :)

etc 10.10.2006 15:02

Цитата:

Сообщение от Nirth
ОФФТОП
а зачем ты во флэше импорты пишешь, там же вроде по умолчанию все импортированно? или я путаю

На всякий случай.

Nirth 10.10.2006 15:48

__etc
я уже думал, а вдруг апдейт сделали, где надо вставлять и может еще че добавили... ну ладно

2 Мерлин
Я когда писал думал, что я делаю что то не так, но не мог понять что, догадался когда увидел код etc.

В твоем случае я бы сделал некий класс ContextMenuManager, который бы следил за менюшками, и передавал бы ссылки куда надо, так как event.target все равно не даст ссылки на дисплейобжект инициатор, а на ссылку контекстного меню, то кода на много больше всеравно не будет, если я правильно понял.


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

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