Proyectos => IndieLib => Mensaje iniciado por: pioj en 18 de Marzo de 2008, 05:17:46 pm

Título: Problemas con el GetPosX() y GetPosY()...
Publicado por: pioj en 18 de Marzo de 2008, 05:17:46 pm
Nas...


Me he basado en el ejemplo del Input (mover la mariquita...)

si le doy un valor constante, lease esto
Código: [Seleccionar]
mBloky.SetPosition ( 500 + mMis , 0,0);
se mueve correctamente, de 1 en 1 pixeles..

PERO si lo cambio por esto
Código: [Seleccionar]
short blx = mBloky.GetPosX();
mBloky.SetPosition ( blx + mMis , 0,0);

ó esto
Código: [Seleccionar]
mBloky.SetPosition ( mBloky.GetPosX() + mMis , 0,0);
se desplaza demasiado rapido, como si cogiera el valor acumulativo (500+500+500..etc..)

Alguien los está usando actualmente? Los habéis probado tambien? Os pasa lo mismo? Cómo lo habéis resuelto?


La otra pregunta es:

¿Existe algun método o funcion, además del IsKeyPressed, para controlar cuando hacemos una pulsación simple (no mantener pulsada) del teclado?

P.Ej. : KeyHit, y KeyDown..
Título: Problemas con el GetPosX() y GetPosY()...
Publicado por: Loover en 18 de Marzo de 2008, 06:30:33 pm
Código: [Seleccionar]
short blx = mBloky.GetPosX();
mBloky.SetPosition ( blx + mMis , 0,0);


No uses short. Usa los valores que espere cada función. En este caso son ints.

Código: [Seleccionar]
mBloky.SetPosition ( mBloky.GetPosX() + mMis , 0,0);

Claro que saldrá acumulativo. ¡Estás sumándole a la posición x de la entidad un valor y asignándoselo! De tal manera, conforme avances hacia la derecha, irá subiendo exponencialmente. La forma correcta sería:

[inicializas al valor que quieras, la posición inicial, vamos]
int mPosX = 0, mPosY = 0;

[dentro de tu bucle]
[ modificas mPosX y mPosY como te plazca, por ejemplo sumándole dos unidades a cada uno cuando pulses la tecla derecha]
mPosX = mPosX + 2;
mPosY = mPosY + 2;

[pones la entidad en su sitio]

mEntidad.SetPos (mPosX, mPosY, z);

Pero ojo, todo eso anterior, iría a diferente velocidad en según que ordenador (dependiendo de los fps).

Para hacerlo dependiente del tiempo, puedes usar el método mI->Render->GetLast() que devuelve lo que ha durado el último frame.

Con esto puedes hacer algo así:
float mSpeed = 20.0f;
mPosX = mPosX + GetLast() * mSpeed;

De esa forma, tu entidad se movería a la misma velocidad en cualquier ordenador, claro, que en unos se dibujaría de forma "más fluída" (más fps) que en otros.

Citar
¿Existe algun método o funcion, además del IsKeyPressed, para controlar cuando hacemos una pulsación simple (no mantener pulsada) del teclado?


Sí, OnKeyPress. Por favor, lee la Api Reference para ese tipo de preguntas ;).
Título: Problemas con el GetPosX() y GetPosY()...
Publicado por: pioj en 18 de Marzo de 2008, 08:24:46 pm
entonces, este comando está erroneamente llamado..

Fijar una posicion es decirle que SIEMPRE esté en esa coordenada (de ahi mi fallo al suponer que sería así..), cuando realmente lo que haces es un "move" relativo a donde ya está...

Vamos, entiendo que es eso..

btw, thx por lo del teclado, a veces me lio con tanta doc..

UPDATE:

Uaaah!!  Qué pintaza está cogiendo ya esto.. jejeje..

Thx , Loover, peazo soporte que nos das! XDD :D
Título: Problemas con el GetPosX() y GetPosY()...
Publicado por: Loover en 18 de Marzo de 2008, 09:00:15 pm
No hace un move relativo a nada. Lo pone en la posición que tu indiques.

Revisa lo que estabas haciendo en papel, escribiendo con números, para darte cuenta de tu error.

Date cuenta de que para esa línea que tu has puesto, si mMis va creciendo con cada pulsación de teclado en dos unidades, le estarás dando valores tales que:

GetPos() + 0, GetPos() + 2, GetPos() + 4, GetPost()+6.

Lo que tienes que hacer es tener una variable con la posición unicamente, e incrementar dicha variable. No necesitas ningun GetPost()

Venga, que no tiene ningún misterio.