использовать actionscript 3.0 для определения класса символа, по которому щелкают - PullRequest
0 голосов
/ 24 августа 2009

Я пытаюсь создать простую программу перетаскивания Flash, в которой пользователь может перетаскивать рождественские украшения на дерево. Вместо того, чтобы перетаскивать орнамент один раз, мне нужна функция, чтобы при каждом нажатии на орнамент он добавлял новый орнамент того же класса на сцену, где щелкают орнамент. В настоящее время у меня это работает, но есть одна проблема. Это не динамично. Глядя в функцию «перетаскивания», я выбрал класс «Symbol31» в качестве украшения по умолчанию, которое добавляется. Вместо этого я хочу, чтобы ActionScript читал класс орнамента, по которому щелкнули, и добавлял этот класс, а не «Symbol31» каждый раз.

Пожалуйста, смотрите мой код ниже.

Спасибо

public class DragDrop extends MovieClip
{
    private var originalX:Number;
    private var originalY:Number;

    public function DragDrop()
    {
        originalX = this.x;
        originalY = this.y;
        this.addEventListener(MouseEvent.MOUSE_DOWN, drag);
    }

    private function drag(event:MouseEvent):void
    {
        if(event.target.x>Number(600))
        {
            var newOrnament:Symbol31 = new Symbol31();
            newOrnament.x=originalX;
            newOrnament.y=originalY;
            this.parent.addChild(newOrnament);
            newOrnament.startDrag();
            newOrnament.addEventListener(MouseEvent.MOUSE_UP, drop);
        }else{
            this.startDrag();
            this.parent.addChild(this);
            this.addEventListener(MouseEvent.MOUSE_UP, drop);
        }

    }

Ответы [ 3 ]

2 голосов
/ 24 августа 2009

Наиболее гибким решением было бы сначала получить имя класса, передав событие.target в getQualifiedClassName (часть flash.utils), а затем передав его в getDefinitionByName (также в flash.utils), чтобы превратить эту строку в ссылка на фактический класс. Создайте новый экземпляр этого класса и начинайте.

0 голосов
/ 24 августа 2009

Чтобы понять, что сказал Бранден Холл, код может выглядеть примерно так:

var ClassReference:Class = getDefinitionByName(getQualifiedClassName(e.target)) as Class;
var instance:DisplayObject = new ClassReference();
addChild(instance);
0 голосов
/ 24 августа 2009

Если у вас есть базовый класс для всех ваших украшений, можете ли вы сделать что-то вроде следующего?

var newOrnament = event.target as OrnamentBase
if (newOrnament != null)
{
    // your code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...