Доступ к экземплярам символов через Actionscript 3 во Flash - PullRequest
1 голос
/ 03 ноября 2011

Справочная информация:

  • Я использую Adobe Flash CS4
  • Я использую Actionscript 3
  • Я публикуюмой код в документ Adobe AIR, однако я не уверен, что это имеет отношение к данной конкретной проблеме.

  • Я создал два символа в библиотеке, большие прямоугольники и размещенные экземплярыиз них на сцене.

  • Я использую «getObjectsUnderPoint» для обнаружения объектов, под которыми щелкают мыши.
  • Я проверил, что getObjectsUnderPoint обнаруживает экземпляры символов путем отслеживания имен.

Проблема

  • Все отслеживаемые имена объектов, обнаруженных getObjectsUnderPoint, - instance1, instance2, instance3 и т. Д., Хотя я и назвал экземпляры,
  • Это вызывает проблему при попытке убедиться, что мышь была нажата в зоне, охватываемой одним из прямоугольников, так как я не могу проверить, является ли объект [i] .name == "leftbox", иимена instance1, instance2 и т. д. меняются по мере того, как я добавляю / удаляю вещи со сцены, поэтому я не хочу проверять наличие instance2 и instance3 (которые на данный момент представляют собой 2 ящика, которые я создал и которые называются «leftbox»)"и" rightbox "соответственно.

Вопрос:

Я что-то не так делаю при обнаружении имен? Как на самом деле обнаружить имена экземпляров, которыеЯ создал на сцене с помощью ActionScript в моем классе?

Вот мой код:

        var pt:Point = new Point(e.stageX, e.stageY);
        var objects:Array = getObjectsUnderPoint(pt);
        var action = 0;

        for(var i=0; i< objects.length; i++) {
            trace(objects[i].name);
        }

        if( objects.indexOf('left_box') >= 0 ){
            action = 1;

        }
        if(objects.indexOf('right_box') >= 0 ){
            action = 2;

        }

Ответы [ 3 ]

1 голос
/ 03 ноября 2011

Фахим Ахтер указал в комментарии, что я отслеживаю формы, а не объекты.Это привело меня к более точному поиску в гугле, чем мне удавалось создать.

Поиск привел меня в эту ветку форума: http://www.actionscript.org/forums/showthread.php3?t=231181

А в этом конкретном посте (номер 6) автор указал, что

"Оказывается, что getObjectsUnderPoint возвращает массив самого простого объекта - дочернего объекта, если это имеет смысл. Я смог решить часть проблемы, просто добавив .parent в конец моей переменной... "

Я добавил .parent к объекту и получил соответствующее имя:

        var pt:Point = new Point(e.stageX, e.stageY);
        var objects:Array = stage.getObjectsUnderPoint(pt);
        var action = 0;

        for(var i=0; i< objects.length; i++) {
            trace(objects[i].parent.name);
        }

        if( objects.indexOf('left_box') >= 0 ){
            action = 1;

        }
        if(objects.indexOf('right_box') >= 0 ){
            action = 2;

        }

Это решает мою проблему и, мы надеемся, приведет нас к лучшему пониманиюgetObjectsUnderPoint.

1 голос
/ 03 ноября 2011

Передавая ответ Фахима Ахтера,

Затем вы можете зацикливаться, чтобы получить родителя до тех пор, пока объект не станет видеоклипом

var o:DisplayObject=objects[i];
while(!(o.parent is MovieClip)) {
    o=o.parent;
}
var myMovieClip:MovieClip=o.parent;

Это должно дать вам фрагмент ролика в myMovieClip и когда выtrace myMovieClip.name, вы получите то, что ищете.

Это также будет работать для нескольких символов уровня (где один символ содержит другой)

1 голос
/ 03 ноября 2011

Напоминает мне цитату "У меня нет решения вашей проблемы, но я, конечно, восхищаюсь этой проблемой"

Если вы попытаетесь отследить (objects [i]), вы увидите, что функция getObjectsUnderPoint возвращает форму, а не MovieClip, поэтому вы никогда не получите искомое имя.

...