Foros del Web » Creando para Internet » Flash y Actionscript »

Problema con hitTest

Estas en el tema de Problema con hitTest en el foro de Flash y Actionscript en Foros del Web. Hola! Tengo un problema con el hitTest en AS 2 y esperaba que me pudieran ayudar. Al hacer un hitTest en el MovieClip, solo detecta ...
  #1 (permalink)  
Antiguo 18/03/2010, 09:53
 
Fecha de Ingreso: noviembre-2009
Mensajes: 39
Antigüedad: 14 años, 5 meses
Puntos: 2
Problema con hitTest

Hola! Tengo un problema con el hitTest en AS 2 y esperaba que me pudieran ayudar.
Al hacer un hitTest en el MovieClip, solo detecta la "x" e "y" 0 del objeto. Es decir, el punto central del objeto. Estaba probando en un juego RPG que cuando colisiona con la pared en unos pixeles desplazados del centro del objeto. Por ejemplo, cuando pulso la flecha Izquierda va hacia la xzquierda y al hacer un hitTest con la pared (desplazando el punto x hasta lo que sería el contorno) el personaje se para. La estructura ya esta montada y funciona. El problema es el que se puede mostrar en este swf que he creado para que entendáis mejor lo que pasa porque no me sale con palabras (es un swf, no hay que controlar el personaje, va solo):

http://www.sergiosp.es/bola.swf

Se podría hacer de alguna forma que detectara toda el área, o algo para solucionarlo.

¡¡¡¡Muchas gracias!!!!
  #2 (permalink)  
Antiguo 18/03/2010, 10:21
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con hitTest

Hola.. mirare tu caso, pero no podia pasar sin felicitarte.. ojala todas la personas pudieran ser tan claros como tú con un ejemplo tan contundente... aguarda ver que sale... puedes poner que funcion tienes para detectar la colision con dicho punto?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 18/03/2010, 10:43
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con hitTest

bien.. no se como mueves a tu circulo o muñeco dentro del laberinto.. pero solo debes indicarle con un elemento enterFrame que detecte los bordes de un MC.. en este caso las paredes.. esto lo use con un laberinto.. usaras la funcion getBounds

en decir... seleccionas tu MC correspondiente al muñeco o lo que se que no deba pasar y le dices.
Código actionscript:
Ver original
  1. onClipEvent(enterFrame)
  2. {
  3. bordeMonigote = this.getBounds(_root);//posicion del borde de este clip
  4.  
  5. if(_root.pared.hitTest(bordeMonigote.xMin, _y, true))
  6. {
  7. _x+=3; // lo repelemos a 3px de la pared en este sentido
  8. }
  9.  
  10. if(_root.pared.hitTest(bordeMonigote.xMax, _y, true)){
  11. _x-=3;// lo repelemos a 3px de la pared en este sentido
  12. }
  13.  
  14. if(_root.pared.hitTest(_x, bordeMonigote.yMin, true)){
  15. _y+=3; // lo repelemos a 3px de la pared en este sentido
  16. }
  17.  
  18. if(_root.pared.hitTest(_x, bordeMonigote.yMax, true)){
  19. _y-=3;// lo repelemos a 3px de la pared en este sentido
  20. }
  21.  
  22. }//fin enterFrame

cabe destacar que.. si ya tienes un enterframe dentro del monigote o muñeco, puedes agregarle solo los if..

bordeMonigote es solo una variable local que detectara los bordes de este clip

y dentro de los IF, pared, es la instancia del obstaculo MC

espero te sirva
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 18/03/2010, 14:19
 
Fecha de Ingreso: noviembre-2009
Mensajes: 39
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Problema con hitTest

Gracias loncho_rojas por tu rápida respuesta!!
Pero con la función que me has comentado sucede el mismo problema que con las cordenadas. Nada, con las mismas. He ajustado el código al juego y sigue atravesando por las partes de arriba y de abajo del player el escenario.
Como también dijiste de poner aquí el código, aquí pongo el que utilizo:
Código:
velocidad = 7
margen = 15
margen1 = 20
onEnterFrame = function(){
	//Player1
	if (Key.isDown(Key.LEFT)){
		if (!this.fondo.hitTest(this.player._x-margen, this.player._y, true)) {
			this.player._x -= velocidad;
		}
	}else if (Key.isDown(Key.RIGHT)){
		if (!this.fondo.hitTest(this.player._x+margen, this.player._y, true)) {
			this.player._x += velocidad;
		}
	}
	else if (Key.isDown(Key.UP)){
		if (!this.fondo.hitTest(this.player._x, this.player._y-margen1, true)) {
			this.player._y -= velocidad;
		}
		
	}else if (Key.isDown(Key.DOWN)){
		if (!this.fondo.hitTest(this.player._x, this.player._y+margen1, true)) {
			this.player._y += velocidad;
		}
	}
}
player - Es el jugador
fondo - Es el laberinto, la pared


Espero que me podais ayudar.
¡¡¡¡¡¡Muchíiisimas gracias por tu respuesta, loncho_rojas!!!!!!!!!
  #5 (permalink)  
Antiguo 19/03/2010, 10:26
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con hitTest

ups.. mira... el problema con estos elementos es muy estrambotico.. dadoq ue a veces, si no usas un grosor suficiente, el elemento traspasa la pared y esas cosas.. por lo que es recomendable no hacer los circuitos tan delgados en relacion al jugador... y las paredes tan delgadas.

aca te pongo un ejemplo, MODIFICADO, claro, de algo que hice hace algunos años.. creo que te servira a ti y a otros para ver como actua el tema de las colisiones.... es un tanto chistoso y muy basico... solo debes ubicar al jugador donde quieras que inicie, y poner un punto e llegada, para que realice alguna accion...

[aqui esta el enlace] hecho con CS3

espero les sirva, aunque sea de mal ejemplo.. jaja.. saludos

PD: hay veces que el jugador tomara super poderes y traspasara las paredes, pero solo si lo hacen chocar de masiado
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 20/03/2010 a las 09:01
  #6 (permalink)  
Antiguo 20/03/2010, 08:17
 
Fecha de Ingreso: noviembre-2009
Mensajes: 39
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Problema con hitTest

¡¡¡¡Muchísimas gracias loncho_rojas!!!!
Pero no podría haber alguna forma de que no rebotara por la pared. Espero no parecer muy exigente con tantas pegas. ¡¡¡Pero gracias por tu ejemplo!!!
¡¡Gracias!!
  #7 (permalink)  
Antiguo 20/03/2010, 08:57
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con hitTest

para qeu no rebote.. la velocidad debe ser identica a la variable de rebote.. es decir.. si le decimos que se mueva a tal velocidad... por ejemplo a 10; cuando hacemos la comparacion de hitTest para verificar que toco la pared o que salio del area de la escena, tambien debe tener el mismo valor

por eso, en el ejemplo puse..

Vel= 5

Rebote = 6

lo cual hara que rebote cuando toque la pared.. si ambos estan en 5.. eso no sucedera... si la velocidad es mayor al rebote.. el objeto traspasara la pared..

aunque como te dije.. habra ocasiones que igual traspasara la pared.. sobre todo en las uniones de los vectores... donde hay que hacer calculos muy compejos para que no suceda eso.. no te lo paso dado que son clases que lo desarrollamos en el estudio y son tremendas lineas de codigo recicladas para otros juegos.. sepas perdonar este detalle... pero te pase lo basico... y por eso tambien te he observado para que tu objeto tenga un tamaño especifico.. y tus pasillos sean anchos en comparacion a tu objeto, y paredes... de tal forma que el usuario no intente acercarse demasiado a las paredes y resulte que lo traspase si querer... ten en cuenta que el usuario no sabe este detalle, y lo ultimo que hara sera querer chocar con las paredes del juego, y para evitar que eso suceda es buena tirada lo de los pasillo anchos o el clip mas pequeño... es psicologico y logico... suerte
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:10.