Dudas: Esperar con PAlib & processador DS

Saludetes, estoy haciendo un juego con las PAlib y me gustaria saber si sabeis (valga la redundancia [+risas] ) alguna función que me permita digamos "esperar" por ejemplo 2 segundos antes de seguir con la ejecución del código, es decir, que se me quede "congelado" el programa durante este tiempo.

Por otro lado, tengo el proyecto en mente de hacer un programa para DS al que le introduzcas una función y te haga tabla de valores, representación gráfica, derivada, integrales, blablabla pero como mis conocimientos de Hardware = -4, no se que límites tiene el procesador de DS respeto a calculos matematicos y como no quiero que se me funda la consola, si sabeis si seria posible hacer algo asi, o si deberia usar otras librerias (auque solo se de las PAlib, todo es ponerse [sonrisa] ), etc.

Gracias de antemano!
Más básico imposible...
void Espera(int numerodesegundos)
{
int a;
for(a = 0; a < numerodesegundos * 60; a++) PA_WaitForVBL();
}



Para cálculos matemáticos como esos... Uff... Lo difícil es encontrar una librería que haga los cálculos (cosa que me gustaría tener a mi, y que seguramente buscando en google se pueda encontrar). Por mucho tiempo que le lleve a la DS, si la librería funciona, resolverá integrales y lo que le eches encima, el hardware no importa mientras no te importe esperar algunos segundos a que resuelva lo que sea. [+risas]
Utiliza un procesador de 32 bits, por lo que no tendrás ningún tipo de problemas en cuanto a esos cálculos. Que resuelta derivadas y demás, de todo lo que le pongas si que es mas jodido, una integral, a fin de cuentas, es un sumatorio, así que se podría implantar, pero siempre para funciones predefinidas.
O sea, con esta función deduzco que la velocidad de procesamiento de las ordenes por la DS es de 1/60 segundos, no?

A lo otro, ya empezaré a mirar librerias cuando vaya a meterme, aunque de momento me asalta la duda sobre si cualquier libreria de C es compatible con las PAlib.

Gracias :)
Sobre lo de la tabla de valores es de pensar un poco. El consejo que te doy es que la NDS hace los cálculos de división muy lentamente, lo mejor es desplazamiento de bytes. Para informarte mejor sobre los cálculos matemáticos en NDS mira la wiki de PALib.
Muzzy escribió:O sea, con esta función deduzco que la velocidad de procesamiento de las ordenes por la DS es de 1/60 segundos, no?


Nop :p, la función "swiWaitForVBlank()" hace una interrupción (se para) hasta que "acaba" un renderizado vertical, es decir "espera" un frame. Como la ds va a 60 fps constantes (a no ser que la sobrecargues mucho) pues si haces un bucle de 60 "vBlank" tendrás una bonita pausa de 1 segundo (ya que si 1 "vBlank" es 1 frame, 60 frames serán 60 "vblank").Por lo tanto si multiplicas ese "60" en el bucle por "x" tendrás una espera de "x" segundos.

Espero haber sido claro y que te ayude a entenderlo [+risas]

Un Saludo ;)
Pues muchas gracias, bastante claro, ahora voy a probar la función para obtener FPS que hay en la wiki PAlib (Buenissima web añado).

Pero vuelvo a postear para postear dudas sobre programacion, que aunque esta vez no tengan nada que ver con el titulo del hilo, me ahorro abrir otra tema.

Resulta que estoy haciendo un port del Magnetism (http://gprime.net/game.php/magnetism) para DS, y para hacer los calculos de distancias y tal necessito tener las cordenadas del centro de cada sprite. Por lo que sé, la DS coloca los sprites siempre a partir de la esquina superior izquierda, asi que para obtener el centro he probado a sumarle el radio del sprite (son circulares) a X y a Y pero aun así no me lo hace bien, de hecho pasa completamente de lo que le he dicho e ignora los +8's. [buuuaaaa]

typedef struct
   {
      s32 x, y;
      s32 cx, cy;
      s32 vx, vy;
      s32 ax, ay;
   } magnets;


ahí he puesto la tupla que he creado para la bola, donde x e y son los puntos superior-izquierdo, cx y cy las coordenadas del centro del sprite ( declaradas
ball.cx = ball.x + 8;
   ball.cy = ball.y + 8;
)

vx, vy, ax y ay son velocidades y aceleraciones respectivas, pero de momento no creo que influyan, el fallo esta en el centro sin el cual no puedo determinar correctamente ni el alcance del iman ni las colisiones.

Cuando lo termine ya lo posteare y me pondré manos a la obra con el Funcionarium de DS xD

Saludetes y Dios bendiga a los tutoriales de Plata y a la wiki-Palib.

EDIT: AMO las tuplas y la función PA_MoveSprite
6 respuestas