Просмотр полной версии : Как узнать: нажата-ли кнопка мыши в пределах ролика?
Доброго времени суток.
Решил скролл сделать - наткнулся на проблему: MouseEvent-ы привязываются к конкретному объекту.
Подскажите пожалуйста - как отследить MOUSE_UP в любой точке ролика и выход за его(ролика) пределы.
LokiDi L0ck
02.11.2007, 10:37
Вероятно нужно назначить слушателей для stage. А по e.target определять по кому нажали мышкой.
Насчёт выхода за границы Event.MOUSE_LEAVE (http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/Event.html#constantSummary)
//опередили =)
Доброго времени суток.
Решил скролл сделать
Уважаемый, Torero!
Подскажите пожалуйста, а как вы скролл делаете. У меня тоже такая проблема стоит... Объясните хотя бы логику... Понятно что надо scrollRect использовать... но дальше простого слайдинга вверх вниз у меня дело не пошло...А я бы хотел чтобы типа подвел к определенному месту ролика ролик пошел вверх, пошел к другому ролик- пошел вниз (если есть куда идти).
Спасибо за ответы - почти так и сделал..)))
чтобы типа подвел к определенному месту ролика ролик пошел вверх, пошел к другому ролик- пошел вниз.
Если я правильно понял, то вот обсуждение аналогичного скролла.
http://www.flasher.ru/forum/showthread.php?t=98574
Спасибо за ответы - почти так и сделал..)))
Если я правильно понял, то вот обсуждение аналогичного скролла.
http://www.flasher.ru/forum/showthread.php?t=98574
спасибо, это то что нужно...
но вот блин, не хотелось бы опять в AS2 разбираться...
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) флешка начинает вести себя не стабильно...
Нет времени - пишу навскидку несколько кусков кода:
/***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);
}
для перехвата событий мыши, скорее всего, прийдестя помимо маски добавлять еще и спрайт-перехватчик, расположенный поверх нее - уже точно не помню.
доделай до конца - получишь универсальный класс-скроллер.
мой класс:
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;, начинаются глюки...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.