Actionscript 3 使用ActionScript 3.0沿movieclip拖动
如何沿BG拖动对象一个movieclip也可以拖动一个movieclip。 在BG内移动/拖动对象movieclipActionscript 3 使用ActionScript 3.0沿movieclip拖动,actionscript-3,flash,Actionscript 3,Flash,如何沿BG拖动对象一个movieclip也可以拖动一个movieclip。 在BG内移动/拖动对象movieclip 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.startDr
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;
}
已编辑/新代码:
//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;
}
我将停止拖动事件函数分开,因为它可以在不同的类中调用
在我编辑的代码中,当我“触碰”object2时,object2和ObjectJ都将其位置更改为我“触碰”的位置,并且没有拖动它们。当我“触摸”object2时,它会重置它们的位置
另外,这些代码用于我的虚拟操纵杆控制器。创建两个对象:背景背景背景和要拖动的对象对象。 定义矩形区域。对象只能在此区域内移动
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);
}
更新:
这对BG意味着什么?对象不应超出背景?是的,它应始终命中电影剪辑“背景”。对不起,我的英语不好。也很抱歉我的英语不好。几分钟后我会给你一个答案。谢谢你分享这个代码,但我把MouseeEvent改为TouchEvent,因为这个游戏是为移动设备设计的。但是,我仍然使用你的代码,没有错误,但有一个问题。当我在拖动对象时单击/轻触另一个按钮Movieclip时,对象停止拖动事件不应该发生。我知道该如何处理,但我的代码似乎错误,因为它无法拖动对象。我将编辑我的问题以添加代码,请检查一下。谢谢,谢谢,我试试这个。但是,如果我在拖动obj1或obj2时单击/轻触舞台,它会停止拖动事件吗?不,它不会停止。也可以用两个手指拖动两个对象。嗨。我用你的代码测试了我的应用程序,出现了一个问题。当我在拖动对象时“触摸”另一个点时,它将停止拖动对象。。
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);
}