Nape. Ещё один пример с арбитрами.

govnoproger.ru > as3 > Nape. Ещё один пример с арбитрами.

Итак. Допустим вам нужны некоторые специфические события, ну например:

  • Мне нужно узнать когда тело совершило первое столкновение с другим — больше ничего.
  • Мне нужно узнать сталкивается ли тело с другим телом.
  • Узнать когда тело перестало сталкиваться с другим телом.
Речь идёт о новой версии nape.


Сталкивается ли тело с другим телом можно отследить, так:

function checkCol(b1,b2):Boolean
{
	Body1=b1;
	Body2=b2;

	for(var i = 0; i<Body1.arbiters.length; i++)
	{
		var arb:Arbiter = Body1.arbiters.at(i);
								
		if(arb.isКакой-тоТамАрбитр() && (arb.body1==Player.Body1||arb.body2==Body2) )
		{
			trace("столкновения");
			return true;
		}
	}
	return false;
}

В примере не используется else тк в случае НЕ столкновения арбитр будет иметь нулевую длину!

Узнать когда тело совершило первое столкновение с другим можно также как и в примере выше, только добавив переменную. Например если она true то это первое столкновение. После этого она примет false.

Узнать когда тело перестало сталкиваться с другим телом немножко сложнее.
Дело в том что если мы сделаем решение в лоб, то событий протрэсится несколько, а нам, напомню нужно лишь одно! Самый первый отрыв от тела. Остальные трэйсы нам не к чему.

Поэтому :


var Collide=false; //сталкиваются ли сейчас
var hasCollide=false; //имели столкновение ранее
var noFirstCol=false; // происходило ли первое столкновение

function someFun()
{
	Collide=false; 
			
	for(var i = 0; i<Body.arbiters.length; i++)
	{
		var arb:Arbiter = Box.arbiters.at(i);
							
		if(arb.isSensorArbiter() && (arb.body1==somebody||arb.body2==somebody) )
		{
			Collide=true;
			hasCollide=true; 
		}
	}
			
			
	if ( (hasCollide==true) && (Collide==false)&&(noFirstCol==false) )
	{
		//
		trace("тела перестали сталкиваться");
		hasCollide==false;
		noFirstCol=true;
	}
}

Смотрим особенно внимательно последний пример.

Рекомендую:

24.8.2011 | последняя редакция: 24.08.2011 |