Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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:用鼠标拖动或按键移动_Actionscript 3_Drag And Drop_Move - Fatal编程技术网

Actionscript 3 AS3:用鼠标拖动或按键移动

Actionscript 3 AS3:用鼠标拖动或按键移动,actionscript-3,drag-and-drop,move,Actionscript 3,Drag And Drop,Move,我有6个具有拖放和命中测试功能的对象。很明显,当我把一个物体拖到它们的命中率最高的区域时,它是正确的 但我的问题是,我想通过鼠标和键盘键来控制这6个对象。如果我不想拖动它们,那么我可以通过键箭头移动它们 第二个问题是,当这两种方法完成时,如果我想按键移动一个对象,那么我会抓取第一个未“命中测试”的自由对象 我可以在AS3中做这些事情吗?这些项目中的解决方案非常奇怪,但我需要知道是否可行 这是我的拖放函数代码 package { import flash.display.Sprite; impor

我有6个具有拖放和命中测试功能的对象。很明显,当我把一个物体拖到它们的命中率最高的区域时,它是正确的

但我的问题是,我想通过鼠标和键盘键来控制这6个对象。如果我不想拖动它们,那么我可以通过键箭头移动它们

第二个问题是,当这两种方法完成时,如果我想按键移动一个对象,那么我会抓取第一个未“命中测试”的自由对象

我可以在AS3中做这些事情吗?这些项目中的解决方案非常奇怪,但我需要知道是否可行

这是我的拖放函数代码

package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.display.MovieClip;

public class Main extends MovieClip
{
    var xPos:int;
    var yPos:int;
    var errors:int;
    var wins:int;

    public function Main():void
    {
        addListeners(objectone,objecttwo,objectthree,objectfour,objectfive);
        errors = 1;
        wins = 1;
    }

    private function getPosition(target:Object):void
    {
        xPos = target.x;
        yPos = target.y;
    }

    private function dragObject(e:MouseEvent):void
    {
        info.text = "";
        getPosition(e.target);

        e.target.startDrag(true);
    }

    private function stopDragObject(e:MouseEvent):void
    {
        if (e.target.hitTestObject(getChildByName(e.target.name + "Target")))
        {
            e.target.x = getChildByName(e.target.name + "Target").x;
            e.target.y = getChildByName(e.target.name + "Target").y;
            info.text = "Bingo!";
            wins++;
        }
        else
        {
            e.target.x = xPos;
            e.target.y = yPos;
            bledy.text = "Wrong: " + errors++;

        }
        if(errors == 4) {
            errors = 1;
            gotoAndPlay(2);
        }

        if(wins == 9) {
            wins = 1;
            gotoAndStop(3);
        }
        e.target.stopDrag();
    }

    private function addListeners(... objects):void
    {
        for (var i:int = 0; i < objects.length; i++)
        {
            objects[i].addEventListener(MouseEvent.MOUSE_DOWN, dragObject);
            objects[i].addEventListener(MouseEvent.MOUSE_UP, stopDragObject);
        }
    }
}
}
包{
导入flash.display.Sprite;
导入flash.events.MouseEvent;
导入flash.events.KeyboardEvent;
导入flash.display.MovieClip;
公共类Main扩展了MovieClip
{
var-xPos:int;
var-yPos:int;
var错误:int;
var-wins:int;
公共函数Main():void
{
addListeners(objectone、Object2、Object3、Object4、Object5);
误差=1;
wins=1;
}
私有函数getPosition(目标:对象):void
{
xPos=target.x;
yPos=target.y;
}
私有函数dragObject(e:MouseeEvent):无效
{
info.text=“”;
getPosition(即目标);
e、 target.startDrag(true);
}
私有函数stopDragObject(e:MouseeEvent):void
{
if(e.target.hitTestObject(getChildByName(e.target.name+“target”))
{
e、 target.x=getChildByName(e.target.name+“target”).x;
e、 target.y=getChildByName(e.target.name+“target”).y;
info.text=“宾果!”;
wins++;
}
其他的
{
e、 target.x=xPos;
e、 target.y=yPos;
bledy.text=“错误:”+错误++;
}
如果(错误==4){
误差=1;
gotoAndPlay(2);
}
如果(wins==9){
wins=1;
gotoAndStop(3);
}
e、 target.stopDrag();
}
私有函数addListeners(…对象):void
{
for(变量i:int=0;i
请给我一些代码提示!
干杯

当然有可能。。。可以肯定的是,要实现这一目标,有几种选择

对于键盘交互,我建议您检查FocusManager类,这样您就可以学习如何使用tab在选定对象之间循环,并获得聚焦对象。 然后,侦听阶段键盘事件,以使用箭头移动对象


关于拖动以移动,如果使用Flex,请检查与DragManager类相关的示例,或者在flash中查找google教程。

hmmm我使用的是纯flash。我对flex一无所知。有密码提示吗?好的。您必须在要移动的对象上注册mouseDown事件,然后侦听stage.mouseMove和stage.mouseUu。鼠标向上拖动/移动。鼠标向上移动时,完成拖动并将侦听器移除到stage.mousemove和stage.mouseUp。