2011-11-16 274 views
0

你能帮我找出是什么导致了我的程序中的意外输出?我已经使用flash cs5和as3。这是一个拖放游戏。MOUSE_UP和MOUSE_DOWN问题在闪光灯中使用时拖动下降

没有错误在那里找到,但我MOUSE_UPMOUSE_DOWN不正常是该做的方式。 (在我看来)

我说这是因为,当我测试的代码,当我点击对象。鼠标有点像做点击或类似的功能。我不能放弃对象。

这是一套我用我的拖码并将其拖放

wintersquash_mc.buttonMode = true; 
wintersquash_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject); 
wintersquash_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject); 

function pickupObject(event:MouseEvent):void 
{ 
event.target.startDrag(true); 
event.target.parent.addChild(event.target); 
objectoriginalX = event.target.x; 
objectoriginalY = event.target.y; 
} 
function dropObject(event:MouseEvent):void 
{ 
event.target.stopDrag(); 
var matchingTargetName:String = "target" + event.target.name; 
var matchingTarget:DisplayObject = getChildByName(matchingTargetName); 
if (event.target.dropTarget != null && event.target.dropTarget.parent == matchingTarget) 
{ 
    event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject); 
    event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject); 
    event.target.buttonMode = false; 
    event.target.x = matchingTarget.x; 
    event.target.y = matchingTarget.y; 
    scorer++; 
    score.text = String(scorer); 
} 
else 
{ 
    event.target.x = objectoriginalX; 
    event.target.y = objectoriginalY; 
} 
} 

希望有人能告诉我,为什么它不能正常工作:(

回答

0

尝试增加你的MOUSE_UP舞台, 。不是你的影片剪辑这应该确保该事件将被不管抓到哪里鼠标

此外,您可以考虑只增加你的MOUSE_UP听众一次pickupObject()运行就像这样:。

wintersquash_mc.buttonMode = true; 
wintersquash_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject); 

function pickupObject(event:MouseEvent):void 
{ 
    event.target.startDrag(true); 
    event.target.parent.addChild(event.target); 
    objectoriginalX = event.target.x; 
    objectoriginalY = event.target.y; 
    stage.addEventListener(MouseEvent.MOUSE_UP, dropObject); 
} 

这将要求你的类有一个Stage对象的引用。另外,当你完成它时,你必须从舞台上明确地移除监听者。不过,试试看看它是否适合你。

+0

不应该是MOUSE_DOWN?自从你下降的时候,你按下它? – MisaChan

+0

我试着做你说的话,但是目标框就像是远离对象。我的意思是,如果我将wintersquash_mc对象拖入targetwintersquash_mc,目标位置本身就是对象所在的位置。同时,mouse_down仍然使用点击功能。从我读过的内容来看,当我使用mouse_down时,它的功能就是当你按下并且还没有释放按钮时,就会发生一个动作。但是我的功能像一个clike,怎么回事? :( – MisaChan

0

我通常处理拖着这样的:

wintersquash_mc.buttonMode = true; 

wintersquash_mc.mouseChildren = false; 
//this way you won't start dragging i.e. a sub-movieclip of the button 

wintersquash_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject); 

function pickupObject(event:MouseEvent):void 
{ 
    event.target.startDrag(true); 

    event.target.parent.addChild(event.target); 
    // is it necessary to add the clip to its parent? 
    // I would rather make a var on the root, 
    // and dump the event.target into that like this: 
    // root.nowDragged = event.target; 

    objectoriginalX = event.target.x; 
    objectoriginalY = event.target.y; 
    stage.addEventListener(MouseEvent.MOUSE_UP, dropObject); 
} 

function dropObject(event:MouseEvent):void 
{ 
    root.nowDragged.stopDrag(true); 
    stage.removeEventListener(MouseEvent.MOUSE_UP, dropObject); 
    // this removes the listener to prevent false alarms on other mouse ups 
    //... (rest of your code) 
} 

我希望这有助于。