2013-12-18 69 views
0

我是,在flash cs 5.5中创建一个简单的拖放游戏。舞台上会有几个影片剪辑。用户需要做的是将其拖动到另一个动画片段,并且动画片段会切换并检查它是否在正确的位置。我使用的代码是这样的dropTarget显示错误

if (evt.target.dropTarget != null && evt.target.dropTarget.parent.name == "num1" || "num2" || "num3" || ......and so on) 
{ 
//do your thing 
} 
else 
{ 
//go back to original place 
} 

在上面的代码中NUM1,NUM2等都是moveiclips的名称。舞台上还有其他动画片段。他们是背景。这工作正常,如果我拖放movieclip(让说num1)在其他movieclip(让说num2)如预期。但是当我将其放在其他动画片段(背景)上时,它显示错误。我在if条件中追踪了evt.target.dropTarget.parent.name,并显示了其他动画片段(背景)的名称。为什么当条件未满足时,它显示另一个动画片段(背景)的名称,名称不是num1或num2左右......?有人能告诉我我是否做错了什么?还是有另一种方法来做到这一点?

回答

1

不知道,如果你发布的伪代码或没有,但这不会作为条件工作:

evt.target.dropTarget.parent.name == "num1" || "num2" || "num3" || 

,因为它评估字符串“NUM2”,因为这将始终返回true一个条件。请查看Boolean function了解更多信息。

你想要的是一样的东西:

var valid_targets = ["num1","num2","num3"]; 
if (evt.target.dropTarget != null && (valid_targets.indexOf(par_name)>=0)) 
0

希望这个简单而虚拟实例将有可能稍微解释一下:

var par_name = evt.target.dropTarget.parent.name; 
if (evt.target.dropTarget != null && par_name == "num1" || par_name=="num2" || par_name=="num3") 

,或者你可以在很多ways--如简化这个多一点如何实现这个逻辑。 (当然,这只是一个草案,但可以作为样机)

试着这么做:

//your package name (I just created a simple example, you should refactor and add your logic 
package nu.gpeart.TheGunnersExample.components 
{ 
import flash.geom.Rectangle; 
import flash.display.Sprite; 
import flash.events.MouseEvent; 
import flash.geom.Point; 

/** 
* @file DraggableItem.as 
* @created Dec 18, 2013 - 9:02:52 AM 
*/ 
public class DraggableItem extends Sprite 
{ 
    private var _item:Sprite; 
    private var _rightPlace:Point; 
    private var _dropTarget:Sprite; 
    private var _originalPlace:Point; 

    public function DraggableItem(parent:Sprite, 
            viewport:Rectangle, 
            color:uint, 
            rightPlace:Point, 
            dropTarget:Sprite) 
    { 
     _originalPlace = new Point(viewport.x, viewport.y); 
     _rightPlace = rightPlace; 
     _dropTarget = dropTarget; 

     _item = new Sprite(); 
     _item.graphics.beginFill(color); 
     _item.graphics.drawRect(0, 0, viewport.width, viewport.height); 
     _item.graphics.endFill(); 
     parent.addChild(_item); 

     addMouseDownListener(); 
    } 

    private function addMouseDownListener():void 
    { 
     _item.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true); 
    } 

    private function mouseDownHandler(event:MouseEvent):void 
    { 
     _item.startDrag(); 
     removeMouseDownListener(); 
     addMouseUpListeners(); 
    } 

    private function addMouseUpListeners():void 
    { 
     _item.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, false, 0, true); 
     _item.parent.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, false, 0, true); 
    } 

    private function mouseUpHandler(event:MouseEvent):void 
    { 
     _item.stopDrag(); 
     removeMouseUpListeners(); 
     addMouseDownListener(); 

     startLogic(); 
    } 

    private function startLogic():void 
    { 
     if (_item.hitTestObject(_dropTarget)) 
     { 
      (_item.hitTestPoint(_rightPlace.x, _rightPlace.y)) ? rightPositionLogic() : wrongPositionLogic(); 
     } 
     else 
     { 
      wrongPositionLogic(); 
     } 
    } 

    private function wrongPositionLogic():void 
    { 
     _item.x = _originalPlace.x; 
     _item.y = _originalPlace.y; 
     // go back to original place 
    } 

    private function rightPositionLogic():void 
    { 
     trace('dropped the right place'); 
     // do your thing 
    } 

    private function removeMouseUpListeners():void 
    { 
     _item.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
     _item.parent.stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
    } 

    private function removeMouseDownListener():void 
    { 
     _item.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
    } 
} 
} 

,并使用,你只需要像:

 var rightPlace:Point = new Point(461, 554); 
     var originalPosition:Point = new Point(50, 50); 
     var itemWidth:Number = 50; 
     var itemHeight:Number = 50; 
     var viewport:Rectangle = new Rectangle(originalPosition.x, originalPosition.y, itemWidth, itemHeight); 
     var itemColor:uint = 0xf67821; 

     //container (the Sprite where are you adding all your objects 
     //dropTarget (the Sprite you want to detect the hitTest 
     var draggableItem:DraggableItem = new DraggableItem(container, viewport, itemColor, rightPlace, dropTarget);