Página 1 de 2

Refresco de pantalla en el CPC?¿

Publicado: 12 Feb 2013, 21:02
por mentalthink
Bueno la pregunta es a tipo general, pongo el CPC, porque es el que tuvé, y más o menos me miro el ASM...
El tema es cuando hacían los juegos en ASM, supongo que por mucha velocidad que le dé a los micros, no existia lo que a día de hoy se llama el doble buffer que creo que es lo que se usa normalmente para refreecar la pantalla, vamos a decir los FPS, o sea el numero de veces que se pinta la pantalla...

Entonces mi duda es la siguente, si yo dibujo un muñeco y lo muevo, y tengo un fondo por detás, que es lo que pasa, que dibujo la reticula del personaje hacia la izquierda, pinto de negro el que ha quedado ("Como estela") a la derecha y pinto otra vez esa porción de background...

La verdad es que no se muy bien como va esto, y el tema de las transparencias es algo que no entienco mucho, como se puede hacer algo transparence, supongo que será una combinación lógica una and una Xor o algo asi, pero entonces esos gráficos serán más lentod que uno digamos que ocupará toda su superficie y viendo un poquito en negro, aunque quede mal, no?¿...

Re: Refresco de pantalla en el CPC?¿

Publicado: 12 Feb 2013, 21:28
por 6128
Yo de programación cero patatero, pero por lo que he leído en el foro de Amstrad eso que dices se hace con máscaras.

Pásate por el foro y busca un poquillo pues hay varios hilos sobre pintar sprites y moverlos por la pantalla.

Re: Refresco de pantalla en el CPC?¿

Publicado: 12 Feb 2013, 21:35
por Joss
Uno de ellos es por ejemplo este:

Sprites - amstrad.es

También te puedes mirar los tutoriales de Mochilote sobre el tema:

cpcmania

Re: Refresco de pantalla en el CPC?¿

Publicado: 12 Feb 2013, 21:42
por jotego
Hay muchas técnicas y cada una requiere distinta potencia en el procesador. No he analizado el código de ningún juego de CPC pero me imagino que harían esto:

-Esperar al refresco vertical de la pantalla
-Durante el tiempo en que la pantalla no se refresca:
-Repintar el fondo que haya cambiado, por ejemplo, porque el personaje se ha movido
-Pintar el personaje, pero sólo las partes que son opacas. Se elige un "color" como transparente, generalmente el "0"

Para pintar sólo las partes opacas, lo ingenuo sería utilizar una estructura "if", del tipo: "si el color no es negro, píntalo, sino, te lo saltas". Pero esto sería demasiado lento por todas las comprobaciones e instrucciones de salto. Lo que se suele hacer es preparar una máscara del personaje, que es un dibujo en el que la parte transparente se pone a "1" y la opaca a "0". Entonces se puede reemplazar la estructura "if" por operaciones lógicas que se pueden ejecutar en un bucle. En este caso: "coge el fondo, hazle la AND con la máscara y al resultado, hazle la OR con el personaje, ahora escribe el resultado dónde estaba el fondo". Esta secuencia AND-OR deja el fondo intacto donde el personaje es "transparente" y copia el píxel del personaje cuando este es opaco.

Este es un resumen rápido, pero creo que se entiende la idea.

Re: Refresco de pantalla en el CPC?¿

Publicado: 12 Feb 2013, 22:23
por EdgeM
Por mi parte, añadir que en el CPC sí que se puede hacer doble buffer... siempre que haya memoria "base" disponible, claro. Es tan fácil como apuntar con el CRTC a una nueva dirección en el siguiente refresco, teniendo en cuenta que el Gate Array sólo ve los primeros 64KB de memoria... aunque tengamos una expansión de 512KB :P Por cierto, programando el CRTC se pueden conseguir tasas de refresco distintas (50Hz, 60Hz, 75Hz) siempre que el monitor lo permita, así como tener una resolución ampliada, a costa de usar más memoria para la imagen de vídeo.

Re: Refresco de pantalla en el CPC?¿

Publicado: 12 Feb 2013, 22:24
por mentalthink
@6128 y Joss gracias, a parte asi me recuerdo que tengo que pasar un poco más por Asmtrad.esp...

Jotego, lo que me comentas me ha ido de fábula, no por el hecho del tema de las or y la and para el sprite, si no por lo que me has comentado antes de poder evitar hacer los for... supongo que al igual que se usa para imagen, se podrá utilizar para otro tipos de datos, con el consecuente incremento de velocidad.. Voy a pensar sobre lo que me comentas pero para mis cosas de diario...

Gracias a todos por la info.

Edge M. que justo estaba escribiendo a la par que has posteado... Pues gracias por la info, lo que siempre me parece interesante del CPC, es que se puedan tocar cosas del monitor, es algo bastante "raro" a mi parecer... es que la máquina se las trae... Por mucho que los chicos de Retro entre amigos se metan con nosotros :P

Re: Refresco de pantalla en el CPC?¿

Publicado: 13 Feb 2013, 08:10
por EdgeM
El CPC es una máquina grandiosa, pese al cachondeo que tienen en el podcast a su costa ^_^

Re: Refresco de pantalla en el CPC?¿

Publicado: 15 Feb 2013, 18:17
por 6128
Por cierto, Mentalthink. Que no te he preguntado. ¿Qué tienes en mente? ¿Cuándo veremos algo de ese juego para CPC made in Mentalthink? :-ss

;)

Re: Refresco de pantalla en el CPC?¿

Publicado: 15 Feb 2013, 20:07
por mentalthink
Hola 6128 pérdona que no te haya respondido hasta ahora que no había visto este post..

Pues lo puedes ver aquí , en el foro puse un Post de esté Blog...
http://blacksun-game.blogspot.com.es/

El video que pone Video beta 0.1, ahí podrás ver un poquito como está quedando , pero ya te digo que hay cosas que no están programadas y y cosas que cambiaré, así como algunos errores, pero bueno la parte de código chunga pues ya la he terminao más o menos...

Ya me dices a ver que te parece :oops: ;)

Re: Refresco de pantalla en el CPC?¿

Publicado: 15 Feb 2013, 20:45
por 6128
Los fondos son una chulada.

Luego a portarlo a CPC. :mrgreen:
Aunque se pierdan los fondos seguirá siendo un matamarcianos cojonudo.