Tengo un problema

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.
VAR vely:number = 60.

Var gravedad:number = 20.

Var tierra:bolean = false;.
salto.
//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).

Ver más sobre el tema y los comentarios en el foro