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

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

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

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Узнать импульс в Nape

Добрый день!
Что-то пока не могу найти ответ на вопрос. Два мат. тела сталкиваются в nape, как получить значение импульса получившие эти мат. тела и координату столкновения?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ну там же есть свойства у InteractionCallback, который передается аргументом в обработчик столкновений
Код AS3:
private function onCollision(interaction:InteractionCallback):void {
    var firstBody:Body = interaction.int1.castBody; 
    var impulse:Vec3 = interation.arbiters.at(0).totalImpulse(firstBody); // получаем импульс первого тела
}
В общем как-то так. Не тестировал. Но, думаю идея ясна.
Это при условии, что столкновения проверяются между телами, а не между объектами shape
Ну а точку столкновения видимо только перебраться все арбитры. Тоже через interaction.arbiters

Старый 07.07.2015, 04:11
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 3  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Можно ли по подробнее, не совсем понял
Дело в том, что я пытаюсь сделать простенький ИИ поведения объектов (избегание и преследование, тему видел, но не хватило терпения разбираться в коде, решил сделать по своему, вроде ничего сложного нет), но загвоздка вышла, я использую body.velocity.* и каждые кадр меняю значение в зависимости от ситуации, но из-за этого сильно страдает физика столкновения, вот и хочу выдернуть вектор после столкновения и прибавлять к body.velocity.*
п.с. а может есть вариант проще?

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
Дело в том, что я пытаюсь сделать простенький ИИ поведения объектов (избегание и преследование, тему видел, но не хватило терпения разбираться в коде
Ну без этого ни как.

Что касается
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
но загвоздка вышла, я использую body.velocity.* и каждые кадр меняю значение в зависимости от ситуации, но из-за этого сильно страдает физика столкновения, вот и хочу выдернуть вектор после столкновения и прибавлять к body.velocity.*
п.с. а может есть вариант проще?
в каждом кадре добавляйте импульс
Код AS3:
body.applyImpulse( Vec2.get( vx, vy) );
__________________
return this...

Старый 07.07.2015, 13:56
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Цитата:
в каждом кадре добавляйте импульс
нето, мне нужно значение импульса от столкновения, а не задать свой

Старый 07.07.2015, 19:26
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 6  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Делюсь своими наработками, юзаю precollisionHandler для того чтобы, объекты могли проходить только под определённым углом и collisionHandler для отлова нужных столкновений
Код AS3:
package ru.jumper.model.providers
{
	import nape.callbacks.CbEvent;
	import nape.callbacks.CbType;
	import nape.callbacks.InteractionListener;
	import nape.callbacks.InteractionType;
	import nape.callbacks.ListenerList;
	import nape.callbacks.PreListener;
 
	public class CollisionsProvider
	{
		private var _listeners:ListenerList;
		public function CollisionsProvider(listeners:ListenerList)
		{
			_listeners = listeners;
		}
 
		public function bind(emmiter:CbType, target:CbType, callback:Function):CollisionsProvider
		{
			_listeners.add(
				new InteractionListener(
					CbEvent.BEGIN,
					InteractionType.COLLISION, 
					emmiter,
					target,
					callback
				)
			);
 
			return this;
		}
 
 
		public function sensor(emmiter:CbType, target:CbType, callback:Function):CollisionsProvider
		{
			_listeners.add(
				new PreListener(
					InteractionType.COLLISION,
					emmiter,
					target,
					callback,
					0,
					true
				)
			);
			return this;
		}
	}
}
Код AS3:
var cbType1:CbType	= new CbType();
var cbType2:CbType	= new CbType();
 
body.cbTypes.add(cbType1);
body.userData.normal = Vec2.fromPolar(1, Math.PI * 0.5); // задаем вектор указывающий вверх объекта
 
body2.cbTypes.add(cbType2);
body2.userData.normal = Vec2.fromPolar(1, Math.PI * 0.5);
 
 
_napeCollision = new CollisionsProvider( _space.listeners )
		.bind(cbType1,cbType2,collisionHandler)
		.sensor( cbType1, CbType.ANY_BODY, precollisionHandler);
Код AS3:
protected function collisionHandler(collision:InteractionCallback):void {
 
	// вектор столкновения			
	var v1:Vec2 = collision.arbiters.at(0).collisionArbiter.normal;
 
}
Код AS3:
protected function precollisionHandler(cb:PreCallback):PreFlag
{        			
	var v1:Vec2 = cb.arbiter.collisionArbiter.normal;
	var body:Body = cb.int1.castBody;
	var v2:Vec2 = body.userData.normal; 
 
	// Обработчик который пропускает или не пропускает два объекта, в зависимости от вектора столкновения между ними
 
	if (v1.dot(v2) <= 0)
		return PreFlag.IGNORE
	else
		return PreFlag.ACCEPT;
}
Пищи хватит, дальше под свои задачи.

Добавлено через 9 минут
собственно в CollisionsProvider можно заменить
Код AS3:
CbEvent.BEGIN
на
Код AS3:
CbEvent.END
и ловить данные после столкновений
__________________
return this...


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

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

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


 


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


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