graficos y movimiento

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Avatar de Usuario
jordigahan
Jack The Nipper
Mensajes: 181
Registrado: Mar Oct 30, 2007 11:10 pm
Ubicación: qui lo xa
Contactar:

Re: graficos y movimiento

Mensaje por jordigahan » Lun Nov 26, 2007 3:11 pm

na_th_an escribió:No entiendo qué tiene que ver ese listado con cambiar los atributos :? Le estás asignado un valor a A y luego impriméndolo. ¿Podrías explicarte mejor?

pues imagina que ahora quiero cabiarle los atributos de color metiendo por medio la instruccion attr en vez de usar ink
Imagen
Respuestas Acertadas: 3

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: graficos y movimiento

Mensaje por na_th_an » Lun Nov 26, 2007 3:38 pm

ATTR sirve para leer los atributos de color de una posición de carácter de pantalla. Para establecerlos o bien usas INK y PAPER o bien pokeas en la zona de atributos de pantalla.

En este enlace http://www.speccy.org/manuales/indice.html te puedes descargar todo el manual del +2 en PDF. Pilla el capítulo 8, que es un manual de BASIC buenísimo. Yo aprendí únicamente con ese bendito capítulo 8 :D

Avatar de Usuario
sromero
Nonamed
Mensajes: 1221
Registrado: Mar Abr 17, 2007 12:35 pm
Ubicación: Valencia
Contactar:

Re: graficos y movimiento

Mensaje por sromero » Lun Nov 26, 2007 4:48 pm

jordigahan escribió:pues imagina que ahora quiero cabiarle los atributos de color metiendo por medio la instruccion attr en vez de usar ink


Prueba lo siguiente:

POKE 22528, ATRIBUTO_A_PROBAR
POKE 22530, ATRIBUTO_A_PROBAR

(Cambia ATRIBUTO_A_PROBAR por un valor válido, claro).

La regla es:

POKE 22528+(Y*32)+X, VALOR

Saludos.
NoP / Compiler

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3984
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: graficos y movimiento

Mensaje por mcleod_ideafix » Mar Nov 27, 2007 1:38 am

Bueno, yo te explico con un poco más de detalle lo que quise hacer cuando escribir "Fireman" para uno de los concursos de Radastan.

Mi idea era emular la forma en que funcionan las maquinitas LCD de Game&Watch. En éstas, todos los movimientos posibles de los personajes ya etán grabados en la matriz de cristal líquido. Cuando pulsas ACL en estas maquinitas puedes ver todos esos movimientos:
Imagen

Lo que hice fue dibujar esa misma escena pero con la resolución del Spectrum:
Imagen

Pero cuidando de que todos los personajes "cayeran" siempre dentro de uno o muy pocos cuadrados de atributos y que un cuadro de atributo no perteneciera a dos muñequitos a la vez:
Imagen

Así, colocando los cuadrados de atributos de los muñecos que no quiero que se vean a "tinta verde, papel verde", los hago desaparecer. Los que quiero que se vean los pongo a "tinta negra, papel verde", y éste es el resultado:
Imagen

El truco como ves, consiste no en imprimir píxeles, que es lento, sino en encender un grupo de ellos escribiendo un valor de atributo (en BASIC es rápido, pero es que esto mismo en código máquina se hace con una única instrucción, así que más rápido que esto, nada)

Para que puedas probar tú mismo, aquí tienes un pequeño listado BASIC en el que se usa esta misma técnica para hacer una animación simple. Las líneas 10 y 20 se encargan de dibujar un patrón de "fotogramas" por toda la fila 11 de pantalla, que consiste en un palito en diferentes posiciones (horizontal, diagonal, vertical, otra vez diagonal, horizontal, etc...). Una vez ejecutada, parecerá que el palito va rodando mientras se desplaza por la pantalla de izquierda a derecha, luego de derecha a izquierda, y vuelta a empezar. El uso de PAUSE 12 es para que la animación esté sincronizada con la pantalla y no se vea ni demasiado deprisa ni demasiado lenta. Las direcciones "pri" y "fin" del bloque de atributos a modificar lo calculo con la formulita que te ha dado antes sromero. Corresponden a una línea completa (32 caracteres) de atributos en la fila 11.

Código: Seleccionar todo

10 LET a$="|/-\"
20 PRINT AT 11,0;: FOR n=1 TO 8: PRINT INK 7;a$;: NEXT n
20 LET pri=22528+11*32
30 LET fin=22528+11*32+31
40 FOR n=pri+1 TO fin
50 POKE n,56: POKE n-1,63: PAUSE 12
60 NEXT n
70 FOR n=fin-1 TO pri STEP -1
80 POKE n,56: POKE n+1,63: PAUSE 12
90 NEXT n
100 GO TO 40
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
jordigahan
Jack The Nipper
Mensajes: 181
Registrado: Mar Oct 30, 2007 11:10 pm
Ubicación: qui lo xa
Contactar:

Re: graficos y movimiento

Mensaje por jordigahan » Sab Dic 01, 2007 4:44 pm

gracias por la explicacion, es muy completa.

entiendo lo que hace el programa, pero no entiendo lo de la formula. osea por ejemplo como cambiar los atributos en una zona especifica o que hace la sentencia poke.
Imagen
Respuestas Acertadas: 3

Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Re: graficos y movimiento

Mensaje por Bubu » Sab Dic 01, 2007 5:30 pm

Quizás, y para evitar el uso de POKE, podrías usar un PRINT OVER 1; INK 0; " "; OVER 1; INK 7; " "

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3984
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: graficos y movimiento

Mensaje por mcleod_ideafix » Mar Dic 04, 2007 12:10 am

Usar PRINT en lugar del POKE es válido, pero es leeeeeeento, y de lo que se trata es de arañar tiempo en BASIC sin meterse en C/M. Ya de por sí es lento, como para que encima lo hagamos más lento con cosas como el PRINT o el SCREEN$ (¿habrase visto rutina más lenta que esa?... bueno, sí, el CIRCLE)
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
jordigahan
Jack The Nipper
Mensajes: 181
Registrado: Mar Oct 30, 2007 11:10 pm
Ubicación: qui lo xa
Contactar:

Re: graficos y movimiento

Mensaje por jordigahan » Sab Dic 15, 2007 9:34 pm

haber si alguien puede echarme una mano con esto

necesito que una linea vertical de 5 caracteres se desplaze hacia abajo y que cuando llegue abajo se repita el proceso sin usar la instruccion for/next

haber si alguien lo saca.
Imagen
Respuestas Acertadas: 3

Avatar de Usuario
radastan
Phantomas
Mensajes: 2201
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: graficos y movimiento

Mensaje por radastan » Sab Dic 15, 2007 11:50 pm

jordigahan escribió:haber si alguien puede echarme una mano con esto

necesito que una linea vertical de 5 caracteres se desplaze hacia abajo y que cuando llegue abajo se repita el proceso sin usar la instruccion for/next

haber si alguien lo saca.


10 CLS
20 LET a=1
200 LET a=a+1: GO TO 200+a
219 PRINT AT a,0;" ": PRINT AT a+1,0;"ooooo": GO TO 200
220 LET a=1: PRINT AT 20,0;" ": GO TO 200

GOTO es tu amigo
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Re: graficos y movimiento

Mensaje por Bubu » Dom Dic 16, 2007 1:57 am

Efestiviwonder, GO TO. Grandiosa instrucción que está poco de moda, muy perseguida y odiada por la programación actual.
Te paso otra opción diferente a la del amigo radastan. Esta es más larga, pero quizás lo entiendas mejor ya que él usa un salto a una línea inexistente, y como el ZX salta a la siguiente que exista, pues eso, jiji.

Imagen


Por cierto, ¿qué es lo que estás haciendo? ¿un juego de coches tal vez, siendo la línea vertical la línea de la carretera? ¿un juego de disparos?

Avatar de Usuario
jordigahan
Jack The Nipper
Mensajes: 181
Registrado: Mar Oct 30, 2007 11:10 pm
Ubicación: qui lo xa
Contactar:

Re: graficos y movimiento

Mensaje por jordigahan » Dom Dic 16, 2007 2:22 am

gracias bubu y radastan por las respuestas, aunque al final acabare usando el metodo de bubu, que me convence mas.
se supone que es un secretillo, pero es un juego de coches. ains! no me puedo resistir, una screen$

Imagen
intento que este listo para el proximo concurso pero no se si lo terminare a tiempo.
Última edición por jordigahan el Dom Dic 16, 2007 2:36 am, editado 1 vez en total.
Imagen
Respuestas Acertadas: 3

Bubu
Freddy Hardest
Mensajes: 544
Registrado: Mié Oct 31, 2007 12:15 am

Re: graficos y movimiento

Mensaje por Bubu » Dom Dic 16, 2007 2:27 am

¡¡ ole ole oooooole !!

¡¡ jueguecito al canto !! Sí señor. Oyes, si quieres te echo una mano y te hago de beta tester. Te advierto que trabajo buscando errores en software, así que no se me va a escapar ni uno. Además, yo también estoy intentando hacer uno para el concurso, jiji. A ver qué tal. Lo que pasa es que vista la calidad de los juegos del año pasado, no tengo nada que hacer, pero quiero divertirme con esto que de eso se trata.


P.ej. te comento que no queda bien poner OPTIONS: 1, 2, 3 y 4, y que la cuarta sea también OPTIONS, pero bueno, esta observación es quizás demasiado janderclander.
Última edición por Bubu el Dom Dic 16, 2007 2:28 am, editado 1 vez en total.

Gandulf
Nonamed
Mensajes: 1067
Registrado: Lun May 07, 2007 10:06 pm

Re: graficos y movimiento

Mensaje por Gandulf » Dom Dic 16, 2007 2:27 am

Ánimo con ese juego!
Un saludo,

Gandulf

Avatar de Usuario
jordigahan
Jack The Nipper
Mensajes: 181
Registrado: Mar Oct 30, 2007 11:10 pm
Ubicación: qui lo xa
Contactar:

Re: graficos y movimiento

Mensaje por jordigahan » Dom Dic 16, 2007 2:38 am

pues tienes razón, voy a quitarlo.
Imagen
Respuestas Acertadas: 3

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3984
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: graficos y movimiento

Mensaje por mcleod_ideafix » Mar Dic 18, 2007 11:31 am

jordigahan escribió:necesito que una linea vertical de 5 caracteres se desplaze hacia abajo y que cuando llegue abajo se repita el proceso sin usar la instruccion for/next

A mi se me ocurre algo como esto...

Código: Seleccionar todo

10 LET f=0: LET fa=21
20 PRINT CHR$ 22+CHR$ fa+CHR$ 0+"     "+CHR$ 22+CHR$ f+CHR$ 0+"XXXXX": LET fa=f: LET f=(f+1 AND f<>21)+(0 AND f=21): GO TO 20
Web: ZX Projects | Twitter: @zxprojects

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados