Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   hitTestPoint без цикла проверки детей (http://www.flasher.ru/forum/showthread.php?t=176286)

dvrbear 06.03.2012 16:20

hitTestPoint без цикла проверки детей
 
на сцене к примеру есть мувик "pole"
в нем дофига других мувиков (мелких кружков)

проверка поставленна только на pole
Код AS3:

if(pole.hitTestPoint(mouseX, mouseY, true))

возможно ли отловить на кого именно из детей попадает мышь?
(чтоб к примеру удалить конкретный мувик из pole)

* без включения цикла - не проходясь проверкой по кадому чайлду
** и не включая проверку в сами чайлды

in4core 06.03.2012 17:12

MouseEvent.MOUSE_OVER # e.target

dvrbear 06.03.2012 17:27

а если объект не MOUSE?
к примеру у меня 10 других объектов
10 "стрел" на сцене
1 000 000 "яблок" внутри "pole"

опятьже интересует проверка столкновения "стрела" и "pole"
и уж потом только узнать с которым из "яблок" именно столкнулся

но так чтоб не проверять в цикле каждое "яблоко"

п.с. спасибо за быстрый ответ на счет мыши - тоже пригодится

in4core 06.03.2012 17:33

Цитата:

а если объект не MOUSE?
Вы о чем вообще? Вешайте событие на поле и ловите таргет, при наведении мышкой и будет ваш внутренний клип.

dvrbear 06.03.2012 17:40

ну не мышь будет участвовать в событие!

нет четкого задания я просто для себя пытаюсь понять - можно или нет

к примеру летает куча стрел и сшибает яблоки внутри "pole"
мышка вообще не причём

нужно узнать при хиттесте "pole" какого именно яблока каснулась стрела
если не возможно то я так понимаю придется включать цикл
на повторную проверку каждого из яблок

ну или же в яблоки писать проверку на столкновение со стрелами

просто хотел узнать можно ли обойтись без этих заморочек?

Wolsh 06.03.2012 17:44

DisplayObjectContainer#getObjectsUnderPoint()

dvrbear 06.03.2012 18:59

спасибо! то что надо!

правдо долгое время не мог исправит все баги
ведь метод выдавал самый нижний объект
и вместо MovieClip падал до самого низа до векторного Shape Object

а для таких как "Я" попытаюсь объяснить решение:

Код AS3:

var pt:Point = new Point(mouseX,mouseY);
// точку можно заменить любыми координатами
 
var objects:Array = pole.getObjectsUnderPoint(pt);
// заносятся в массив все конечные объекты попадающие под точку
// в моем случае на сцене друг под другом
// pole.a1 и pole.a2 - в массив записались входящие в а1 и а2 [Shape Object]
// чтобы добраться до a1 - objects[0].parent
 
pole.removeChild(DisplayObject(objects[0].parent));
// удаляется конкретный мувик внутри pole

БЛАГОДАРЮ in4core и Wolsh

TanaTiX 06.03.2012 19:20

А если objects[0].parent окажется другим шейпом или спрайтом?

dvrbear 06.03.2012 19:38

ну поделитесь как тогда поступить?
я подозреваю, что должна быть реализована проверка на тип объекта

если знаете как опишите пожалуйста данную проверку
ну и на всякий случай метод удаления со сцены объектов не являющихся MovieClip-ами

Wolsh 06.03.2012 20:42

Ну как-то так (с коленки):
Код AS3:

var p:DisplayObject;
for (var i:uint = 0; i < objects.length; i++)
{
        p = objects[i];
        while(p != null)
        {
                if(p is Apple)
                {
                        this.removeChild(p);
                        break;
                }
                p = p.parent;
        }
}



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

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