Форум 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)

TanaTiX 06.03.2012 22:47

Wolsh, я бы сюда еще добавил проверку на общий для яблок контейнер и по его достижении сбрасывал бы цикл. Хотя целесообразность зависит от его (контейнера) глубины относительно stage.
Код AS3:

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


dvrbear 06.03.2012 22:54

а что, созданный в ручную на сцене мувик в который вложены (програмно или вручную) другие мувики - автоматически приобретает тип DisplayObjectContainer ?

TanaTiX 06.03.2012 22:59

MovieClip происходит от DisplayObjectContainer, поэтому все условия сохраняются, при этом мы не пользуемся не нужным функционалом спрайтов/мувиклипов.

dvrbear 06.03.2012 23:07

почемуто на оба сравнения выдает false :(

Код AS3:

//var cont:DisplayObjectContainer;
//var cont:MovieClip;
trace(pole == cont);


MikroAcse 06.03.2012 23:15

Код AS3:

trace(pole is DisplayObjectContainer, pole is MovieClip);


dvrbear 06.03.2012 23:26

ага пасиб
тоже какраз такой ответ нашел

а то както страно было объявлять
переменную чтоб потом с ней сравнивать
да и parent - полюбому должен являться DisplayObjectContainer

кстатии объявить без ошибок получилось только так
странно почему DisplayObjectContainer не хочет прописываться по принципу MovieClip

Код AS3:

//public var cont:DisplayObjectContainer;
//public var cont:MovieClip = new MovieClip();


TanaTiX 06.03.2012 23:29

Тут поможет приведение типов.
В данном коде cont - он уже существует, я его написал, что бы показать что он есть и кто таков. Присвойте данной переменной ваш контейнер, где все яблоки находятся.

Wolsh 07.03.2012 00:08

Вопрос скорее, у какого контейнера вызывается метод getObjectsUnderPoint() :)
Что-то мне подсказывает, что сам контейнер не может оказаться в списке своих детей под точкой.
Так что я бы вызывал этот метод у нужного контейнера, а не у рута и не у стейджа, и не включал эту избыточную проверку. Но тогда точку надо переводить в локаль контейнера, а это тоже адский труд :)

dvrbear 07.03.2012 15:36

вы совершенно правы
в список попадают дети конкретно указанного объекта

тоесть к примеру если я храню яблоки в pole.derevo
а под derevo пападает соседний объект pole.yashik

то указав
Код AS3:

var objects:Array = pole.derevo.getObjectsUnderPoint(pt);

в список попадут только яблоки а ящик не затронется
все очень здорово, удобно и грамотно работает

также хочу заметить что стартовые точки объектов должны совпадать (0,0)
илиже потребуется делать перерасчет проверяемой точки
Код AS3:

var pt:Point = new Point(mouseX,mouseY);


Wolsh 07.03.2012 20:05

Код AS3:

var pt:Point = pole.derevo.globalToLocal( new Point(stageX, stageY) ); // stageX, stageY - глобальные координаты



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

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