AS3如何仅在x轴上启动?

时间:2011-06-22 01:13:03

标签: actionscript-3

我有一个红色正方形,我只想在x轴上拖动。我已经制定了一个简单的脚本,理论上应该可行,但它的行为并不正常。这有点难以解释......广场一直在错误的位置开始,舞台位置似乎在变化,所以有时你不能将广场一直拖到右边......

red.buttonMode = true;
red.addEventListener(MouseEvent.MOUSE_DOWN, dragHandler);

function dragHandler(e:MouseEvent):void {
    var ypos:Number = e.currentTarget.y;
    var xpos:Number = e.currentTarget.x;

    e.currentTarget.startDrag(false,new Rectangle(-xpos,ypos,stage.stageWidth,0));
}


red.addEventListener(MouseEvent.MOUSE_UP, dropHandler);

function dropHandler(e:MouseEvent) {
    //trace("red up");
    e.currentTarget.stopDrag();
}

3 个答案:

答案 0 :(得分:14)

很高兴Marty的解决方案适合你,虽然效率不高(MouseEvent.MOUSE_MOVE监听器是杀手)。原始代码的问题在于,限制拖动边界的矩形必须相对于父级坐标。此外,根据广场的注册点的位置,如果您不希望其任何部分移动,则可能必须考虑宽度走出舞台。

例如,如果您的红色方块直接位于舞台上,则其注册点位于其中心,并且您希望将拖动限制为舞台的整个x轴,这将起作用:

e.currentTarget.startDrag(
       false,
       new Rectangle(
          e.currentTarget.width/2,
          e.currentTarget.y,
          stage.stageWidth-e.currentTarget.width,
          0
       )
);

答案 1 :(得分:3)

您可以尝试使用包含MouseEvent.MOUSE_MOVE的其他方法,因为使用矩形作为动态边界会很棘手。

// define lock on y-axis
var LOCKY:Number = target.y;

// MouseEvent.MOUSE_MOVE
stage.addEventListener(MouseEvent.MOUSE_MOVE, _mouseMove);
function _mouseMove(e:MouseEvent):void
{
    if(target.y != LOCKY) target.y = LOCKY;
}

// dragging
target.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDown);
function _mouseDown(e:MouseEvent):void
{
    target.startDrag();
    target.addEventListener(MouseEvent.MOUSE_UP, _mouseUp);
}

// dropping
function _mouseUp(e:MouseEvent):void
{
    target.stopDrag();
    target.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp);
}

答案 2 :(得分:0)

这将使ACTIONSCRIPT 3(Semilla Sol应用程序)

1-创建常规 MOUSE DOWN MOUSE UP 事件监听器

分别在每个函数中删除' startDrag '和' stopDrag '元素

以下是如何锁定AXIS:

1:为您要限制的对象创建事件侦听器 ...在此示例中,它是名为“播放器”的movieclip实例:

player.addEventListener(Event.ENTER_FRAME, pLimiter);

这里是'pLimter'功能:

function pLimiter(e:Event):void
{
    player.y = stage.stageHeight;
}

因此,在这种情况下,我们将“拖动”限制为仅仅x轴。

  • 派对老兄! (Semilla Sol Apps)