Sprite

Page 2/3
1 | | 3

Par mohai

Paladin (899)

Portrait de mohai

17-02-2015, 18:23

Vamos a ver...
Hay 2 coordenadas que hacen que un sprite desaparezca.
La 209 hace que es plano de sprite desaparezca. Si es 208 hace que desaparezca ese plano y los siguientes.
Para los modos de MSX-2, las coordenadas son 215 y 216.
No tienes que hacer desaparecer a todos los planos que siguen obligatoriamente.
Al desaparecer un sprite de esta manera, no puede colisionar con ningún otro.

Par Guillian

Prophet (3371)

Portrait de Guillian

18-02-2015, 10:45

¿Estás seguro de eso? Yo creo que solo las coordenadas 208 y 216 hacen desaparecer (deshabilitan) un sprite y los que tengan menor prioridad que él. Esto es lo que viene explicado en manual del VDP. El resto son coordenadas normales.

Par mohai

Paladin (899)

Portrait de mohai

18-02-2015, 23:38

Guillian wrote:

¿Estás seguro de eso? Yo creo que solo las coordenadas 208 y 216 hacen desaparecer (deshabilitan) un sprite y los que tengan menor prioridad que él. Esto es lo que viene explicado en manual del VDP. El resto son coordenadas normales.

Si.Si. Estoy seguro.
A no ser que sea una característica del Basic, porque en código máquina no lo he probado.
Recuerdo haber usado el truco de mover el sprite 0 para que desaparecieran todos los sprites en algún programa en Basic.

Par mohai

Paladin (899)

Portrait de mohai

18-02-2015, 23:43

Y si no estoy equivocado, ¿podría ser una característica del VDP que no estuviera documentada?
Yo aprendí el Basic MSX con un manual de Mitsubishi y, si no recuerdo mal, allí se menciona este efecto.

Par Guillian

Prophet (3371)

Portrait de Guillian

19-02-2015, 09:02

mohai wrote:

Recuerdo haber usado el truco de mover el sprite 0 para que desaparecieran todos los sprites en algún programa en Basic.

Para que desaparezcan todos los sprites tienes que poner el sprite del plano 0 en 208/216, que es lo que ya hemos hablado en post anteriores.
Pero lo de las coordenadas alternativas para que solo desaparezca un sprite (y no el resto con menor prioridad) es lo que creo que no es correcto.

He hecho una prueba en BASIC y los sprites solo desaparecen al llegar a la línea 216 (en SCREEN 5):

10 SCREEN5
20 SPRITE$(0)="????????"
30 FOR I=0 TO 31
40 PUT SPRITE I,(I*8,I*8+J),15,0
50 NEXT
60 J=(J+1) AND 255
70 VDP(24)=J
80 GOTO 30

Par theNestruo

Master (228)

Portrait de theNestruo

19-02-2015, 22:38

Al menos en MSX 1 (o en sus modos de video, vamos) sí que es correcto. Con el visor de sprites del meisei se ve bastante bien. Yo tengo dos constantes declaradas con los valores en hexadecimal, uso ambas y efectivamente cada una hace lo que corresponde:
SPAT_END equ $d0 ; Sprite que indica el final del SPRATR
SPAT_OB equ $d1 ; Sprite out of bounds (oculto)
Aunque realmente ocultar un único sprite es equivalente a ponerle en cualquier coordenada que caiga fuera de la pantalla o ponerle color 0. La diferencia haciendo Y=$d1 *creo* que es que no detecta colisiones, pero eso no lo he comprobado.

Par Guillian

Prophet (3371)

Portrait de Guillian

19-02-2015, 23:59

Pues no sé que decirte. Sigo pensando que no es correcto :/
Si pruebas el programa anterior y pones SCREEN 2 (en un MSX2 o superior para que funcione el R#23) verás que el sprite sigue siendo visible con una Y=209 (#D1). Así que esa coordenada no deshabilita el sprite.
En el manual del TSM9918A, al igual que en el del V9938/58 solo hace referencia a ese valor de Y para deshabilitar el sprite.

Sobre las colisiones. Si mal no recuerdo, si los sprites están fuera del area visible, las colisiones no se detectan. Así que en un MSX1, a priori, da igual si pones un sprite en la Y=209, Y=213 u otra no visible.

Así que a no ser que alguien demuestre lo contrario, solo las coordenadas Y=208 (SCREEN 1 a 3) o 216 (SCREEN 4 a 12), son la que deshabilitan un sprite y el resto de menor prioridad (marca el final de los sprites a procesar)

Par theNestruo

Master (228)

Portrait de theNestruo

20-02-2015, 21:23

Pues vas a tener razón (as usual Big smile)

El caso es que ahora, pensándolo bien (que nunca me había parado a ello), ocultar un sprite en una coordenada concreta es absurdo porque estás consiguiendo lo mismo que poniéndolo en cualquier otra coordenada fuera de la pantalla... así que mucha utilidad no tiene.

Estaba buscando a ver dónde podía haber leído yo lo de la Y=209 y la verdad es que no lo sé. Lo único "oficial" que he encontrado ha sido en el MSX2 Technical Handbook: "In screen modes 1 through 3, Y-coordinate was 209 for erasing the display of the specified sprite and was 208 for erasing the displays of the specified sprite and all sprites following it, but in screen modes 4 through 8, where the limit of Y-coordinate has been increased to 212 dots, the values to be specified are now 217 and 216, respectively".
El caso es que tocando el R#23 se ha visto que no funciona así que nada. Y en MSX1 no hay forma de comprobar si funciona porque no hay ninguna diferencia a utilizar otras coordenadas que también caigan fuera de la pantalla...

Par Guillian

Prophet (3371)

Portrait de Guillian

21-02-2015, 18:06

Gracias Néstor por tomarte la molestia en echarle un ojo.
Quizás el MSX2 Technical Handbook hace referencia a las posiciones donde coloca los sprites la BIOS cuando los inicia (por ejemplo con la llamada CLRSPR). Pero sí que es un tanto confusa la explicación que da.

Par e_sedes

Expert (112)

Portrait de e_sedes

22-02-2015, 01:08

En el MSX Top Secret 2 pone que en los sprites modo 2 poniendo 208 se ocultan los de mayor prioridad y poniendo 216 se ocultan los de menor prioridad. No se de donde sacaron eso, si es un error o una ida de pinza. Por otro lado es un documento muy interesante y utilísimo (si entiendes el portugués, aunque no es muy dificil).

Page 2/3
1 | | 3