Просмотр полной версии : Проверка курсора, за сценой, внутри сцены.
Всем привет, подскажите, как можно проверить положение курсора, внутри сцены курсор или курсор вне сцены?
Добавлено через 14 минут
я хочу сделать проверку на перетаскивание объекта, если объект отпустили за пределами сцены, объект возвращается в исходную позицию.
в ас 2.0 это было так
a_mc.onPress=function(){
startDrag(a_mc);
x0=this._x;
y0=this._y;
}
a_mc.onRelease=function(){
stopDrag();
}
a_mc.onReleaseOutside=function(){
stopDrag();
this._x=x0;
this._y=y0;
}
Событие Event.MOUSE_LEAVE - мышь покидает окно флэш-плеера (точнее сцену).
А onReleaseOutside не имел к этому ни малейшего отношения. Это - когда кнопку мыши ОТПУСКАЮТ не на том объекте, на котором НАЖАЛИ.
вот как можно сделать проверку, что бы объект выпущенный за сценой, возвращался назад?
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class DragAndDrop extends Sprite
{
private var _obj;
public function DragAndDrop()
{
_obj = new Obj();
stage.addChild(_obj);
_obj.addEventListener(MouseEvent.MOUSE_DOWN, drag);
_obj.addEventListener(MouseEvent.MOUSE_UP, drop);
}
private function drag(evt:MouseEvent):void
{
_obj.startDrag();
}
private function drop(evt:MouseEvent):void
{
_obj.stopDrag();
}
}
}
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class DragAndDrop extends Sprite
{
private var _obj;
private var startX:int;
private var startY:int;
public function DragAndDrop()
{
_obj = new Obj();
stage.addChild(_obj);
_obj.addEventListener(MouseEvent.MOUSE_DOWN, drag);
_obj.addEventListener(MouseEvent.MOUSE_UP, drop);
_obj.addEventListener(Event.MOUSE_LEAVE, leaveHandler);
}
private function leaveHandler(e:Event):void {
e.target.stopDrag();
e.target.x = startX;
e.target.y = startY;
}
private function drag(evt:MouseEvent):void
{
startX = e.target.x;
startY = e.target.y;
_obj.startDrag();
}
private function drop(evt:MouseEvent):void
{
_obj.stopDrag();
}
}
}
Могут быть ошибки, ибо писал прям в форууме
а есть ли альтернатива событию onReleaseOutside в as 3.0, поскольку вышепреведенные варианты никак не подошли(
Вам нужно именно, чтобы при отпускании мыши смотрелось наличие курсора на сцене?
не совсем, главное что бы перетаскиваемый объект возвращался в исходную позицию, если этот объект был "брошен" за сценой флэшки
Не понял, каким чудесным образом у вас LEAVE_MOUSE стал MouseEvent
protected var mouseLeft:Boolean = false;
protected function init():void
{
stage.addEventListener( Event.MOUSE_LEAVE, mouseLeave );
}
protected function mouseLeave( event:Event ):void
{
mouseLeft = true;
stage.addEventListener( MouseEvent.MOUSE_MOVE, mouseMove );
}
protected function mouseMove( event:MouseEvent ):void
{
mouseLeft = false;
stage.removeEventListener( MouseEvent.MOUSE_MOVE, mouseMove );
}
Но все таки, onReleaseOutside, больше подходит, попробуйте перетащить желтый круг за сцену и бросить его, вот такой же (http://***********/18600293) эффект нужно получить
В чем проблема то и какой именно код у Вас не работает?
В момент отпускания мыши проверяйте координаты объекта или мыши, если координаты находится за пределами сцены (а размеры сцены известны), возвращайте объект на место.
Координаты мыши за пределами сцены? ммм..
Координаты мыши за пределами сцены? ммм..
А что смущает то?
package
{
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
public class TestMouseCoord extends Sprite
{
private var _tfInfo:TextField;
private var _square:Sprite;
private var _squareStartPoint:Point;
public function TestMouseCoord()
{
if (stage) initInstance();
else addEventListener(Event.ADDED_TO_STAGE, initInstance);
}
private function initInstance(event:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, initInstance);
_squareStartPoint = new Point(50, 50);
_square = new Sprite();
_square.graphics.beginFill(0xCC0000);
_square.graphics.drawRect(0, 0, 50, 50);
_square.graphics.endFill();
_square.x = _square.y = 150;
addChild(_square);
_tfInfo = new TextField();
_tfInfo.autoSize = TextFieldAutoSize.LEFT;
_tfInfo.defaultTextFormat = new TextFormat("Arial", 12, 0x000000);
_tfInfo.x = _tfInfo.y = 10;
addChild(_tfInfo);
_square.addEventListener(MouseEvent.MOUSE_DOWN, square_mouseDownHandler);
}
private function square_mouseDownHandler(event:MouseEvent):void
{
_square.removeEventListener(Event.ENTER_FRAME, moveSquareBack);
stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler);
}
private function stage_mouseUpHandler(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMoveHandler);
stage.removeEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler);
if ( !new Rectangle(0, 0, stage.stageWidth, stage.stageHeight).containsPoint(new Point(mouseX, mouseY)) )
{
_square.addEventListener(Event.ENTER_FRAME, moveSquareBack);
}
}
private function stage_mouseMoveHandler(event:MouseEvent):void
{
_tfInfo.text = "mouse:\t[ " + mouseX + " | " + mouseY + " ]" + "\nstage:\t" + stage.stageWidth + "x" + stage.stageHeight;
_square.x = mouseX;
_square.y = mouseY;
event.updateAfterEvent();
}
private function moveSquareBack(event:Event):void
{
if (_square.x == _squareStartPoint.x && _square.y == _squareStartPoint.y)
{
_square.removeEventListener(Event.ENTER_FRAME, moveSquareBack);
}
else
{
_square.x += (_squareStartPoint.x - _square.x) * .25;
_square.y += (_squareStartPoint.y - _square.y) * .25;
}
}
}
}
Координаты мыши за пределами сцены? ммм..В IE флешка никогда не получает кординаты за пределами сцены. Также в IEшаке, если мышь выведена за пределы флешки при нажатой кнопке, при выходе не возникает ни каких событий - также и при отпускании кнопки за пределами. Проблема решается достаточно нудно и криво с использованием жаваскрипта. Если жаваскрипт недоступен, проблема не решается вовсе. Во всех остальных браузерах нормально работают Event.MOUSE_LEAVE при отжатой кнопке - или MouseEvent.MOUSE_OUT, MouseEvent.MOUSE_MOVE, MouseEvent.MOUSE_UP при перетаскивании за пределы сцены.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.