Autor Tema: Mini proyecto escuela  (Leído 6457 veces)

SingletonJohn

  • Commodorista
  • ***
  • Mensajes: 66
  • Poke 35136,0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #60 en: Octubre 02, 2022, 09:22:48 »
Hola a todos!

Por motivos personales y de tiempo tengo esto bastante en stand y....espero dedicarle el tiempo que se merece próximamente. :()
"Ya al final de mi vida de pecador, mientras espero el momento de perderme en el abismo..." pues me lío y me pongo a hacer lo que no pude de pequeño! ;)

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #61 en: Octubre 02, 2022, 22:54:32 »
Sólo hay que tener en cuanta una cosa.....que los sprites no sean muy rápidos, ya que podrías atravesar alguna pared)....en mi caso de miniproyecto todos los avances son pixel a pixel, por lo que está el control asegurado
Si en vez de posicionar las bounding boxes a partir de donde están los sprites, lo haces al revés (posicionar los sprites a partir de donde están las bounding boxes), puedes mover y colisionar las bounding boxes (a la velocidad que sea), sin ligarlo a la velocidad que puedas repintar.

SingletonJohn

  • Commodorista
  • ***
  • Mensajes: 66
  • Poke 35136,0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #62 en: Octubre 14, 2022, 16:51:56 »
Hola @Dashiad !

Pero el problema lo tienes igual no?....me refiero a que los bounding también tendrán una velocidad en pixels por unidad de tiempo.

no es exactamente un problema de repintado.Lo tengo desligado de las colisiones para evitar que los sprites "vibren" al chocar....es decir,varío las coordenadas del collider en una tabla,y si choca lo pongo "a ras" del obstáculo y detrás va el Sprite....cuando están los cálculos hechos,pongo un flag en true para que lo pinte el raster
Si la velocidad fuera algo mayor que la anchura/altura del collider, podrías atravesar ciertos obstáculos.....
Pensaré en lo que dices y probaré.
Tb había pensado alargar los colliders en la dirección del movimiento para velocidades muy rápidas....aunque igual queda mal moverse tantos píxeles por fame....
« última modificación: Octubre 14, 2022, 17:06:31 por SingletonJohn »
"Ya al final de mi vida de pecador, mientras espero el momento de perderme en el abismo..." pues me lío y me pongo a hacer lo que no pude de pequeño! ;)

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #63 en: Octubre 14, 2022, 20:35:51 »
Si algo se mueve a 3 pixels por frame, y el pintado = movimiento, puedes atravesar cosas.
Pero si lo separas,  el movimiento y las colisiones se pueden calcular varias veces por frame de repintado.
Esto lo puedes hacer en terminos de "pixeles" (moviendo 3 veces 1 pixel), o por trigonometría (intersecciones de lineas, etc), depende del caso.
Por ejemplo, en un "Pong", si la pelota se mueve 5 pixeles por frame, y en un frame determinado la pelota está a 1 pixel de tocar una de las raquetas, en el siguiente repintado hay que haber hecho la colisión, rebotar la pelota, y moverla. Para hacer eso, la posición de los objetos no se obtiene de la posición de los "sprites", sino al revés. Los "objetos" del juego se mueven, colisionan, tienen efectos, y cada X tiempo, se pintan.
Es como si en el bucle de juego, la entrada se evaluara 1 vez, el movimiento y colisiones se evaluaran X veces, y luego se pintara 1 sola vez.

SingletonJohn

  • Commodorista
  • ***
  • Mensajes: 66
  • Poke 35136,0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #64 en: Octubre 17, 2022, 23:23:04 »
Es como si en el bucle de juego, la entrada se evaluara 1 vez, el movimiento y colisiones se evaluaran X veces, y luego se pintara 1 sola vez.
Muchas gracias por los detalles @Dashiad !!! ;D
Ciertamente no se me había ocurrido mover un objeto varias veces y comprobar varias veces las colisiones entre repintados
Entre repintado y repintado estaba dejando descansar al procesador porque aún me quedaban meter cosas como el sonido y tb hacer pruebas con el scroll.
Pero lo que cuentas tiene más sentido que comprobar colisiones 1 vez,mover y esperar el barrido...

Gracias de nuevo!
"Ya al final de mi vida de pecador, mientras espero el momento de perderme en el abismo..." pues me lío y me pongo a hacer lo que no pude de pequeño! ;)

SingletonJohn

  • Commodorista
  • ***
  • Mensajes: 66
  • Poke 35136,0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #65 en: Noviembre 12, 2022, 13:47:22 »
Hola a todos de nuevo!
@Dashiad, he estado probando desvincular del todo el movimiento del repintado y ahora lo que me pasa es que la velocidad de los sprites es inestable.....supongo que haciendo el movimiento a través de una interrupción esto mejorará bastante.
Haré una interrupción que dure 1/3 de frame para evaluar posiciones y colisiones a ver qué tal resulta!.Evitaré que coincidan cálculos y repintados jugando con los relojes

Como lo véis?Os parece buena solución?
« última modificación: Noviembre 12, 2022, 13:58:22 por SingletonJohn »
"Ya al final de mi vida de pecador, mientras espero el momento de perderme en el abismo..." pues me lío y me pongo a hacer lo que no pude de pequeño! ;)

SingletonJohn

  • Commodorista
  • ***
  • Mensajes: 66
  • Poke 35136,0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #66 en: Noviembre 12, 2022, 13:51:28 »
También os tengo que contar que todo el programa que tenía hecho de los monstruitos se me fastidió :(.....solo pude salvar los Sprites y las pantallas.
La verdad es que la emulación de la disketera del C64 Maxi me falla bastante,y eso que la tengo en accurate....
En fin,ahora estoy haciendo un Pong para jugar con mis hijos y probar cosas
Saludos!
"Ya al final de mi vida de pecador, mientras espero el momento de perderme en el abismo..." pues me lío y me pongo a hacer lo que no pude de pequeño! ;)

Dashiad

  • Commodoremaníaco
  • ****
  • Mensajes: 160
  • SYS 0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #67 en: Noviembre 12, 2022, 14:04:53 »
Posiblemente, todo el bucle principal del juego debería ser disparado por la interrupción...Lo anterior debería hacer el movimiento más estable, no al revés.
De la lista de cosas  a hacer en cada bucle, hay cosas que tienen un tiempo constante (leer la entrada del usuario, tocar musica), y otras que tienen un tiempo variable (mover, actualizar estado del juego) y otras que podrian ser opcionales (pintar).
Si primero haces las que requieren un tiempo constante y luego haces las de tiempo variable, puedes mirar el registro de la linea de raster, para saber si aún te queda tiempo para pintar en ese frame.
Si te queda tiempo, pintas. Si no, podrías incrementar una variable de "frameSkip".
Si al principio del bucle, "frameSkip" está,por ejemplo, a 3, durante ese bucle, sólo haces las tareas de tiempo constante, y el repintado (te saltas actualizar el mundo).
Así, aunque haya fases del juego donde hay más objetos a actualizar, o más cálculo que hacer, el juego perderá frames, o el movimiento dará un parón, pero el juego sigue "bajo control".

SingletonJohn

  • Commodorista
  • ***
  • Mensajes: 66
  • Poke 35136,0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #68 en: Noviembre 12, 2022, 15:02:40 »
Gracias de nuevo @Dashiad !
Tiene todo el sentido del mundo lo que dices y me pondré a ello.
Estoy dándole vueltas y en un juego como el Pong,lo fundamental es que la pelota vaya finísima,si no es un horror.
Con lo cual la pelota debe ir por encima de todo lo demás
El resto de cosas son muy sencillas y si esperan un frame ni se nota.
La cosa sería poner el movimiento de la bola por interrupciones(asegurando que no se superponga con el repintado,que iría con VSync a 60 por segundo.El sonido tb se podría meter aqui
 El resto de cosas(palas y obstáculos móviles)creo que irían bien en un bucle "normal"
Es más....el movimiento de la bola debería pasar por encima de todo(nmi?) Asegurándose de que no interrumpa nunca el VSync...con un Pong lo tendría facil
El movimiento de la bola es prácticamente de tiempo constante,salvo en los rebotes
« última modificación: Noviembre 12, 2022, 15:09:35 por SingletonJohn »
"Ya al final de mi vida de pecador, mientras espero el momento de perderme en el abismo..." pues me lío y me pongo a hacer lo que no pude de pequeño! ;)

SingletonJohn

  • Commodorista
  • ***
  • Mensajes: 66
  • Poke 35136,0
    • Ver Perfil
Re:Mini proyecto escuela
« Respuesta #69 en: Noviembre 12, 2022, 15:39:59 »
Descarto lo de nmi para la bola....es una tontería y me daría problemas si quiero hacer un sei/cli
"Ya al final de mi vida de pecador, mientras espero el momento de perderme en el abismo..." pues me lío y me pongo a hacer lo que no pude de pequeño! ;)