Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con el GetPosX() y GetPosY()...

Iniciado por pioj, 18 de Marzo de 2008, 05:17:46 PM

« anterior - próximo »

pioj

Nas...


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

si le doy un valor constante, lease esto
mBloky.SetPosition ( 500 + mMis , 0,0);
se mueve correctamente, de 1 en 1 pixeles..

PERO si lo cambio por esto
short blx = mBloky.GetPosX();
mBloky.SetPosition ( blx + mMis , 0,0);

ó esto
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..
iojete@gmail.com

Game Designer y/o Grafista de Escenarios.
Grafista 2D/3D General.
__________________________
- UNPALADIN -  
______________________
//WWW.UNPALADIN.COM

Loover

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.

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 ;).
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

pioj

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
iojete@gmail.com

Game Designer y/o Grafista de Escenarios.
Grafista 2D/3D General.
__________________________
- UNPALADIN -  
______________________
//WWW.UNPALADIN.COM

Loover

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.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.