使用 ActionScript 3.0 沿动画剪辑拖动
Drag along movieclip with ActionScript 3.0
如何沿着 BG(也是一个动画片段)拖动对象(一个动画片段)。
Moving/dragging BG 中的对象(影片剪辑)?
BG.addEventListener(MouseEvent.MOUSE_DOWN, DRAG);
BG.addEventListener(MouseEvent.MOUSE_UP, DROP);
function DRAG (e:MouseEvent) {
object.x = e.localX;
object.y = e.localY;
//object.startDrag();
//code to drag object(movieclip) along BG(movieclip)
}
function DROP (e:MouseEvent) {
object.stopDrag();
object.x = 0;
object.y = 0;
}
Edited/New代码:
//bg(movieclip)
//obj(movieclip to drag)
//object2(movieclip)
var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;
bounds.width = bg.width - obj.width;
bounds.height = bg.height - obj.height;
object2.x = obj.x;
object2.y = obj.y;
object2.addEventListener(TouchEvent.TOUCH_BEGIN, Drag);
object2.addEventListener(TouchEvent.TOUCH_END, Drop);
function Drag(event: TouchEvent): void {
object2.x = e.LocalX;
object2.y = e.LocalY;
e.target.startTouchDrag(e.touchPointID);
obj.x = e.localX;
obj.x = e.localY;
obj.startDrag(false, bounds);
}
function Drop(event: TouchEvent): void {
End_Drag();
}
public function End_Drag():void {
obj.stopDrag();
obj.x = bound.x;
obj.y = bound.y;
object2.stopTouchDrag(object2.touchPointID);
object.x = bound.x;
object.y = bound.y;
}
我将停止拖动事件函数分开,因为它可能在不同的地方被调用class。
在我编辑的代码中,当我 'TOUCH_DOWN' object2 时,obj 和 object2 都将其位置更改为我 'TOUCH_DOWN' 的位置并且没有拖动它们。当我 'TOUCH_END' object2 时,它重置了它们的位置。
P.S。此代码适用于我的虚拟操纵杆控制器。
创建两个对象:背景 bg
和要拖动的对象 obj
。
定义矩形区域。只能在此区域内移动对象。
var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;
bounds.width = bg.width - obj.width;
bounds.height = bg.height - obj.height;
当鼠标按下时开始移动obj
。鼠标悬停后停止移动
obj.addEventListener(MouseEvent.MOUSE_DOWN, objDown);
function objDown(event: MouseEvent): void
{
obj.startDrag(false, bounds);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
}
function mouseMove(event: MouseEvent): void
{
//smooth moving
event.updateAfterEvent();
}
function mouseUp(event: MouseEvent): void
{
obj.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
}
更新:
import flash.events.TouchEvent;
import flash.display.MovieClip;
var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
obj1.addEventListener(TouchEvent.TOUCH_BEGIN, objTouchBegin);
obj2.addEventListener(TouchEvent.TOUCH_BEGIN, objTouchBegin);
function objTouchBegin(event: TouchEvent): void
{
bounds.width = bg.width - event.currentTarget.width;
bounds.height = bg.height - event.currentTarget.height;
event.currentTarget.startTouchDrag(event.touchPointID, false, bounds);
stage.addEventListener(TouchEvent.TOUCH_END, touchEnd);
stage.addEventListener(TouchEvent.TOUCH_MOVE, touchMove);
}
function touchMove(event:TouchEvent): void
{
event.updateAfterEvent();
}
function touchEnd(event: TouchEvent): void
{
event.currentTarget.stopTouchDrag(event.touchPointID);
stage.removeEventListener(TouchEvent.TOUCH_END, touchEnd);
stage.removeEventListener(TouchEvent.TOUCH_MOVE, touchMove);
}
如何沿着 BG(也是一个动画片段)拖动对象(一个动画片段)。 Moving/dragging BG 中的对象(影片剪辑)?
BG.addEventListener(MouseEvent.MOUSE_DOWN, DRAG);
BG.addEventListener(MouseEvent.MOUSE_UP, DROP);
function DRAG (e:MouseEvent) {
object.x = e.localX;
object.y = e.localY;
//object.startDrag();
//code to drag object(movieclip) along BG(movieclip)
}
function DROP (e:MouseEvent) {
object.stopDrag();
object.x = 0;
object.y = 0;
}
Edited/New代码:
//bg(movieclip)
//obj(movieclip to drag)
//object2(movieclip)
var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;
bounds.width = bg.width - obj.width;
bounds.height = bg.height - obj.height;
object2.x = obj.x;
object2.y = obj.y;
object2.addEventListener(TouchEvent.TOUCH_BEGIN, Drag);
object2.addEventListener(TouchEvent.TOUCH_END, Drop);
function Drag(event: TouchEvent): void {
object2.x = e.LocalX;
object2.y = e.LocalY;
e.target.startTouchDrag(e.touchPointID);
obj.x = e.localX;
obj.x = e.localY;
obj.startDrag(false, bounds);
}
function Drop(event: TouchEvent): void {
End_Drag();
}
public function End_Drag():void {
obj.stopDrag();
obj.x = bound.x;
obj.y = bound.y;
object2.stopTouchDrag(object2.touchPointID);
object.x = bound.x;
object.y = bound.y;
}
我将停止拖动事件函数分开,因为它可能在不同的地方被调用class。
在我编辑的代码中,当我 'TOUCH_DOWN' object2 时,obj 和 object2 都将其位置更改为我 'TOUCH_DOWN' 的位置并且没有拖动它们。当我 'TOUCH_END' object2 时,它重置了它们的位置。
P.S。此代码适用于我的虚拟操纵杆控制器。
创建两个对象:背景 bg
和要拖动的对象 obj
。
定义矩形区域。只能在此区域内移动对象。
var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;
bounds.width = bg.width - obj.width;
bounds.height = bg.height - obj.height;
当鼠标按下时开始移动obj
。鼠标悬停后停止移动
obj.addEventListener(MouseEvent.MOUSE_DOWN, objDown);
function objDown(event: MouseEvent): void
{
obj.startDrag(false, bounds);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
}
function mouseMove(event: MouseEvent): void
{
//smooth moving
event.updateAfterEvent();
}
function mouseUp(event: MouseEvent): void
{
obj.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
}
更新:
import flash.events.TouchEvent;
import flash.display.MovieClip;
var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
obj1.addEventListener(TouchEvent.TOUCH_BEGIN, objTouchBegin);
obj2.addEventListener(TouchEvent.TOUCH_BEGIN, objTouchBegin);
function objTouchBegin(event: TouchEvent): void
{
bounds.width = bg.width - event.currentTarget.width;
bounds.height = bg.height - event.currentTarget.height;
event.currentTarget.startTouchDrag(event.touchPointID, false, bounds);
stage.addEventListener(TouchEvent.TOUCH_END, touchEnd);
stage.addEventListener(TouchEvent.TOUCH_MOVE, touchMove);
}
function touchMove(event:TouchEvent): void
{
event.updateAfterEvent();
}
function touchEnd(event: TouchEvent): void
{
event.currentTarget.stopTouchDrag(event.touchPointID);
stage.removeEventListener(TouchEvent.TOUCH_END, touchEnd);
stage.removeEventListener(TouchEvent.TOUCH_MOVE, touchMove);
}