¿Como hago varios PA_WaitForVBL() en un solo comando?

He probado a hacer en una sola línea PA_WaitForVBL(); muchas veces, funciona pero al compilar tarda demasiado. Mi pregunta es: ¿Hay alguna forma de hacer varios en una sola línea? He probado con PA_WaitForVBL()*60; y con PA_WaitForVBL(60);, pero nada...
para que quieres poner muchos ?
si no mal recuerdo , eso servia para poner los flames estables ...
me parece k se ponia dentro del
while(1){

PA_WaitForVBL()

}



me parece k ese codigo está bien :S
Aver, esto sirve para hacer una espera. Un comando es para hacer una espera de 1/60 de segundo. Es decir, que si ponemos 60 esperas de este tipo, espera un minuto, y luego cumple sus funciones. Mi pregunta es que como pongo varios con un solo comando.
PALIB WIKI escribió:
PA_WaitForVBL();

Este último comando sincroniza el loop infinito que comentamos antes, con la fracuencia de pantalla (60fps). Si no la pones, el programa funcionará como dije antes, MUCHO mas rapido que la frecuencia de la pantalla
tal vez te refieras a poner varios sin necesidad de escribiros cada vez que nesecites..no ? si es eso se hace muy cencillo un ejemplo

#include <PA.h>
void esperar(int veses);
int main{
while(1){
esperar(60); //le pasas el parametro de cuantos whietefor vbl quieres.....
}
}

void esperar(int veses){
int x=0;
for (x=0;x<=veses;x++){
PA_WaitForVBL();
}
}


espero quesea lo que pides....


MIKAU !!!

saludos !
yo he puesto lo "máximo" que sé , por que no llego a esas cosas (el FOR, por ejemplo , no lo entiendo :( :( :( )
Lo que yo me refiero es que con un solo comando, hacer varios PA_WaitForVBL(). O si hay un comando mejor, hacer una espera de un segundo, no de 1/60 de segundo...
A ver, para empezar el PA_WaitForVBL() no es para hacer una pausa o una "espera" de 1/60 segundos. Es una función que "espera" a que se refresque la pantalla. Como la DS funciona a 60 frames por segundo (60 refrescos por segundo) coincide que la función tarda 1/60 en ejecutarse, pero no confundamos las cosas.

Segundo, para esperar X segundos yo me he creado una simple y eficaz función que uso habitualmente y funciona perfectamente:
void esperar(u8 segundos) {
    u16 cuenta = 1;
    while (cuenta<(segundos*60)) { cuenta++; PA_WaitForVBL();}   
}


Para usarla, cosa más sencilla no puede ser: esperar(3); hace una pausa de 3 segundos. Con esto creo que podrás hacer lo que quieres :)
Bien, funciona! Muchas gracias =D
una pregunta, no funcionaría esto tambien

for (n=segundos*60; n>0; n--) { PA_WaitForVBL() ;}

yo es que de programar en c ni idea pero en el basic del espectrum era un fiera. El caso es que anteriormente te han puesto un for y lo he interpretado como un ciclo for next de basic o del visual basic.

Estos ciclos for next se utilizan para realizar tareas repetitivas, googleando encontre

http://www.cplusplus.com/doc/tutorial/control.html

y mezclando todo el rollo que te he soltado, creo que saldría esto

for (n=segundos*60; n>0; n--) { PA_WaitForVBL(); }

Donde segundos sería el nº de segundos a esperar.

A ver si te explico lo que he creido enteneder.

La estructura del comando sería:

For ( asignación de valor de la variable ; condición a cumplir ; aumento o disminución ) { tareas a repetir }

Al ejecutarse el For asigna el valor que le pongamos a la variable y comienza a repetir las tareas.
Cada vez que ejecuta las tareas, aumenta o disminuye según le hayamos puesto y comprueba la condición, en el momento que no se cumpla deja de repetir las tareas.

Por favor si me he equivocado en mi explicación decidmelo y así aprendemos todos.

Edito: Es lo mismo que te ha puesto Luis_Mikau utilizar un For.
trantran escribió:La estructura del comando sería:

For ( asignación de valor de la variable ; condición a cumplir ; aumento o disminución ) { tareas a repetir }

Al ejecutarse el For asigna el valor que le pongamos a la variable y comienza a repetir las tareas.
Cada vez que ejecuta las tareas, aumenta o disminuye según le hayamos puesto y comprueba la condición, en el momento que no se cumpla deja de repetir las tareas.


Es exactamente eso [oki].
La funcion que me hice yo para esto es igual, solo que en vez de usar otra variable, incremento la de segundos:

for(segundos *= 60; segundos > 0; segundos --)


Aunque es una tonteria, cuanto mas puedas ahorrarte, mejor :p.

Salu2!
10 respuestas