嗨,所以最近我一直试图在AS3中拖动一个影片剪辑,但是我在接受任何想法的热门测试时遇到了一些麻烦?只是为了澄清,问题是当影片剪辑击中拖动测试对象时,他们不会执行gotoframe()函数。 initDrag()添加了动作侦听器: MOUSE_DOWN对象 舞台上的MOUSE_UP所以如果你不在物体上就没关系
endDrag()删除动作侦听器;在转到另一个框架之前调用此(对于每个对象)
startADrag()创建一个矩形,在该矩形内可以拖动对象(在本例中为舞台) 在对象上调用startDrag()
stopADrag()从currentObject调用对象的stopDrag()(但仅当currentObject不为null时)。
var currentObject:MovieClip = null;
initDrag(block1);
initDrag(block2);
initDrag(block3);
initDrag(block4);
function initDrag(obj:MovieClip )
{
obj.addEventListener(MouseEvent.MOUSE_DOWN,startADrag);
stage.addEventListener(MouseEvent.MOUSE_UP,stopADrag);
}
function endDrag(obj:MovieClip )
{
obj.removeEventListener(MouseEvent.MOUSE_DOWN,startADrag);
stage.removeEventListener(MouseEvent.MOUSE_UP,stopADrag);
}
function startADrag(e:MouseEvent):void
{
currentObject = (MovieClip)(e.target);
var rect:Rectangle = new Rectangle(0,0,stage.stageWidth - currentObject.width,stage.stageHeight - currentObject.height + 100);
currentObject.startDrag(false,rect);
}
function stopADrag(e:MouseEvent):void
{
if (currentObject != null)
{
currentObject.stopDrag();
}
}
if(block1.hitTestObject(dragtest)){
gotoAndStop("lose");
}
if(block2.hitTestObject(dragtest)){
gotoAndStop(27);
}
if(block3.hitTestObject( dragtest)){
gotoAndStop("lose");
}
if(block4.hitTestObject( dragtest)){
gotoAndStop("lose");
}
感谢任何建议或答案。
答案 0 :(得分:2)
以下代码应按预期工作。问题是,正如我在评论中已经说过的那样,您对hitTestObject(obj)
的来电只能在应用的一开始 一次时执行。你需要做的是经常检查。
考虑一下,如果你对hitTestObject调用的调用只在开始时执行一次,当你甚至没有机会拖动你的一个对象时,它总会返回false,对吗?因为你的对象仍处于初始位置(我必须假设dragtest object
之外)。
使用Event.ENTER_FRAME
的事件监听器,您可以每帧检查一次。因此,即使hitTestObject的所有结果都为false,它也会在下一帧中再次检查它们(如果您当前正在拖动,通过名为boolean
的简单dragging
进行控制。
var currentObject:MovieClip = null;
var dragging:Boolean = false;
initDrag(block1);
initDrag(block2);
initDrag(block3);
initDrag(block4);
addEventListener(Event.ENTER_FRAME, checkForHit);
function checkForHit(e:Event):void{
if(dragging){
if(block1.hitTestObject(dragtest)){
gotoAndStop("lose");
}
if(block2.hitTestObject(dragtest)){
gotoAndStop(27);
}
if(block3.hitTestObject( dragtest)){
gotoAndStop("lose");
}
if(block4.hitTestObject( dragtest)){
gotoAndStop("lose");
}
}
}
function initDrag(obj:MovieClip )
{
obj.addEventListener(MouseEvent.MOUSE_DOWN,startADrag);
stage.addEventListener(MouseEvent.MOUSE_UP,stopADrag);
}
function endDrag(obj:MovieClip )
{
obj.removeEventListener(MouseEvent.MOUSE_DOWN,startADrag);
stage.removeEventListener(MouseEvent.MOUSE_UP,stopADrag);
}
function startADrag(e:MouseEvent):void
{
currentObject = (MovieClip)(e.target);
var rect:Rectangle = new Rectangle(0,0,stage.stageWidth - currentObject.width,stage.stageHeight - currentObject.height + 100);
currentObject.startDrag(false,rect);
dragging = true;
}
function stopADrag(e:MouseEvent):void
{
if (currentObject != null)
{
currentObject.stopDrag();
dragging = false;
}
}