AS3 如何仅在 x 轴上开始拖动? [英] AS3 How to startdrag only on x-axis?

查看:21
本文介绍了AS3 如何仅在 x 轴上开始拖动?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个红色方块,我只想在 x 轴上拖动它.我已经制定了一个简单的脚本,理论上应该可以工作,但它的行为不正常.有点难以解释..方块总是从错误的位置开始,舞台位置似乎也在变化,所以有时你不能一直向右拖动方块...

red.buttonMode = true;red.addEventListener(MouseEvent.MOUSE_DOWN,dragHandler);函数 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);函数 dropHandler(e:MouseEvent) {//trace("红了");e.currentTarget.stopDrag();}

解决方案

您可以尝试结合 MouseEvent.MOUSE_MOVE 的不同方法,因为使用矩形作为动态边界会很棘手.

>

//在y轴上定义锁var LOCKY:Number = target.y;//鼠标事件.MOUSE_MOVEstage.addEventListener(MouseEvent.MOUSE_MOVE, _mouseMove);函数 _mouseMove(e:MouseEvent):void{if(target.y != LOCKY) target.y = LOCKY;}//拖动target.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDown);函数 _mouseDown(e:MouseEvent):void{target.startDrag();target.addEventListener(MouseEvent.MOUSE_UP, _mouseUp);}//丢弃函数 _mouseUp(e:MouseEvent):void{target.stopDrag();target.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp);}

I have a red square that I want to drag only on the x-axis. I've worked out a simple script, which theoretically should work, but it's not behaving properly. It's a bit hard to explain..the square keeps starting at the wrong position and the stage position seems to be changing so sometimes you can't drag the square all the way to the right...

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();
}

解决方案

You could try a different approach that incorporates MouseEvent.MOUSE_MOVE, as using a rectangle for a dynamic boundary would be tricky.

// 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);
}

这篇关于AS3 如何仅在 x 轴上开始拖动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆