Ir para conteúdo
Fórum Script Brasil
  • 0

Hittest


§uiciDa£

Pergunta

tipo galera eu tenho esta classe

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
  cx = crash.x - player._x
  cy = crash.y - player._y 
  trace(cx);
  trace(cy);
  player._x -= cx;
  player._y -= cy;

mais 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

  • 0

tipo, eu vo detalha...

eu tenho q fazer um joguinho q é um carinha q anda pela casa, cidade etc ...

a rotina de movimentação do carinah ficou assim

function mPlayer() {
	if (andar) {
  if (Key.isDown(38)) {
  	vel += 1;
  	press = 1;
  } else if (Key.isDown(40)) {
  	vel -= .5;
  	press = 2;
  } else {
  	if (vel > 0) {
    vel -= .5;
  	}
  	if (vel < 0) {
    vel += .5;
  	}
  }
  if (Key.isDown(37)) {
  	angulo -= 7;
  }
  if (Key.isDown(39)) {
  	angulo += 7;
  }
  if (vel > velMax) {
  	vel = velMax;
  }
  if (vel < velMin) {
  	vel = velMin;
  }
	} 
	ang = (angulo * (Math.PI / 180));
	player._rotation = angulo - 90;
	a = player._rotation;
	player._x += vel * Math.cos(ang);
	player._y += vel * Math.sin(ang);
}

só q dae, eu não sei como fazer ele parar de se movimentar se ele bater na parede entende ??

tipo ele anda e bate na parede, como q eu faço pra q ele não atrave-se, isso deve ser logica de programação, mais eu estou com serios problemas com isso =P

se você não entendeu, eu t mando o .*fla...

vlw

t+

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...