Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.05.2010, 22:45
seraphim вне форума Посмотреть профиль Отправить личное сообщение для seraphim Найти все сообщения от seraphim
  № 1  
Ответить с цитированием
seraphim

Регистрация: Apr 2010
Сообщений: 12
По умолчанию Проверка столкновений объектов произвольной формы

задался задачей проверки на пересечение или касание двух спрайтов/мувиков/шейпов произвольной формы.
Неужели для проверки надо будет использовать hitTestPoint()? т.к. hitTestObject выдает:
Код AS3:
package {
	import flash.display.*;
 
	public class Hit extends Sprite {
		public function Hit() {
			var shape1:Shape = new Shape();
			shape1.graphics.beginFill(0xFF0000);
			shape1.graphics.drawCircle(100,100,100);
			shape1.graphics.endFill();
			addChild(shape1);
 
			var shape2:Shape = new Shape();
			shape2.graphics.beginFill(0xFFF000);
			shape2.graphics.drawRect(180,180,100,100);
			shape2.graphics.endFill();
			addChild(shape2);
 
			trace(shape1.hitTestObject(shape2));
		}
	}
}
"true" хотя круг и квадрат визуально не пересекаются. Естественно необходимо проверять пересечение более сложных по форме спрайтов (не правильной формы).

Есть ли способ проверять столкновения с наименьшими затратами от процессора?
Изображения
 


Последний раз редактировалось seraphim; 03.05.2010 в 22:50.
Старый 03.05.2010, 22:58
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Да. Пользуйтесь математикой модели.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 03.05.2010, 23:32
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 3  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
hitTestObject возвращает true в том случае, если пересекаются габаритные прямоугольники объектов.
Нужно получить область пересечения (еще один прямоугольник), внутри которой проверять каждую точку на пересечение с обоими объектами (то есть если точка пересекается и с тем, и с другим - значит оба объекта есть в этой точке - значит они пересекаются)
Однако это очень грубо и тут есть что оптимизировать
__________________
...вселенская грусть

Старый 04.05.2010, 03:13
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 4  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
короче, когда увидишь что hitTestObject возвращает true, делаешь следующее:
1)находишь bounds обоих объектов относительно чегото одного. Находим координаты центров двух объектов и смотрим где первый относительно другого. Если с верху и с лева (как на рисунке), находим правый край первого и левый второго, также нижний первого и верхний второго. таким образом мы можем определить зону где теоретически могло быть столкновение для каждого объекта.

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


3)Таким образом мы получили 2 массива с поинтами в цикле просто проверяем на совпадения. Если границы не имеют общих точек - объекты не пересекаются и нааборот.

Как видите - ничего невероятного.

Старый 04.05.2010, 03:24
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 5  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
http://noregret.org/tutor/n/collision/#2.2
На здоровье.
__________________
тонкий тролль, осеянный благодатью

Старый 04.05.2010, 03:40
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 6  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
http://www.tink.ws/blog/as-30-hittest/

Старый 05.05.2010, 00:50
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
тоже штоле кинуть линк ) http://www.coreyoneil.com/portfolio/index.php?project=5
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 05.05.2010, 14:54
seraphim вне форума Посмотреть профиль Отправить личное сообщение для seraphim Найти все сообщения от seraphim
  № 8  
Ответить с цитированием
seraphim

Регистрация: Apr 2010
Сообщений: 12
спасибо огромное за ответы.... будем тестить ))

Старый 05.05.2010, 14:57
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
А ещё можно попиксельный хиттест битмапдатами ) *на правах разнообразия*

UUps, dimarik дал двиг именно на пиксельную )


Последний раз редактировалось Psycho Tiger; 05.05.2010 в 15:01.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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