Manejando caracteres

Programando el Amstrad en BASIC, C, etc.
abalore
Forero habitual
Forero habitual
Mensajes: 152
Registrado: Dom 09 Jul , 2006 8:59 pm

Re: problema con basic

Mensajepor abalore » Dom 05 Jul , 2015 1:38 pm

Aquí tienes un ejemplo completo usando el modo XOR:
Adjuntos
trans.dsk
(190.21 KiB) Descargado 85 veces

carrasco79
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Mar 26 Jun , 2012 3:34 pm

Re: problema con basic

Mensajepor carrasco79 » Dom 05 Jul , 2015 3:32 pm

Ok , funciona¡¡¡¡
Una ultima cosa, como borro el rastro de mis movimientos' antes con poner un carácter en blanco ya era suficiente symbol chr(0)+chr(243)+chr(0)

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: problema con basic

Mensajepor ronaldo » Dom 05 Jul , 2015 5:33 pm

Tienes 2 opciones:
  1. En el ejemplo de @abalore, si pintas un carácter en modo XOR (el modo transparente CHR$(22)+CHR$(1)), volver a pintar el mismo carácter en el mismo sitio restaura el fondo. Esto es válido si sólo pintas 1 carácter: si pintas varios en el mismo sitio mezclando colores ya no sirve.
  2. Desactiva el modo XOR (con PRINT CHR$(22)+CHR$(0)) y luego pinta el espacio en blanco o el fondo en el lugar donde está el carácter que quieres borrar.
En los enlaces que te he puesto en los anteriores posts hay explicaciones detalladas de todo esto y más cosas sobre como utilizar el modo transparente y crear sprites con caracteres.

carrasco79
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Mar 26 Jun , 2012 3:34 pm

Re: problema con basic

Mensajepor carrasco79 » Lun 25 Jul , 2016 5:55 pm

Hola ,despues de un año
Pues sigo con el mismo problema
En el bloc explica muy bien como definir sprites
Pero el problema biene cuando mueves el sprite, si ya tienes el fondo echo. si activo modo transparente
Ejem.hombre$=chr$240+chr$ 248+chr$240

Chr$240 esta definido como cero
Symbol 240,0,0,0,0,0,0,0,0
Pues sucede que si activó este modo cada vez. Que mueves el sprite de derecha a izquierda. No se borra el anterior. Movimientos

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: problema con basic

Mensajepor ronaldo » Lun 25 Jul , 2016 6:36 pm

Hola @carrasco79,

No necesitas definirte un carácter como todo 0's porque ya lo tienes: el carácter espacio (PRINT " ").

Si no se te borra un carácter en la pantalla sólo puede ser por 2 motivos:
  1. Porque tienes activado el modo transparente (lo que haría que los píxeles color fondo no se pinten, impidiéndote borrar con ellos otros píxeles).
  2. Porque no estás pintando el carácter de borrado (espacio, o tu carácter 240) en la posición adecuada.
Aquí te pongo un ejemplo en BASIC moviendo un sprite diseñado con varios carácteres en modo transparente por la pantalla:

Código: Seleccionar todo

'
' Inicializacion y definicion de variables
' T$: Activar modo transparente
' TN$: Desactivar modo transparente
'
10 DEFINT A-Z:MODE 0
20 T$=CHR$(22)+CHR$(1)
30 TN$=CHR$(22)+CHR$(0)

' El personaje estara en x,y. Lo dibujamos la primera vez
40 x=1:y=10:GOSUB 1000

' Bucle principal
' Mueve personaje a izquierda y derecha al pulsar
' las teclas del cursor
50 if NOT INKEY(8) THEN if x>1 THEN GOSUB 1100:x=x-1:GOSUB 1000
60 if NOT INKEY(1) THEN if x<20 THEN GOSUB 1100:x=x+1:GOSUB 1000
70 GOTO 50
'===============================
' Dibujar al personaje
'===============================
' Activa modo transparente y pon cursor en x,y
1000 PRINT T$;:LOCATE x,y
' Dibuja al personaje
1010 PRINT CHR$(15);CHR$(1);CHR$(240);CHR$(15);CHR$(2);CHR$(8);CHR$(241);CHR$(15);CHR$(3);CHR$(8);CHR$(242);
' Desactiva modo transparente
1020 PRINT TN$;
1030 RETURN

'===============================
' Borrar al personaje
'===============================
' Asumimos que no el modo transparente no esta activo
' y pintamos un espacio en la posicion del personaje
1100 LOCATE x,y:PRINT " ";
1110 RETURN
El ejemplo mezcla los caracteres 240, 241 y 242 en colores amarillo (1), cian (2) y rojo (3). No los he definido, por lo que los 3 caracteres son los de la ROM sin modificar, pero no importa porque sólo es para que lo veas como ejemplo.
La subrutina en 1000 dibuja el sprite del personaje mezclando los 3 caracteres, activando el modo transparente justo antes de dibujar, y desactivándolo después. La subrutina en 1100 borra el sprite pintando un espacio encima, asumiendo que el modo transparente está desactivado (si no lo estuviera, habría que desactivarlo primero).

Espero que el ejemplo te sirva de ayuda.

carrasco79
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Mar 26 Jun , 2012 3:34 pm

Re: problema con basic

Mensajepor carrasco79 » Mar 26 Jul , 2016 8:18 am

Gracias , hoy. Probare aver que tal
Pero ya veo donde fallaba yo

carrasco79
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Mar 26 Jun , 2012 3:34 pm

Re: problema con basic

Mensajepor carrasco79 » Mar 26 Jul , 2016 10:58 pm

Funciona. Pero el efecto es muy molesto y parpadeante
Otra cosa cuando el sprite se mueve de arriba,abajo?
Como borro el residuo? Con un espacio en blanco o defino un sprite
Saludos .

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: problema con basic

Mensajepor ronaldo » Jue 28 Jul , 2016 9:42 pm

Sí, en BASIC es normal que los redibujados te parpadeen haciendo pintados como este, porque no es suficientemente rápido y te pilla el retrazado del monitor a medio dibujar.

No sé a lo que te refieres exactamente con el residuo al mover en vertical (supongo que será el anterior dibujado). En el código que te he pasado sólo tienes que cambiar las dos líneas donde se comprueba el teclado para que actualicen la Y en lugar de la X y podrás mover el objeto en vertical. El borrado es exactamente igual: pintas un espacio encima del objeto. De hecho, puedes probar a añadir un par de líneas al código que te he pasado, justo después de las líneas que comprueban el teclado, y en ellas comprobar las teclas de arriba y abajo y actualizar la Y. Te debe funcionar igual, sin tocar nada más del código.

carrasco79
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Mar 26 Jun , 2012 3:34 pm

Re: problema con basic

Mensajepor carrasco79 » Lun 03 Jul , 2017 5:51 pm

Muy buenas compañeros ,pues como cada año aquí estoy con mi hobby veraniego ,intentar programar con basic jejeje
Pues nada que esta semana me pondré manos a la obra y muchísimas gracias a todos por vuestra ayuda ya expondré mis dudas un saludo

carrasco79
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Mar 26 Jun , 2012 3:34 pm

Re: problema con basic

Mensajepor carrasco79 » Lun 03 Jul , 2017 6:49 pm

Este es el caso tengo un fondo de pantalla dibujado y el sprite lo borra
Se puede guardar de algún modo?

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6965
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: problema con basic

Mensajepor MiguelSky » Lun 03 Jul , 2017 7:09 pm

[*] En el ejemplo de @abalore, si pintas un carácter en modo XOR (el modo transparente CHR$(22)+CHR$(1)), volver a pintar el mismo carácter en el mismo sitio restaura el fondo. Esto es válido si sólo pintas 1 carácter: si pintas varios en el mismo sitio mezclando colores ya no sirve.
En los enlaces que te he puesto en los anteriores posts hay explicaciones detalladas de todo esto y más cosas sobre como utilizar el modo transparente y crear sprites con caracteres.

carrasco79
Lechoncillo
Lechoncillo
Mensajes: 17
Registrado: Mar 26 Jun , 2012 3:34 pm

Re: problema con basic

Mensajepor carrasco79 » Lun 12 Feb , 2018 1:50 pm

Que sigo intentándolo de vez en cuando
Lo de no borrar el fondo al final lo conseguí

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6965
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: problema con basic

Mensajepor MiguelSky » Lun 12 Feb , 2018 6:05 pm

=D> =D> =D> Lo importante es la constancia.


¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot]


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic