Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [...] [as3isolib] Проблема с событиями мыши (MOUSE_MOVE). (http://www.flasher.ru/forum/showthread.php?t=172417)

fantomasdnb 09.12.2011 00:39

[as3isolib] Проблема с событиями мыши (MOUSE_MOVE).
 
Вложений: 1
Как вы видите, событие я честно слушаю с добавленной сцены 2, однако когда дело доходит до снятия текущих x и y, они берутся не со сцены, а с IsoSpirte с чайником. и поэтому выходит, то что есть.
Казалось бы, надо использовать закомментированные в коде mouseEnabled и mouseChildren. Вот только, у меня появилась надобность - добавить в мувиклип с чайником еще и кнопку, по нажатию на которую сам клип будет меньться. Но тогда mouseEnabled и mouseChildren не подходят. Как решить данную проблему?

Пример обработки события мыши onScene2MouseDown я взял из одного туториала в интернете. Если вы предложите иной способ, буду рад.

Приложу архив с SWFкой. Главный класс файла таков:
Код AS3:

private function initFunction(event:Event = null):void
{                       
        //создаем сцены
        _scene = new IsoScene();
        _scene2 = new IsoScene();       
 
        //создаем стены///////////////////////////////////////////////                       
        addingWall(300, 0, 250, 0, 0, 0, 0xBBBBBB, 0xffffff);                       
        addingWall(0, 300, 250, 0, 0, 0, 0xDDDDDD, 0xffffff);               
        addingFlour(300, 300, 0, 0, 0, 0, 0x000000,1);       
 
        _scene2.addEventListener(MouseEvent.MOUSE_MOVE, onScene2MouseDown);                               
 
        //создание вида///////////////////////////////////////////////
        _view = new IsoView();
        _view.setSize(800, 600);
        _view.centerOnPt(new Pt(50, 50, 0));
        _view.addScene(_scene);
        _scene.render();
 
        _view.addScene(_scene2);                       
        this.addChild(_view);       
 
        //рендер//////////////////////////////////////////////////////
        this.addEventListener(Event.ENTER_FRAME, onRener);       
 
        //добавление чайника
        teapot = new IsoSprite();
        teapot.sprites = [Teapot];
        teapot.container.alpha = .7;
        //teapot.container.mouseEnabled = false;
        //teapot.container.mouseChildren = false;
        teapot.moveTo(0,0, 0);                       
        _scene2.addChild(teapot);
}
 
private function onScene2MouseDown(e:ProxyEvent):void
{
        var me:MouseEvent = MouseEvent(e.targetEvent);
        var p:Pt = new Pt(me.localX, me.localY);
        var CELL_SIZE_NOW:uint = 10;
        IsoMath.screenToIso(p);                       
 
        if (p.x > 180) p.x = 180;
        if (p.y > 180) p.y = 180;
        if (p.x < 0) p.x = 0;
        if (p.y < 0) p.y = 0;                               
 
        teapot.moveTo(Math.floor(p.x / CELL_SIZE_NOW) * CELL_SIZE_NOW, Math.floor(p.y / CELL_SIZE_NOW) * CELL_SIZE_NOW, 0);
 
        trace(p.x, p.y);
}


fantomasdnb 10.12.2011 20:55

временно решил отлавливанием координат с главной сцены, вычитанием сдвига изосцены и затем конвертированием в изометрические координаты:
Код AS3:

private function onScene2MouseDown(e:ProxyEvent):void
{
private function onScene2MouseDown(e:ProxyEvent):void
{
        var me:MouseEvent = MouseEvent(e.targetEvent);                       
        var p:Pt = new Pt(me.stageX - 400, me.stageY - 250);                       
        var CELL_SIZE_NOW:uint = 10;
        IsoMath.screenToIso(p);       
        trace(p.x, p.y);
 
        if (p.x > 180) p.x = 180;
        if (p.y > 180) p.y = 180;
        if (p.x < 0) p.x = 0;
        if (p.y < 0) p.y = 0;                               
 
        teapot.moveTo(Math.floor(p.x / CELL_SIZE_NOW) * CELL_SIZE_NOW, Math.floor(p.y / CELL_SIZE_NOW) * CELL_SIZE_NOW, 0);
 
        //trace(p.x, p.y);
}

однако, хотелось бы решение покрасивее..


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

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