Развитие игровой вспышки
Текущее время: Чт дек 14, 2017 9:12 pm

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: starling hitTest
СообщениеДобавлено: Ср июл 26, 2017 12:50 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 174
Пришла в голову шальная мысль, попробовать переписать эту функцию, вызывается она довольно часто для игровых объектов, которых у меня в игре много и они в свою очередь состоят из массы картинок, при этом само "пятно контакта" может отличатся в меньшую сторону от картинки.

вот изначальная функция.

Код:
/** @inheritDoc */
        public override function hitTest(localPoint:Point):DisplayObject
        {
            if (!visible || !touchable || !hitTestMask(localPoint)) return null;

            var target:DisplayObject = null;
            var localX:Number = localPoint.x;
            var localY:Number = localPoint.y;
            var numChildren:int = _children.length;

            for (var i:int = numChildren - 1; i >= 0; --i) // front to back!
            {
                var child:DisplayObject = _children[i];
                if (child.isMask) continue;

                sHelperMatrix.copyFrom(child.transformationMatrix);
                sHelperMatrix.invert();

                MatrixUtil.transformCoords(sHelperMatrix, localX, localY, sHelperPoint);
                target = child.hitTest(sHelperPoint);

                if (target) return _touchGroup ? this : target;
            }

            return null;
        }


по идее ничего сложного
у меня есть в объекте который должен понимать что в него тыкают x,y смещение от этих dx, dy, и ширина ddx с высотой ddy и если бы координаты приходили бы не относительные код бы мог выглядеть так:


Код:
/** @inheritDoc */
        public override function hitTest(localPoint:Point):DisplayObject
        {
            if (!visible || !touchable) return null;

            var localX:Number = localPoint.x;
            var localY:Number = localPoint.y;

if(localX > x + dx && localX< x+dx+ddx && localY > y + dy && localY<y+dy+ddy) return this;

            return null;
        }


но так не работает, потому что координаты приходящие в эту функцию для этого объекта нуждаются к приведению, а как это сделать не знаю. Пробовал local2Global не помогло, возможно я это делал не верно, к сожалению за 2 с небольшим года занятий флеш я так и не понял эту систему глобальных и локальных координат. Буду благодарен если подскажете как решить данную задачу.


Вернуться наверх
 Профиль Отправить e-mail  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB