AS3: перетаскивание мышью или перемещение клавишей

У меня есть 6 объектов с функцией drag'n'drop и hitTest. Очевидно, что когда я перетаскиваю один объект в их область hitTest, это правильно.

Но мой вопрос в том, что я хочу управлять этими 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);
        }
    }
}
}

Пожалуйста, дайте мне несколько советов по коду! Ваше здоровье!


person Kamil    schedule 25.07.2012    source источник


Ответы (1)


Наверняка это возможно... и наверняка есть несколько способов добиться этого.

Для взаимодействия с клавиатурой я предлагаю вам проверить класс FocusManager, чтобы вы могли научиться циклически перемещаться по выбранным объектам с помощью вкладки и получать сфокусированный объект. Затем слушайте события клавиатуры сцены, чтобы перемещать объект стрелками.

Что касается перетаскивания для перемещения, проверьте примеры, связанные с классом DragManager, если вы используете Flex, или поищите в Google учебные пособия по flash.

person Adrian Pirvulescu    schedule 25.07.2012
comment
хм, я использую чистую вспышку. я ничего не знаю о flex. Любые советы по коду? - person Kamil; 25.07.2012
comment
Ok. вам нужно зарегистрировать событие mouseDown для объектов, которые вы хотите переместить, а затем прослушивать stage.mouseMove и stage.mouseUu. При поднятии мыши выполните перетаскивание/перемещение. При наведении мыши завершите перетаскивание и удалите прослушиватель для stage.mousemove и stage.mouseUp. - person Adrian Pirvulescu; 02.08.2012