【发布时间】:2016-05-17 23:37:04
【问题描述】:
我正在使用 AS3 创建拖放游戏,我想检查 Movieclip 的一部分何时在屏幕外以将视图移到后面并让用户选择放置它的位置。
我无法测试 MovieClip 凭据是否大于舞台 (scaleMode = NO_SCALE) 宽度/高度,因为舞台的一部分隐藏在浏览器窗口后面。
这与 MOUSE_LEAVE 相同,只是这次必须用于 MovieClips,我试图查看 MOUSE_LEAVE 背后的代码,但无法访问。
谢谢。
主类
[SWF(width='800', height='800',backgroundColor='#CC99FF', frameRate='60')]
public class DragTest extends Sprite
{
public function DragTest()
{
addChild(new World(this));
this.stage.scaleMode = "noScale";
this.stage.align = "TL";
this.graphics.lineStyle(5,0x555555,0.5);
this.graphics.drawRect(0,0,800,800);
}
}
世界级
public class World extends Container // Container from my SWC
{
private var _display:Sprite;
private var _dragPt:Point;
private var _dragedObject:MovieClip;
public function World(display:Sprite)
{
super();
_display = display;
myMC.addEventListener(MouseEvent.MOUSE_DOWN, onPickUp, false, 0, true );
display.stage.addEventListener(MouseEvent.MOUSE_UP, onDrop, false, 0, true );
display.stage.addEventListener(Event.MOUSE_LEAVE, onMouseLeave, false, 0, true );
}
protected function onMouseLeave(event:Event):void
{
trace("Mouse Is Leaving The Stage");
}
protected function onDrop(e:MouseEvent):void
{
_display.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMoveObject);
}
private function onPickUp(e:MouseEvent)
{
_dragedObject = e.currentTarget as MovieClip;
_display.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMoveObject, false, 0, true);
}
protected function onMoveObject(e:MouseEvent):void
{
var point:Point = new Point(_display.stage.mouseX, _display.stage.mouseY);
(_dragedObject as MovieClip).x = point.x;
(_dragedObject as MovieClip).y = point.y;
}
}
这是一个例子: Simple Code
【问题讨论】:
-
所以这不是另一个 X/Y Problem。您的问题是否更多关于如何将 Flash 内容从一个浏览器窗口拖到另一个浏览器窗口?我对“舞台隐藏在浏览器窗口后面”感到困惑,并且还说“......在屏幕之外将视图移到后面并让用户选择放置它的位置。”
-
实际上它不是从一个窗口拖动到另一个窗口,舞台有时隐藏在浏览器后面,因为我使用的是 noScale 所以当你减小窗口的大小时,舞台的一部分没有显示,我想要做的是检测一个movieclip何时触及舞台的显示边界,检测它何时即将离开,它与MOUSE_LEAVE配合得很好,我只想用MC来做。
-
This answer 没用?放置一个小的可测试示例代码,说明您如何做到这一点,可以“修复”。通常我只使用
enterframe函数来拖动鼠标按钮,然后myMC.x = stage.mouseX;这样MC 跟随鼠标,也许你也可以应用Mouse_Leave方法... -
@ZouhairElamraniAbouElassad 您使用
NO_SCALE这一事实非常重要,请将其添加到您的问题中,并附上拖动影片剪辑的代码示例。 -
好的,我将尝试举一个简单的例子,它是一个使用 As3isolib 的等距地图,但重要的是独立于该库的拖动效果,我会用一个例子回来。
标签: actionscript-3 flash mouseevent movieclip stage