Форум 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=103284)

Torero 02.11.2007 04:42

Как узнать: нажата-ли кнопка мыши в пределах ролика?
 
Доброго времени суток.
Решил скролл сделать - наткнулся на проблему: MouseEvent-ы привязываются к конкретному объекту.
Подскажите пожалуйста - как отследить MOUSE_UP в любой точке ролика и выход за его(ролика) пределы.

etc 02.11.2007 10:34

Подписаться у stage.

LokiDi L0ck 02.11.2007 10:37

Вероятно нужно назначить слушателей для stage. А по e.target определять по кому нажали мышкой.

Насчёт выхода за границы Event.MOUSE_LEAVE

//опередили =)

vvk80 02.11.2007 11:32

Цитата:

Сообщение от Torero
Доброго времени суток.
Решил скролл сделать

Уважаемый, Torero!

Подскажите пожалуйста, а как вы скролл делаете. У меня тоже такая проблема стоит... Объясните хотя бы логику... Понятно что надо scrollRect использовать... но дальше простого слайдинга вверх вниз у меня дело не пошло...А я бы хотел чтобы типа подвел к определенному месту ролика ролик пошел вверх, пошел к другому ролик- пошел вниз (если есть куда идти).

Torero 02.11.2007 15:41

Спасибо за ответы - почти так и сделал..)))
Цитата:

Сообщение от vvk80
чтобы типа подвел к определенному месту ролика ролик пошел вверх, пошел к другому ролик- пошел вниз.

Если я правильно понял, то вот обсуждение аналогичного скролла.
http://www.flasher.ru/forum/showthread.php?t=98574

vvk80 02.11.2007 16:20

Цитата:

Сообщение от Torero
Спасибо за ответы - почти так и сделал..)))

Если я правильно понял, то вот обсуждение аналогичного скролла.
http://www.flasher.ru/forum/showthread.php?t=98574

спасибо, это то что нужно...
но вот блин, не хотелось бы опять в AS2 разбираться...

vvk80 02.11.2007 18:05

http://www.sephiroth.it/tutorials/flashPHP/scrollRect/
взял код переделал в AS 3... подправил под свои нужды...

Код:

private function _onEnterFrame(evt:Event):void
                {
                        mouse.x = this.mouseX;
                        mouse.y = this.mouseY;
                        if(r_mask.containsPoint(mouse))
                        {
                                y_pos = ((Math.abs(cont.y - mouse.y)/rect.height)*(r_img.height-rect.height));
                                //x_pos = ((Math.abs(cont.x - mouse.x)/rect.width)*(r_img.width-rect.width));
                        }
               
                        //rect.x += (x_pos - rect.x)/8;
                        //rect.x = rect.x;
                        //rect.y += (y_pos - rect.y)/8;
                        //rect.x = x_pos
                        rect.y = y_pos;
                        cont.scrollRect = rect;

отключил эфекты, так как почему -то они у меня работать стабильно не захотели... также отключил скроллинг по х.

если включаю эфекты (rect.y += (y_pos - rect.y)/8) флешка начинает вести себя не стабильно...

Torero 02.11.2007 19:02

Нет времени - пишу навскидку несколько кусков кода:

Код:

/***target - прокручиваемый спрайт/мувик/текстфилд - у target есть маска, которая скрывает все лишнее.***/

private var target:DisplayObject;

target.addEventListener(MouseEvent.MOUSE_OVER, mouseON);
target.addEventListener(MouseEvent.MOUSE_OUT, mouseOFF);

        private function mouseON(e:MouseEvent):void{
                target.addEventListener(Event.ENTER_FRAME, targetScroll);
        }

        private function targetScroll(e:Event):void{
/*** здесь попробуй юзать соотношения "target.mouseX" с "target.mask.mouseX"
и "target.mouseY" c "target.mask.mouseY", для определения координат target под маской.***/
                target.x=...       
                target.y=..       
        }

        private function mouseOFF(e:MouseEvent):void{
                target.removeEventListener(Event.ENTER_FRAME);
        }

для перехвата событий мыши, скорее всего, прийдестя помимо маски добавлять еще и спрайт-перехватчик, расположенный поверх нее - уже точно не помню.
доделай до конца - получишь универсальный класс-скроллер.

vvk80 02.11.2007 19:33

мой класс:
Код:

package
{
        import flash.display.*;
        import flash.geom.*;
        import flash.events.*;
        import flash.utils.*;
       
        import HelperClasses.Objects.*;
       
        public class Test extends Sprite
        {
                //private var shape:Shape = new Shape();
                private var cont:Sprite = new Sprite();
                       
                private var rect:Rectangle= new Rectangle(0,0,300,560);
                private var mouse:Point = new Point(0,0)
                private var r_img:Rectangle;
                private var r_mask:Rectangle;
                private var x_pos:Number
            private var y_pos:Number

                private var img:BaseClass; //my Swf/Img loader
               
               
                private var _heightC:Number;
               
                public function Test():void
                {
                        //shape.graphics.beginFill(0xFFFF00,1);
                        //shape.graphics.drawRect(300,200,300,300);
                        //shape.graphics.endFill();
                       
                        img = new BaseClass(cont,"LeftPane_overview.swf");
                        img.initImg(0,0);
                        img.addEventListener(BaseClass.LOAD_COMPLETE, _onLoadComplete);
                                                       
                        cont.addEventListener(MouseEvent.ROLL_OVER, _onRollOver);
                        cont.addEventListener(MouseEvent.ROLL_OUT, _onRollOut);
                        this.addChild(cont);
                                               
                        cont.x=18;
                        cont.y=140;
                        this.addEventListener("fullyLoaded",full);//listening to the global full event for loaded swf
//dispathed by the loaded swf when it is fully loaded (all inner components are loaded
// used to obtain actual dimensions of the loaded swf
// event declared as public in the loaded swf
                }
               
                private function full(evt:Event):void
                {
                        trace("Full")
                        trace(img.getHeight);
                        r_img  = new Rectangle(0, 0, img.getWidth, img.getHeight) //getting rectnagle object containing the original width and height of the loaded image
                        r_mask = new Rectangle(cont.x, cont.y, rect.width, rect.height)
                        start();
                }
               
                private function start():void
                {
                        cont.scrollRect = rect;
                        cont.addEventListener(Event.ENTER_FRAME,_onEnterFrame);
                }
               
                private function _onEnterFrame(evt:Event):void
                {
                        mouse.x = this.mouseX;
                        mouse.y = this.mouseY;
                        if(r_mask.containsPoint(mouse))
                        {
                                y_pos = ((Math.abs(cont.y - mouse.y)/rect.height)*(r_img.height-rect.height));
                                //x_pos = ((Math.abs(cont.x - mouse.x)/rect.width)*(r_img.width-rect.width));
                        }
               
                        //rect.x += (x_pos - rect.x)/8;
                        //rect.x = rect.x;
                        //rect.y += (y_pos - rect.y)/8;
                        //rect.x = x_pos
                        rect.y = y_pos;
                        cont.scrollRect = rect;
                }
                private function _onLoadComplete(evt:Event):void
                {
                        trace("loadComplete");
                }
                private function _onRollOver(evt:Event):void
                {
                       
                }
                private function _onRollOut(evt:Event):void
                {
                       
                }
        }
}

если включаю rect.y += (y_pos - rect.y)/8;, начинаются глюки...


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

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