CODINGAMSTRAD SEMANAL ★ RELLENO DE PANTALLAS MEDIANTE BLOQUES GRÁFICOS ★

Relleno de pantallas mediante bloques gráficos
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Para que nuestros gráficos resulten mucho más atractivos, asi como para alcanzar un mayor realismo, lo mejor es utilizar un fondo. En el presente artículo se explica una manera sencilla de conseguir el entorno apropiado a cada imagen.

Hasta ahora hemos tratado de la impresión en pantalla de objetos móviles mediante sprites, pero nos queda una parte fundamental de la cual no se ha hablado aún. Se trata de la impresión del fondo de la pantalla, es decir, del escenario por donde se moverá nuestro gráfico.

Como es de suponer, dichos escenarios no se almacenan en memoria en forma de pantalla, ya que ello supondría reservar 16 K de memoria para cada una de ellas, lo cual significaría que como máximo podríamos disponer de tres.

El método mencionado anteriormente, únicamente sería utilizable para aquellos programas en los cuales el escenario es realmente imprescindible, ya que representa la parte fundamental del mismo.

Esta condición no se presenta en casi ningún programa, y aunque éste fuera nuestro caso, la presentación en pantalla sería muy sencilla, ya que únicamente se deberían trasladar los datos de la memoria principal a la memoria de pantalla.

Así pues, vamos a tratar el caso más general y que se da en la mayoría de los programas comerciales, se trata de construir una pantalla mediante bloques gráficos almacenados en memoria por separado.

Vamos a ver cómo construir todas las pantallas que pueden intervenir en nuestro programa utilizando muy poca memoria en gráficos, si se compara con las 16 K que serían necesarias para almacenar una como tal.

Para ello, debemos tener en cuenta la dirección donde empieza la pantalla, dado que ésta cambia cuando se produce algún scroll, ya sea en sentido ascendente o descendente.

La mayoría de los programas comerciales construyen las pantallas mediante bloques gráficos almacenados en la memoria.

Esto es muy importante tenerlo en cuenta. Si la dirección inicial de pantalla no tiene un valor concreto, nuestra rutina de impresión no pintaría los gráficos en el lugar deseado.

Los fondos o escenarios de los programas, especialmente los lúdicos, son una parte muy importante para dar vida a las pantallas.

Para resolver este problema será necesario inicializar la pantalla antes de proceder a la impresión. Esto se puede conseguir desde Basic, utilizando el comando mode, o bien desde Código Maquina, ejecutando las siguientes instrucciones:

LD A,N CALL #BC0E

donde N deberá contener el valor del modo de pantalla que se desea inicializar, por tanto, dicha variable deberá estar dentro del rango 0-2.

Esta operación dará como resultado la colocación de la dirección inicial de pantalla en la posición #C000, con lo que podremos imprimir a partir de la misma.

Una vez hecho esto, no será necesario volverá a inicializar en sucesivas impresiones, a no ser que se haya producido algún scroll.

Deberemos tener en cuenta que en el momento de imprimir hay que borrar lo que había de la forma vista anteriormente, o bien utilizando el siguiente programa:

LD HL,#C000
LD DE,#C001
LD BC, 16383
LD (HL),0
LDIR

Ya tenemos preparada la pantalla para la impresión en cualquiera de los modos. Vamos a ver ahora cómo podremos formar el escenario a partir de los bloques gráficos almacenados en memoria.

Lo primero que tenemos que hacer es confeccionar diversos dibujos que nos permitan formar un fondo mediante la repetición de los mismos. Es conveniente que sean lo suficientemente variados para permitirnos la realización de diversos fondos, ya que la variedad de escenarios es muy importante dentro de un programa y aún más si se trata de un juego.

Las dimensiones de los mismos pueden ser las que nosotros decidamos, teniendo en cuenta que cuanto mayores sean, mayor será la cantidad de memoria utilizada.

Con esta rutina se pueden conseguir, mediante la repetición de bloques gráficos originales, los fondos de las pantallas con un gran ahorro de memoria.

Una vez hecho esto, se trata únicamente de obtener los diversos fondos de pantalla, mediante la repetición de los bloques gráficos, con lo cual se puede rellenar una pantalla con muy poca memoria destinada a gráficos.

La rutina que hemos preparado hoy se encarg; precisamente de confeccionar la pantalla utilizando los bloques gráficos definidos.

Está formada principalmente por dos bloques. Uno es la rutina de impresión, propiamente dicha, y que ya hemos comentado. El otro es el que debe decidir cuál será la zona de pantalla a imprimir.

Para ello deberemos dar unas condiciones iniciales, en las cuales se deberá indicar:

A: Altura del bloque a imprimir
B: Anchura del bloque a imprimir
C: Coord. horiz. donde empezará la impresión
D: Coord. vertical donde empezará la impresión
E: Ancho de la zona de pantalla a imprimir
F: Alto de la zona de pantalla a imprimir.

Esta rutina podrá ser utilizada desde Basic mediante el siguiente comando:

CALL &A000,A,B,C,D,E,F

Hay que tener cuidado con los datos que se indiquen en la llamada a la rutina, ya que si éstos hacen que la impresión se salga de los límites de la pantalla podría causar una catástrofe en nuestro programa.

De esta forma la coordenada vertical más la anchura de la zona a imprimir no debe superar el valor 25, de la misma manera que la coordenada horizontal más la anchura no debe ser mayor que 80.

Otro dato importante, que no hemos
mencionado, es la dirección donde debe residir el gráfico a imprimir, dado que la rutina toma el gráfico de la dirección &A100. Ahí es donde deberemos colocar nuestro dibujo, teniendo en cuenta que deberá estar almacenado como bloque gráfico.

Dicha dirección se puede variar modificando el contenido del registro HL, que es el que apunta a la dirección del gráfico:

LD HL,#A100

Así, si la rutina es llamada desde Basic, antes deberemos colocar el gráfico a imprimir en dicha dirección. Otra solución puede ser cambiar la dirección donde apunta el registro doble HL, y dirigirla donde se encuentra nuestro bloque gráfico.

Vamos a interesarnos ahora por la velocidad de ejecución de la rutina. Si hacemos diferentes pruebas, comprobaremos que dicha velocidad será mayor cuanto más grande sea el bloque a imprimir, aunque esto repercutirá en un mayor consumo de memoria en gráficos, por lo tanto deberemos decidir nosotros mismos lo que es más importante en cada caso determinado.

Para una mayor facilidad en la comprensión del funcionamiento de la rutina, hemos preparado un programa de demostración que se encarga de pintar un tablero de ajedrez.

En este caso únicamente utilizaremos un bloque gráfico que colocamos en la dirección &A100, cuyas dimensiones son de tres de alto por uno de ancho. La velocidad de la impresión se podría aumentar haciendo un bloque de mayores
dimensiones, o bien reducir disminuyendo sus dimensiones.

Si se quiere utilizar la rutina desde Código Máquina, se deberán suprimir las primeras líneas encargadas de tomar las condiciones iniciales, e introducir otras nuevas en las que se den valores a los registros HL, BC y DE.

HL: Dimensiones del bloque gráfico
BC: Dimensiones de la zona de pantalla a imprimir
DE: Coord. iniciales

Además se podrá cambiar la dirección del gráfico a imprimir direccionando el puntero HL.

Sólo resta decir que para almacenar este programa bastará con copiar el cargador Basic que aparece al final del artículo, y ejecutarlo. Si no aparece ningún mensaje de error, se podrá salvar en disco o cinta de la siguiente forma:

SAVE"BLOQBIN", B, &A000, &80

Para ejecutar el programa demostración, hay que efectuar previamente la operación antes citada, ya que ella sin el programa en Código Máquina no podrá funcionar.

AS

★ PUBLISHERS: Hobby Press , Amstrad Semanal
★ YEAR: 1987
★ CONFIG: ???
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD SEMANAL 1987
★ AUTOR: Alberto SUÑER
 



★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
 » Ahorrar  memoria  en  graficos  2    (Amstrad  Semanal)    SPANISH    LISTINGDATE: 2026-07-05
DL: 2
TYPE: PDF
SiZE: 1232Ko
NOTE: Supplied by archive.org ; 13 pages/PDFlib v1.6

Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop
Page créée en 382 millisecondes et consultée 5 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.