![]() |
hitTestPoint без цикла проверки детей
на сцене к примеру есть мувик "pole"
в нем дофига других мувиков (мелких кружков) проверка поставленна только на pole Код AS3:
(чтоб к примеру удалить конкретный мувик из pole) * без включения цикла - не проходясь проверкой по кадому чайлду ** и не включая проверку в сами чайлды |
MouseEvent.MOUSE_OVER # e.target
|
а если объект не MOUSE?
к примеру у меня 10 других объектов 10 "стрел" на сцене 1 000 000 "яблок" внутри "pole" опятьже интересует проверка столкновения "стрела" и "pole" и уж потом только узнать с которым из "яблок" именно столкнулся но так чтоб не проверять в цикле каждое "яблоко" п.с. спасибо за быстрый ответ на счет мыши - тоже пригодится |
Цитата:
|
ну не мышь будет участвовать в событие!
нет четкого задания я просто для себя пытаюсь понять - можно или нет к примеру летает куча стрел и сшибает яблоки внутри "pole" мышка вообще не причём нужно узнать при хиттесте "pole" какого именно яблока каснулась стрела если не возможно то я так понимаю придется включать цикл на повторную проверку каждого из яблок ну или же в яблоки писать проверку на столкновение со стрелами просто хотел узнать можно ли обойтись без этих заморочек? |
DisplayObjectContainer#getObjectsUnderPoint()
|
спасибо! то что надо!
правдо долгое время не мог исправит все баги ведь метод выдавал самый нижний объект и вместо MovieClip падал до самого низа до векторного Shape Object а для таких как "Я" попытаюсь объяснить решение: Код AS3:
|
А если objects[0].parent окажется другим шейпом или спрайтом?
|
ну поделитесь как тогда поступить?
я подозреваю, что должна быть реализована проверка на тип объекта если знаете как опишите пожалуйста данную проверку ну и на всякий случай метод удаления со сцены объектов не являющихся MovieClip-ами |
Ну как-то так (с коленки):
Код AS3:
|
Wolsh, я бы сюда еще добавил проверку на общий для яблок контейнер и по его достижении сбрасывал бы цикл. Хотя целесообразность зависит от его (контейнера) глубины относительно stage.
Код AS3:
|
а что, созданный в ручную на сцене мувик в который вложены (програмно или вручную) другие мувики - автоматически приобретает тип DisplayObjectContainer ?
|
MovieClip происходит от DisplayObjectContainer, поэтому все условия сохраняются, при этом мы не пользуемся не нужным функционалом спрайтов/мувиклипов.
|
почемуто на оба сравнения выдает false :(
Код AS3:
|
Код AS3:
|
ага пасиб
тоже какраз такой ответ нашел а то както страно было объявлять переменную чтоб потом с ней сравнивать да и parent - полюбому должен являться DisplayObjectContainer кстатии объявить без ошибок получилось только так странно почему DisplayObjectContainer не хочет прописываться по принципу MovieClip Код AS3:
|
Тут поможет приведение типов.
В данном коде cont - он уже существует, я его написал, что бы показать что он есть и кто таков. Присвойте данной переменной ваш контейнер, где все яблоки находятся. |
Вопрос скорее, у какого контейнера вызывается метод getObjectsUnderPoint() :)
Что-то мне подсказывает, что сам контейнер не может оказаться в списке своих детей под точкой. Так что я бы вызывал этот метод у нужного контейнера, а не у рута и не у стейджа, и не включал эту избыточную проверку. Но тогда точку надо переводить в локаль контейнера, а это тоже адский труд :) |
вы совершенно правы
в список попадают дети конкретно указанного объекта тоесть к примеру если я храню яблоки в pole.derevo а под derevo пападает соседний объект pole.yashik то указав Код AS3:
все очень здорово, удобно и грамотно работает также хочу заметить что стартовые точки объектов должны совпадать (0,0) илиже потребуется делать перерасчет проверяемой точки Код AS3:
|
Код AS3:
|
| Часовой пояс GMT +4, время: 04:45. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.