import flash.display.BitmapData;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Rectangle;
class CollisionDetection {
static public function checkForCollision(p_clip1:MovieClip,p_clip2:MovieClip,p_alphaTolerance:Number,p_scope:MovieClip):Rectangle {
if (p_alphaTolerance == undefined) { p_alphaTolerance = 255; }
if (p_scope == undefined) { p_scope = _root; }
var bounds1:Object = p_clip1.getBounds(p_scope);
var bounds2:Object = p_clip2.getBounds(p_scope);
if (((bounds1.xMax < bounds2.xMin) || (bounds2.xMax < bounds1.xMin)) || ((bounds1.yMax < bounds2.yMin) || (bounds2.yMax < bounds1.yMin)) ) {
return null;
}
var bounds:Object = {};
bounds.xMin = Math.max(bounds1.xMin,bounds2.xMin);
bounds.xMax = Math.min(bounds1.xMax,bounds2.xMax);
bounds.yMin = Math.max(bounds1.yMin,bounds2.yMin);
bounds.yMax = Math.min(bounds1.yMax,bounds2.yMax);
var img:BitmapData = new BitmapData(bounds.xMax-bounds.xMin,bounds.yMax-bounds.yMin,false);
var mat:Matrix = p_clip1.transform.matrix;
mat.tx = p_clip1._x-bounds.xMin;
mat.ty = p_clip1._y-bounds.yMin;
img.draw(p_clip1,mat, new ColorTransform(1,1,1,1,255,-255,-255,p_alphaTolerance));
mat = p_clip2.transform.matrix;
mat.tx = p_clip2._x-bounds.xMin;
mat.ty = p_clip2._y-bounds.yMin;
img.draw(p_clip2,mat, new ColorTransform(1,1,1,1,255,255,255,p_alphaTolerance),"difference");
var intersection:Rectangle = img.getColorBoundsRect(0xFFFFFFFF,0xFF00FFFF);
if (intersection.width == 0) { return null; }
intersection.x += bounds.xMin;
intersection.y += bounds.yMin;
return intersection;
}
}
ela checa se ouve uma intersecção entre formas não regulares, e então montei isso
function checkCollision() {
var crash:Rectangle = CollisionDetection.checkForCollision(casa,player,120);
if (crash) {
col = true;
}else{
col = false;
bat1 = "não bateu";
}
}
ou seja ele chjeca se o player(bolinha preta) =P, colidiu com as paredes de uma casa, mais como eu faço pra se ele colidir de frente o x dele diminua 1 por exemlo, se colidir de costas, o x dele aumente 1 se colidir do lado esquerdo o y aumente... etc
tipo, a funçao ccrash dai retorna td, x, y, width, só q num consegui fazer nd com iso ainda...
tentei criar esta funçao
Pergunta
§uiciDa£
tipo galera eu tenho esta classe
ela checa se ouve uma intersecção entre formas não regulares, e então montei isso ou seja ele chjeca se o player(bolinha preta) =P, colidiu com as paredes de uma casa, mais como eu faço pra se ele colidir de frente o x dele diminua 1 por exemlo, se colidir de costas, o x dele aumente 1 se colidir do lado esquerdo o y aumente... etc tipo, a funçao ccrash dai retorna td, x, y, width, só q num consegui fazer nd com iso ainda... tentei criar esta funçaomais também não funcionou, algm tem alguma ideia ???
t++
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.