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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Apr 2010
Сообщений: 28
Cool Реализовать адекватное разрушение объектов в Nape.

Доброго времени суток.
Задача следующая:
есть телоА, которое летит в телоБ. При определенном импульсе/силе столкновения телоБ "разрушается" (просто удаляется). При этом телоА получает обратный импульс, достаточный для разрушения телаБ и летит дальше с уменьшенной скоростью.
Проблемы: я облазил весь гугл и ничего толком по сабжу не нашел. Все пути ведут сюда:
http://deltaluca.me.uk/forum/index.p...8337/#msg_4903

Мысли: я так понимаю, что надо в PreCollisionListener'е получить импульс столкновения, понять, достаточен ли он для уничтожения телаБ. Если да - то дать обратный импульс телуА и вернуть PreFlag.IGNORE, иначе - ничего не делать. Но вот КАК узнать этот импульс - голова кругом идет..

Буду благодарен любым советам..

Старый 21.09.2013, 11:02
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 2  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
если вы будете вычислять импульс в обработчике, то смысл физ двига пропадает как таковой ибо он уже сам все посчитал...чтобы тело не изменило вектор движения у него должно быть или масса или скорость много больше другого тела.
в любом случае у тела есть арбитры столкновений...вот в нем смотрите
http://napephys.com/docs/types/nape/...onArbiter.html
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

Регистрация: Apr 2010
Сообщений: 28
Спасибо за отклик!
Проблему решил, используя первую рекомендацию по указанной мной же ссылке Когда открывал тему - был не в адеквате, поэтому не вник.
На всякий случай оставлю решение, которое мне подошло. В precollisionlistener:

Код AS3:
if (obj1 is DestructableActor)
{
	var impactImpulse:Vec2 = obj2.body.velocity.add(callback.arbiter.collisionArbiter.contacts.at(0).position.sub(obj2.body.position).perp().mul(obj2.body.angularVel)).mul(obj2.body.mass);
	var impactResult:Number = (obj1 as DestructableActor).strike(impactImpulse) / obj2.body.mass;
	if (impactResult > 0)
	{
		var xdy:Number = obj2.body.velocity.y / obj2.body.velocity.x;
		var otdachaX:Number = Math.sqrt(impactResult * impactResult / (1 + xdy * xdy));
		var otdacha:Vec2 = Vec2.get( -otdachaX * obj2.body.velocity.x / Math.abs(obj2.body.velocity.x), - otdachaX * xdy * obj2.body.velocity.y / Math.abs(obj2.body.velocity.y));
		obj2.body.applyImpulse(otdacha, callback.arbiter.collisionArbiter.contacts.at(0).position);
		return PreFlag.IGNORE;
	}
 
}
if (obj2 is DestructableActor)
{
	var impactImpulse2:Vec2 = obj2.body.velocity.add(callback.arbiter.collisionArbiter.contacts.at(0).position.sub(obj2.body.position).perp().mul(obj2.body.angularVel)).mul(obj2.body.mass);
	var impactResult2:Number = (obj2 as DestructableActor).strike(impactImpulse2) / obj1.body.mass;
	if (impactResult2 > 0)
	{
		var xdy2:Number = obj1.body.velocity.y / obj1.body.velocity.x;
		var otdachaX2:Number = Math.sqrt(impactResult2 * impactResult2 / (1 + xdy2 * xdy2));
		var otdacha2:Vec2 = Vec2.get( -otdachaX2 * obj1.body.velocity.x / Math.abs(obj1.body.velocity.x), - otdachaX2 * xdy2 * obj1.body.velocity.y / Math.abs(obj1.body.velocity.y));
		obj1.body.applyImpulse(otdacha2, callback.arbiter.collisionArbiter.contacts.at(0).position);
		return PreFlag.IGNORE;
	}
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
nape , импульс , разрушение , Столкновения

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

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


 


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


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