Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Un para de errores a solucionar

1 view
Skip to first unread message

wrtfix

unread,
Jun 5, 2008, 5:05:03 AM6/5/08
to SDL en Español
Buenas, soy nuevo en el uso de libreria SDL y estoy haciendo un
programa el cual tomo 100 muestras de eventos del joystick cada maso
menos 30 milisegundos. Quisiera saber en primer instacia si esta
libreria funciona bien bajo windows vista ya que maso menos cuando
tengo alrededor de los 100 eventos cargado me tira un erro de acceso a
memoria.
Y en segundo lugaar quisiera saber si ven algo raro en este codigo
devido a que no me deja cerrar la aplicacion una vez que la estoy
corriendo.

SDL_Init (SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE);
SDL_Event event[100];
while(running)
{
SDL_PumpEvents();
int n = SDL_PeepEvents(event, 100, SDL_GETEVENT,
SDL_JOYBUTTONDOWNMASK | SDL_QUITMASK);

if (n>100)
n = 100;

for (int i = 0; i < n; i++) {
switch(event[i].type)
{
case SDL_QUIT:
{
running = -1;

} break;

case SDL_JOYBUTTONDOWN:
{
if(event[i].jbutton.button == 0)
bata.reproducirCuerpo(0);

}break;
default: {
} break;

}//Fin del Switch
}//Fin del For
// SDL_Delay(1);
} //Finde del Run

if(stick!=NULL)
SDL_JoystickClose(stick);
SDL_Quit ();
return 0;
}
Si quieren ver el codigo completo esta en: www.code.google.com/p/batetron
y si alguien esta dispuesta a participar, crticar, diseñar, etc. sera
bienvenido.

Desde ya muchas gracias, saludos!

Hugo Ruscitti

unread,
Jun 5, 2008, 2:44:47 PM6/5/08
to sdl...@googlegroups.com
2008/6/5 wrtfix <wrt...@gmail.com>:

>
> Buenas, soy nuevo en el uso de libreria SDL y estoy haciendo un
> programa el cual tomo 100 muestras de eventos del joystick cada maso
> menos 30 milisegundos. Quisiera saber en primer instacia si esta
> libreria funciona bien bajo windows vista ya que maso menos cuando
> tengo alrededor de los 100 eventos cargado me tira un erro de acceso a
> memoria.

Generalmente en SDL se suele crear una sola estructura para representar
al evento, y desde el bucle se analizan uno a uno los eventos a medida
que se producen.

Ten en cuenta que SDL sabe administrar los eventos por su cuenta, si llegan
varios eventos SDL los agrupa en una cola y mediante la función PollEvent
te permite obtenerlos uno a uno.

Este sería un extracto de código para ejemplificarlo (tomado del ejemplo
"desplazamiento suave" [1]):

int main (int argc, char * argv [])
{
SDL_Event event;
int salir = 0;
[...]

while (! salir)
{

while (SDL_PollEvent (& event))
{
if (event.type == SDL_QUIT)
salir = 1;

if (event.type == SDL_KEYDOWN)
{
if (event.key.keysym.sym == SDLK_ESCAPE)
salir = 1;
}
}
[...]


> Y en segundo lugaar quisiera saber si ven algo raro en este codigo
> devido a que no me deja cerrar la aplicacion una vez que la estoy
> corriendo.

Por lo que veo el valor de "running" es la condición de salida, por lo
tanto para terminar el programa deberías hacer que "running" tenga
el valor 0. En el código estás asignando -1 y ese valor para C es verdadero,
nunca daría la condición para salir del "while(running)" ...


Saludos.

PD: no llegué a probar el programa, pero puede que el problema que tienes
no sea a causa del Sistema Operativo sino del bucle de eventos, puedes
usar un depurador como DDD [2] para determinar la causa del fallo.

[1] - http://www.losersjuegos.com.ar/referencia/ejemplos/ejemplos.php
[2] - http://www.loosersjuegos.com.ar/foro/viewtopic.php?t=318

--
Hugo Ruscitti
www.losersjuegos.com.ar

wrtfix

unread,
Jun 7, 2008, 8:11:13 PM6/7/08
to SDL en Español
muchas gracias por tu ayuda!
ahora necesitaria saber si es posible achicar la latencia del jostick
o la latencia de la reproduccion del sonido via software

saludos!

Hugo Ruscitti

unread,
Jun 7, 2008, 10:07:41 PM6/7/08
to sdl...@googlegroups.com
2008/6/7 wrtfix <wrt...@gmail.com>:

>
> muchas gracias por tu ayuda!
> ahora necesitaria saber si es posible achicar la latencia del jostick
> o la latencia de la reproduccion del sonido via software

¿es notoria esa latencia?, generalmente no se toman medidas al respecto
porque pocos juegos requieren ser tan precisos, y el mismo diseño de SDL
no busca tanta precisión sino compatibilidad con varias plataformas...
comentanos
un poco mas del problema, si observas retardo en las respuestas de los eventos
tal vez se deba a otro motivo, como el uso de SDL_Delay, una
sobrecarga de eventos
en el buffer u otro aspecto relacionado con tu programa en particular,
por cierto
¿has evaluado si SDL_WaitEvent no es mas adecuada para tu programa?,
generalmente
lo es para programas orientados a generar respuestas en base a eventos, como en
tu programa (si el usuario pulsa un botón reproduce tal sonido...).

Saludos.


--
Hugo Ruscitti
www.losersjuegos.com.ar

wrtfix

unread,
Jun 8, 2008, 10:34:12 PM6/8/08
to SDL en Español

Cambie el evento SDL_PollEvent a el evento SDL_WaitEvent y la verdad
que no se marco una diferencia entre este y el anterior es decir que
esa latencia se nota.

Lo que sucede es que estoy armando con un joystick de 10 botonoes un
software
en el cual asigno un sonido a cada boton.

Para luego con ese mismo jostick armar un prototipo de una bateria
electronica.
Es por eso que quiero achicar la latencia.

Ah! me olvidaba no utilizo en ningun momento el evento SDL_Delay.

Saludos.... Gracia!

Hugo Ruscitti

unread,
Jun 9, 2008, 12:23:37 PM6/9/08
to sdl...@googlegroups.com
2008/6/8 wrtfix <wrt...@gmail.com>:

>
>
> Cambie el evento SDL_PollEvent a el evento SDL_WaitEvent y la verdad
> que no se marco una diferencia entre este y el anterior es decir que
> esa latencia se nota.
>
> Lo que sucede es que estoy armando con un joystick de 10 botonoes un
> software
> en el cual asigno un sonido a cada boton.
>
> Para luego con ese mismo jostick armar un prototipo de una bateria
> electronica.
> Es por eso que quiero achicar la latencia.
>
> Ah! me olvidaba no utilizo en ningun momento el evento SDL_Delay.
>
> Saludos.... Gracia!

ah, me desconcierta... que raro, voy a probar la versión que descargué del
programa en mi casa (donde tengo un joystick) y luego te cuento si
me ocurre lo mismo.

Un saludo.


--
Hugo Ruscitti
www.losersjuegos.com.ar

wrtfix

unread,
Jun 10, 2008, 3:46:11 AM6/10/08
to SDL en Español
talves no este la ultima version...
en un rato la cuelgo

Hugo Ruscitti

unread,
Jun 16, 2008, 2:35:00 PM6/16/08
to sdl...@googlegroups.com
2008/6/10 wrtfix <wrt...@gmail.com>:

>
> talves no este la ultima version...
> en un rato la cuelgo

Si, evidentemente la versión que había probado hace unos días no era la
mas reciente. Con la versión actual no tuve ningún problema, los sonidos
se reproducen inmediatamente después de pulsar el botón del joystick...

¿en tu equipo sigues notando una demora?, ¿o es algo que has solucionado
con la actualización?.

wrtfix

unread,
Jun 16, 2008, 8:01:10 PM6/16/08
to SDL en Español
si lo pude solucionar!
lo que hice fue bajar la calidad del
Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT,
MIX_DEFAULT_CHANNELS, 512) de 4096 a 512
parece que ese era el problema

saludos muchas gracias por todo!
Reply all
Reply to author
Forward
0 new messages