Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   dropTarget возвращает null или как сделать "корзину" (http://www.flasher.ru/forum/showthread.php?t=169886)

A1R1NG 14.10.2011 00:27

dropTarget возвращает null или как сделать "корзину"
 
есть контейнер в виде мувиклипа "mainPlate", на нём лежат дети мувиклипы аля
Код AS3:

var element:Element = new Element;
mainPlate_.addChild(element);

у каждого element есть свой .id

как узнать id "dropTarget`а" (куда положили) при перетаскивании одного element на другой?

делаю так:
Код AS3:

element.stopDrag();
var id2:int = (element.dropTarget as Element).id;

element.dropTarget as Element возвращает null
пробовал element.dropTarget.id - тоже null

можно и hitTest, но как я понял, он только для Sprit`ов..

подскажите нубасу = )

Wolsh 14.10.2011 00:43

Привет))
Дело в том что dropTarget возвращает самый глубоковложенный объект, то есть в твоем случае не Element, а то что в нем в самом конце списка отображения, скорее всего [Object Shape] (можешь проверить трейсом, трейси просто element.dropTarget).
Соответственно, чтобы получить id Элемента, надо подняться на его уровень. Нпример, в том файле что я показывал, работает такая строчка в collisionControl:
Код AS3:

trace((_dragged.dropTarget.parent.parent as Element).id)


A1R1NG 14.10.2011 01:56

ааа) очередной раз выручаешь!)

marat_sa 14.10.2011 02:09

Что есть collisionControl?
parent - разве не есть зло, тем более 2 раза?

in4core 14.10.2011 02:13

Цитата:

parent - разве не есть зло
Был бы зло = его бы небыло вообще. Что 2 раза зло это понятно. А вот 1 раз вполне сносная картина.
Представь ситуацию : есть некий класс в который зашивается по ходу хеш мапа, зашивается так себе не спеша... А класс этот некий контейнер в котором находятся кнопки управления и т.д. Вот по нажатию кнопки нужно заюзать часть хеш мапы. ... и имеем e.target.parent as SuperClass/
Реализация ни к черту верно? Когда такое может быть использовано : например есть у вас граф либа ( векторная ) созданная в IDE - вот там же в ide и создался графический контейнер в котором и лежат наши красивые элементы управления

Wolsh 14.10.2011 02:19

Безусловное зло! Это иллюстрация, где прячется Element. Естественно, в данном случае это сильносвязный быдлокод (заметьте, тут даже проверок не делается, так как это – не решение, а подсказка где копать). Мне кстати тоже будет интересно услышать кошерные варианты решения данной ситуации. Вкратце опишу еще раз - есть на экране несколько экземпляров класса Element, расширяющего Спрайт. В них находятся мувиклипы (библиотечных подклассов). Element'ы таскаются мышкой и опускаются друг на друга. В обработчике отпускания мыши выполняется stopDrag() и надо получить ссылку на экземпляр класса Element.
Свойство dropTarget указывает на какую-то графику в библиотечном клипе, который внутри этого экземпляра Element (ну или на что-то совсем левое, если бросили мимо).

marat_sa 14.10.2011 03:04

Ну да, как вариант дополнительно можно в рекурсии тогда вверх идти, проверяя каждого родителя на is Element вместо дабл парента.

Wolsh 14.10.2011 03:04

А вообще это всё бессмысленное занятие – dropTarget возвращает объект, оказавшийся не под брошенным объектом, а оказавшийся под курсором в момент отпускания кнопки мыши.
Для вашей задачи нужна другая система проверки – проверка пересечений самих объектов.

GBee 14.10.2011 08:29

mouseChildren = false не поможет?

A1R1NG 14.10.2011 22:15

ну dropTarget действительно не подходит здесь.(( а что тогда?


Часовой пояс GMT +4, время: 09:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.