![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Тема выделена из http://flasher.ru/forum/showthread.php?t=175226
Чтобы не создавать новую тему, в чем ошибка?: public static function hitObject(obj1:MovieClip,obj2:MovieClip):Boolean { var bmpd1:BitmapData = new BitmapData(2000, 2000, true, 0x00ffffff); bmpd1.draw(obj1) var bmp1:Bitmap = new Bitmap(bmpd1); bmp1.x = obj1.x; bmp1.y = obj1.y; var bmpd2:BitmapData = new BitmapData(2000, 2000, true, 0x00ffffff); bmpd2.draw(obj2) var bmp2:Bitmap = new Bitmap(bmpd2); bmp2.x = obj2.x; bmp2.y = obj2.y; return bmpd1.hitTest(new Point(bmp1.x,bmp1.y), 255, bmpd2, new Point(bmp2.x,bmp2.y), 255) } Мне нужно узнать, пересекаются ли объекты. Последний раз редактировалось Wolsh; 15.02.2012 в 16:13. |
|
|||||
|
А в чем фишка вашего метода? Ну... кроме расходов памяти на две битмапы по 4 ! МегаПикселя ! ну и процессорного времени на обработку?
Параметры у вас MovieClip-ные, почему бы не использовать hitTestObject? Добавлено через 3 минуты ЗЫ: Еслы для вас решить проблему по вашему - дело принципа, то попробуйте кинуть на экран то, во что вы превращаете входные параметры и оценить вызуально, может своими глазами увидете в чем несоответствие желаемого и полученого... |
|
|||||
|
Регистрация: May 2008
Адрес: москва
Сообщений: 63
|
не надо заниматься изобретением велосипеда
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Цветкофф, где-то я вас "видел".
Я понял, что это можно сделать только через static function |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Чего бы вдруг. Можно и глобальную замутить. Вам говорят не об этом. О велосипедах.
__________________
Reality.getBounds(this); |
|
|||||
|
Говорят то о велосипедах, и правильно говорят что их изобретением не надо заниматься. Да вот только не о тех велосипедах говорят что надо. Цветкофф, речь идет не о пересечении "рамок" двух DisplayObject, а о BitmapData.
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Перефразируйте, ибо БитмапДата по-определению прямоугольник, массив. Рамка, как ни крути. Гораздо более "рамка", чем векторный мувиклип. А самое главное, БитмапДата генетически не может ни с кем пересекаться, так как не является дисплейным объектом и в принципе не имеет никаких координат. Выражайтесь пожалуйста точнее.
__________________
Reality.getBounds(this); |
|
|||||
|
Сорри за неточность.
Цитата:
Цитата:
Цитата:
Цитата:
В итоге вместо того, чтобы помочь человеку, получился ненужный совет сделать то, чего тс не хочет делать, и при том, не являющееся хорошим способом в конкретном случае. Добавлено через 5 минут А конкретный случай - это нахождение пересечения двух обьектов неправильной формы.
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну теперь ок.
Значит, путь такой. 1) Определяем, накладываются ли рамки объектов – т.е. стоит ли вообще огород городить. Если да, то 2) Определяем прямоугольник, принадлежащий обоим рамкам, то есть прямоугольник наложения. 3) Отрисовываем часть первого объекта, попадающую в эту область, в битмапдату. То же делаем со вторым объектом. 4) Загоняем альфаканал одного объекта в красный канал тестовой битмапдаты (области пересечения рамок). 5) Загоняем альфаканал второго объекта в зеленый канал 6) Проверяем битмапдату на наличие желтого цвета. Все. Добавлено через 24 минуты HardCoder скромно удалил свое сообщение, в котором справедливо поправил меня – после 3-го пункта можно тупо использовать BitmapData#hitTest() для сравнения двух битмапдат.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 15.02.2012 в 01:37. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|