【问题标题】:AS3: drag by mouse or move by keyAS3:鼠标拖动或按键移动
【发布时间】:2012-07-25 08:38:25
【问题描述】:

我有 6 个具有拖放和 hitTest 功能的对象。很明显,当我将一个对象拖到他们的 hitTest 区域时,它是正确的。

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

第二个问题是,如果我想通过键移动一个对象,那么当这两种方法完成时,我会抓住第一个不是“hitTested”的空闲对象

我可以在 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);
        }
    }
}
}

请给我一些代码提示! 干杯!

【问题讨论】:

    标签: actionscript-3 drag-and-drop move


    【解决方案1】:

    当然这是可能的......并且肯定有多种选择可以实现这一目标。

    对于键盘交互,我建议您检查 FocusManager 类,这样您就可以了解如何使用选项卡在选定对象中循环,并获取焦点对象。 然后监听舞台键盘事件以使用箭头移动对象。

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

    【讨论】:

    • 嗯,我使用的是纯闪存。我对flex一无所知。有什么代码提示吗?
    • 好的。您必须在要移动的对象上注册 mouseDown 事件,然后监听 stage.mouseMove 和 stage.mouseUu。在鼠标上做拖动/移动。鼠标向上时,完成对 stage.mousemove 和 stage.mouseUp 的拖动和移除监听器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多