• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

emanuelvital

Colisões ao Conteúdo

3 mensagens neste tópico

A minha dúvida é a seguinte:

Em flash como sabemos existe  um método myMovieClip.hitTest(target) que verifica se há colisão entre as "bounding boxes" de dois movieclips e existe outro myMovieClip.hitTest(x, y, shapeFlag)  que detecta se existe colisão entre o que está desenhado dentro dos dois movieclips se o parâmetro shapeFlag for true. O meu problema é o seguinte: Tenho o seguinte código:

function testaColisao(objecto1:Object, objecto2:Object) {
	if (eval(objecto2).hitTest(getBounds(_root).xMax, eval(objecto1._y), true)) {
		return true;
	}
	if (eval(objecto2).hitTest(getBounds(_root).xMin, eval(objecto1._y), true)) {
		return true;
	}
	if (eval(objecto2).hitTest(eval(objecto1._x), getBounds(_root).yMax, true)) {
		return true;
	}
	if (eval(objecto2).hitTest(eval(objecto1._x), getBounds(_root).yMin, true)) {
		return true;
	}
}
             function activarLimites() {
	if (testaColisao(_root.actor.pes, _root.mapa.limite)) {
		trace("true");
	} else {
		trace("false");

}

A colisão é detectada cerca de 500px para a direita e 100px para baixo (supostamente onde não se encontra nada)

Não faço a mínima ideia de como resolver este problema e se fosse possível ajudem-me :bye2:

Estão aqui referências aos métodos hitTest

http://www.adobe.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary534.html

(Tenho um pressentimento que tem qualquer coisa a haver com o localToGlobal() que deve tar em falta.)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi.

Infelizmente ñ é possível verificar com precisão se duas formas irregulares se tocam.  :down:

Acho que interpretaste mal a documentação.

myMovieClip.hitTest(  x, y, shapeFlag  ) 

Este método serve para determinar se o conteúdo de um movieclip está a "tocar" num determinado ponto e não outro movieclip.

A colisão é detectada cerca de 500px para a direita e 100px para baixo (supostamente onde não se encontra nada)

Não percebo pq usas função eval, isso era usado em versões de Flash antigas para atribuir dinamicamente valores a variáveis.

Fazer eval(object2).hitTest é exactamente o mesmo que object2.hitTest.

O código que tens é o mesmo que:

//Se o teu object1 tiver como posição (100,20) e o teu Stage tiver como dimensões 800x600;
function testaColisao(objecto1:Object, objecto2:Object) {
	if (objecto2.hitTest(Stage.width, objecto1._y, true)) {
                        //Verifica se o objecto2 esta a tocar no ponto (800,20)
		return true;
	}
	if (objecto2.hitTest(0, objecto1._y, true)) {
                        //Verifica se o objecto2 esta a tocar no ponto (0,20)
		return true;
	}
	if (objecto2.hitTest(objecto1._x, Stage.height, true)) {
                        //Verifica se o objecto2 esta a tocar no ponto (100,600)
		return true;
	}
	if (objecto2.hitTest(objecto1._x, 0, true)) {
                        //Verifica se o objecto2 esta a tocar no ponto (100,0)
		return true;
	}
}
             
function activarLimites() {
	if (testaColisao(_root.actor.pes, _root.mapa.limite)) {
		trace("true");
	} else {
		trace("false");

}

A tua forma é muito irregular?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Este método serve para determinar se o conteúdo de um movieclip está a "tocar" num determinado ponto e não outro movieclip.

Pois, tinha uma ideia completamente errada do método. Assim já descobri uma maneira de resolver o problema. Esse código do testa colisão é de um tutorial não é meu, e vinha muito muito mais confuso :P

. Obrigado yarcub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora