Показать сообщение отдельно
Старый 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;
	}
}