Nape. Ещё один пример с арбитрами.
govnoproger.ru > as3 >
Итак. Допустим вам нужны некоторые специфические события, ну например:
- Мне нужно узнать когда тело совершило первое столкновение с другим — больше ничего.
- Мне нужно узнать сталкивается ли тело с другим телом.
- Узнать когда тело перестало сталкиваться с другим телом.
Речь идёт о новой версии 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; } }
Смотрим особенно внимательно последний пример.