Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何在as3中沿轴(x轴和y轴)拖动对象,但不沿对角线拖动对象_Actionscript 3_Flash Cs5 - Fatal编程技术网

Actionscript 3 如何在as3中沿轴(x轴和y轴)拖动对象,但不沿对角线拖动对象

Actionscript 3 如何在as3中沿轴(x轴和y轴)拖动对象,但不沿对角线拖动对象,actionscript-3,flash-cs5,Actionscript 3,Flash Cs5,如果鼠标在x轴上拖动,则对象应在x轴上移动 如果在y轴上拖动鼠标,则对象应在y轴上移动 对象不应该沿对角线移动,因为不可能这样做。当你的鼠标要沿对角线移动时,你会怎么做?另一种选择是这样的,对象沿最快的轴移动: var oldx:int; var oldy:int; var sx:int; var sy:int; function run(e:Event):void { sx = Math.abs(mouseX - oldx); sy = Math.abs(mouseY - o

如果鼠标在x轴上拖动,则对象应在x轴上移动 如果在y轴上拖动鼠标,则对象应在y轴上移动
对象不应该沿对角线移动,因为不可能这样做。当你的鼠标要沿对角线移动时,你会怎么做?另一种选择是这样的,对象沿最快的轴移动:

var oldx:int;
var oldy:int;
var sx:int;
var sy:int;

function run(e:Event):void
{
    sx = Math.abs(mouseX - oldx);
    sy = Math.abs(mouseY - oldy);

    if (sx > sy) {
        c.x = mouseX;
    } else {
        c.y = mouseY;
    }

    oldx = mouseX;
    oldy = mouseY;
}

stage.addEventListener(Event.ENTER_FRAME, run);
其他解决方案

另一种选择是计算鼠标的角度:

var oldx:int;
var oldy:int;
var rd:Number;
var l1:Number = Math.PI / 4;
var l2:Number = 3 * Math.PI / 4;

function run2(e:Event):void
{
    rd = Math.atan2(mouseX - oldx, mouseY - oldy);

    if ((rd > l1 && rd < l2) || (rd < -l1 && rd > -l2)) {
        c.x = mouseX;
    } else {
        c.y = mouseY;
    }

    oldx = mouseX;
    oldy = mouseY;

}
stage.addEventListener(Event.ENTER_FRAME, run2);
var oldx:int;
变量oldy:int;
var-rd:数字;
变量l1:Number=Math.PI/4;
变量l2:Number=3*Math.PI/4;
函数run2(e:事件):void
{
rd=Math.atan2(mouseX-oldx,mouseY-oldy);
如果((rd>l1&&rd-l2)){
c、 x=鼠标;
}否则{
c、 y=老鼠;
}
oldx=鼠标;
oldy=老鼠;
}
stage.addEventListener(Event.ENTER_FRAME,run2);
bl是mc的名称
这对我来说很好…单独在x轴或y轴上移动…

欢迎使用堆栈溢出。这不是一个好的提问方式。到目前为止,你有没有尝试过解决你的问题?先表现出你的努力,这样人们才能表现出他们的努力。请阅读,并作为一个开始。
import flash.geom.Rectangle;
import flash.events.MouseEvent;
var tempx:Number=0;
var tempy:Number=0;
var count:int=0;
stage.addEventListener(MouseEvent.MOUSE_UP,remov)
bl.addEventListener(MouseEvent.MOUSE_DOWN,func)
function func  (f:MouseEvent)
{
    tempx=Math.abs(stage.mouseX);
    tempy=Math.abs(stage.mouseY);
    stage.addEventListener(MouseEvent.MOUSE_MOVE,mov)
}
function mov(h:MouseEvent)
{
    count+=1;
    if (count==4)
    {
    count=0;
    var Xval:Number=tempx-stage.mouseX;
    var Yval:Number=tempy-stage.mouseY;
    if(Math.abs(Xval)>Math.abs(Yval))
    {
    bl.startDrag(false,new Rectangle(0,bl.y,stage.stageWidth,0))
    trace ("X dragg")
    trace(Xval+""+""+Yval)
    }
    else
    {

        trace ("YY drag")
        trace(Xval+""+""+Yval)
        bl.startDrag(false,new Rectangle(bl.x,0,0,stage.stageHeight))
    }
    stage.removeEventListener(MouseEvent.MOUSE_MOVE,mov)
    }
}
function remov(y:MouseEvent)
{
    bl.stopDrag();
}