01 agosto 2011

ocúltate en la 208

Cuando implemente las animaciones de sprites, para la aplicación de veejingSX, me di cuenta que periódicamente se ocultaban los sprites durante un instante. Desconocía el motivo y pensé que se debía a un error en la programación y lo deje así ya que no lo vi muy molesto. En la pasada 39RU sucedió que estuve en el lugar y en el momento adecuado: lo vio SapphiRe y me resolvió el enigma. :)

Resulta que si colocamos un sprite con su posición vertical a la 208, este se desactiva junto a todos los que están en los planos inferiores (de valor mayor que él).

Pero ahí no queda la cosa, también tenemos la posición 209 que desactiva solo su sprite.

En ambos casos es útil, ya que además de ocultar uno o varios sprites, impide que se active el bit de colisión y todo ello con solo cambiar un byte.

Otra cosa a tener en cuenta, es que si queremos que un sprite 16x16 sin ampliar, aparezca de forma gradual por la parte superior, lo que en basic podríamos hacer con un valor -16, equivaldría al valor 240, que incrementaríamos hasta llegar a 255 para luego pasar a la posición 0. En el caso de utilizar sprites ampliados, comenzaríamos con la posición 223.

Con sprites en modo 2 (con VDP de los MSX2 y superiores), la posición de ocultación más planos inferiores (208), es la 216, pero parece que no existe el equivalente al 209.

Adjunto un programa en basic con el que se puede probar lo explicado.
  • Pulsando F2 para colocar el sprite rojo (plano 1) en la posición 208 (se oculta junto con el cían - plano 2), 
  • F3 para la 209 (oculta solo el rojo) y 
  • F1 lo coloca en la 100 (se muestran todos).

10 screen 1,2:key off
20 for i=14336 to 14367:VPOKE i,255:next
30 put sprite 0,(100,80),1,0
40 put sprite 1,(100,100),6,0
50 put sprite 2,(100,140),7,0
60 on key gosub 100,200,300
70 key(1) ON:key(2) ON:key(3) ON
80 goto 80
100 put sprite 1,(100,100),6,0
110 return
200 put sprite 1,(100,208),6,0
210 return
300 put sprite 1,(100,209),6,0
310 return

Si usas el emulador meisei, puedes copiar el texto del programa y pegarlo directamente con ctrl+v.