Tengo un problema

][ ura ][ - 24/02/2008 01:07
Os comento, tengo el siguiente script (no es todo el código, pero para explicar mi problema es suficiente):
if(key, isdown(key. Right)){ tpersonaje._x += 13;} t.

If(key, isdown(key. Left)){ tpersonaje._x -= 13;}
t.

Es simplemente que suma 13 píxeles a la coordenada x o los resta, para que el personaje se mueva de izquierda a derecha. Hasta aquí bien.

Después está el problema de la detección de colisión, digamos que el personaje esta a 5 píxeles de colisionar y yo pulso la tecla right, y se suman 13 píxeles en la coordenada x y el personaje acaba atrabesando, 8 píxeles, el objeto con el que choca.

Lo que quiero es evitar que atraviese el objeto, solo se me ocurre que vaya píxel a píxel, alguna idea de cómo puedo solucionarlo?
Posdata: cuando salta me pasa lo mismo, solo que contra el suelo.
variables[/i].
VAR vely:number = 60.

Var gravedad:number = 20.

Var tierra:bolean = false;
.
salto[/i].
//mientras Jump = true se supone que el personaje está en el aire.
if(key, isdown(key. Up)){ tjump = true;}.
//el salto pierde fuerza poco a poco.

If(jump == true){ tpersonaje._y -= vely, tvely = vely * 0.9;}.

//si toca tierra y la fuerza del salto es inferior a la gravedad, significa que el.
//personaje ya no está en el aire y puede volver a saltar.
.

If(tierra == true && vely < gravedad){ tjump = false.

Personaje._y}
.

Decir también que el lenguaje es actionscript (flash).
Rompecabezas - 24/02/2008 11:57
Yo de programación más bien poco, pero diciéndole que si la distancia con el objeto es menos de 13 px no te deje avanzar? O que solo se desplace la distancia al objeto menos uno?
Ya te digo que no soy programador.
][ ura ][ - 24/02/2008 16:50

Yo de programación más bien poco, pero diciéndole que si la distancia con el objeto es menos de 13 px no te deje avanzar? O que solo se desplace la distancia al objeto menos uno?
Ya te digo que no soy programador.

Eso no lo había pensado, pero aun así quiero que sea más preciso como por ejemplo: alien hominid.
][ ura ][ - 01/03/2008 17:03
Consegui solucionar el problema más o menos, era algo así. While (tierra == false){. If (tierra == true || b >= 20){. Break;}.

Personaje += 1.

B++.
}.

Lo he simplificado, pero el problema es que en vez de utilizar funciones utilizo los frames de la línea de tiempo, por lo que dentro del bucle no puedo actualizar la variable tierra y sigo atravesando objetos, la solución, desgraciadamente empezar el juego desde el principio. Saludos.
Rompecabezas - 01/03/2008 17:51
Jodo vaya pua, al menos has aprendido algo nuevo.