Karoshi MSX Community
05 de Julio de 2021, 12:56:43 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2
  Imprimir  
Autor Tema: Mover texto por la pantalla  (Leído 9287 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Dreamerm42
Karoshi Newbie
*
Mensajes: 34


Email
« : 05 de Diciembre de 2011, 05:54:51 pm »

¿Como podria desplazar un texto de derecha a izquierda por la pantalla sin que se deforme?

Sobre todo en los modos grafico...

Si alguien pudiera ponerme un ejemplo en listado basic, lo agradeceria mucho.


Gracias.
En línea
ryback
Karoshi Maniac
****
Mensajes: 315



WWW Email
« Respuesta #1 : 05 de Diciembre de 2011, 08:28:40 pm »

Ahí va un ejemplillo en Basic de una revista:

10 CLS:WIDTH40
20 A$="TEXTO A DESPLAZAR..."
30 P=1
40 FOR I=1 TO LONGITUD_TEXTO
50 LOCATE0,0:PRINT MID$(A$,P,40)
60 FOR X=0 TO TIEMPO_RETARDO:NEXT X
70 P=P+1
80 NEXT I
90 GOTO 20

Esto te debería funcionar tanto en SCREEN0 como en SCREEN1.

La línea 60 te sirve para ajustar la velocidad con la que se desplaza el texto.

Espero que te sirva. Saludos!  Smiley
En línea

Ya no tengo balas, pero sabes... te pudieron haber evitado mucho dolor (Steven Seagal).
kabish
Karoshi Maniac
****
Mensajes: 470


caspaflims@hotmail.com
« Respuesta #2 : 05 de Diciembre de 2011, 10:44:31 pm »

http://karoshi.auic.es/index.php?topic=171.0
En línea
Dreamerm42
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #3 : 06 de Diciembre de 2011, 12:42:13 pm »

Rayback, muchas gracias, hace lo que busco en los modos de pantalla 0 y 1, pero me gustaria poder probar con los modos graficos.


Kabish, como cargo ese codigo desde BASIC??!!!


Gracias a los dos!!!
En línea
ryback
Karoshi Maniac
****
Mensajes: 315



WWW Email
« Respuesta #4 : 07 de Diciembre de 2011, 08:26:49 am »

Hola! No se si pretendes hacerlo en Basic o en Ensamblador (de lo segundo seguro que kabish te explicará mejor, yo no tengo mucha idea).

Si quieres hacerlo en Basic, en SCREEN2, el código es casi el mismo pero cambiando el LOCATE por PRESET, el PRINT por PRINT#1 y añadiendo un borrado de la línea para cada iteración del bucle (por ejemplo, con un LINE del mismo color que el fondo). El resultado es un poco triste debido a la lentitud del modo gráfico en Basic.

En código máquina seguro que funciona mucho mejor, pero eso ya es otra historia.  Smiley
En línea

Ya no tengo balas, pero sabes... te pudieron haber evitado mucho dolor (Steven Seagal).
ryback
Karoshi Maniac
****
Mensajes: 315



WWW Email
« Respuesta #5 : 07 de Diciembre de 2011, 09:21:19 am »

Ahí va el ejemplillo Basic para SCREEN2:

10 SCREEN2:CLS:COLOR15,1,1
20 OPEN"GRP:"AS#1
30 A$="HOLA......CARACOLA......PEPSICOLA......JAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJA"
40 P=1
50 FOR I=1 TO 100
60 PRESET(0,0):PRINT#1,MID$(A$,P,32)
70 FOR X=0 TO 60:NEXT X
80 LINE(0,0)-(255,6),1,BF
90 P=P+1
100 NEXT I
110 GOTO 30

Si lo haces más estrecho no se nota tanto la lentitud como si lo haces en todo el ancho de la pantalla, pero igualmente se nota.
En línea

Ya no tengo balas, pero sabes... te pudieron haber evitado mucho dolor (Steven Seagal).
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #6 : 07 de Diciembre de 2011, 01:00:56 pm »

Lo estais enfocando mal. Olvidaos de si es modo grafico o no. Son TILES al igual que Screen 1 y se mueven igual.
Vpokeando cada caracter en la tabla de nombres de la VRAM. Ira igual de rapido que en Screen 1.
En línea

--

Cindy Lauper She Bops!
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #7 : 07 de Diciembre de 2011, 02:55:58 pm »

Adaptando el ejemplo de ryback al uso de tiles, podría quedar algo así:
Código:
10 screen 1:width32:keyoff
20 color15,1,1:SCREEN 2
30 poke &hfcaf,1: ' para usar PRINTs
40 for i=32*8 to 90*8:      ' pasa la fuente de texto a tiles
50 vpoke(i),peek(&h1bbf+i): ' fuente
60 vpoke(i+&h2000),241:     ' color
70 next:                    '
80 cls
100 A$="                                HOLA......CARACOLA......PEPSICOLA......JAJAJAJAJAJA "
110 P=1
120 FOR I=1 TO 83
130 locate 0,0:PRINT MID$(A$,P,32)
140 FOR X=0 TO 60:NEXT X
150 P=P+1
160 NEXT I
170 goto 110
Aquí se usa el vpoke ese para poder usar prints en sc2, está comentado por algún lado del foro. Es muy útil si quieres hacer cosillas en BASIC.
En línea

sempre fun un valente corredor
Dreamerm42
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #8 : 09 de Diciembre de 2011, 02:25:32 pm »

E_sedes y si en vez de Screen2 quisiera usar modos mayores, tipo 5,7,8? el vpokeo no tira en esos modos, como se que direcciones o como modifico el codigo para usarlo en esos modos?


Mil gracias.
En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #9 : 10 de Diciembre de 2011, 01:34:08 pm »

Esos modos son bitmap, no de tiles, y la cosa cambia totalmente. Supongo que con COPYs podrías hacer algo, incluso más suave. Pero a mi no me preguntes, que yo soy hombre de primera generación y de screen 3 parriba estoy bastante pez.  Wink
En línea

sempre fun un valente corredor
Dreamerm42
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #10 : 10 de Diciembre de 2011, 09:25:15 pm »

e_sedes, nada muchas gracias por tu ayuda! Tongue Smiley
En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #11 : 12 de Diciembre de 2011, 07:43:11 pm »

Prueba esto.
Código:
10 SCREEN5:CLS:COLOR15,1,1
20 OPEN"GRP:"AS#1
30 A$="HOLA......CARACOLA......PEPSICOLA......JAJAJA "
50 FOR I=1 TO len(A$)
60 PRESET(248,0):PRINT#1,MID$(A$,I,1)
70 FOR X=0 TO 60:NEXT X
80 copy (8,0)-(255,7) to (0,0)
100 NEXT I
110 GOTO 50

Creo que es la primera vez que me meto con COPY. Debería aprender algo de la 2ª generación para arriba.  Wink
En línea

sempre fun un valente corredor
theNestruo
Karoshi Lover
***
Mensajes: 236


Email
« Respuesta #12 : 14 de Diciembre de 2011, 11:03:44 pm »

Ya que estamos en modos bitmap se puede rizar el rizo y hacer el scroll pixel a pixel:

10 DEFINTA-Y:DEFSTRZ:SCREEN5,,0:CLS:COLOR15,4,4:OPEN"grp:"AS#1
20 Z="HOLA......CARACOLA......PEPSICOLA......JAJAJA "
30 FORI=1TOLEN(Z):PRESET(248,0):PRINT#1,MID$(Z,I,1):GOSUB40:NEXT:GOTO30
40 FORJ=0TO5:COPY(1,0)-(255,7)TO(0,0):TIME=0
50 IFTIME=0GOTO50
60 NEXT:RETURN


Explicación:
10-20: Inicialización
30: Bucle principal donde se añaden los caracteres y se llama a 40 que hace scroll pixel a pixel hasta el siguiente caracter
40-60: En vez de hacer un copy moviendo 8 píxeles tras pintar cada caracter, hacemos 6 copys moviendo un píxel (6 para que quede como en SCREEN0, se puede cambiar a 8 para que quede como en SCREEN1). Después de cada copy se espera al menos un tick para pseudo-sincronizar con el refresco de pantalla, porque si no puede caer a medio copy el refresco y las letras parecen ponerse en cursiva. Para hacer esta pseudo-sincronización, simplemente se pone TIME a 0 y se espera a que cambie de valor.

P.D.: Me parece increíble que aún nadie haya hecho la tontería... Cheesy
HOLA......CARACOLA......PEPSICOLA......JAJAJA
En línea

theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #13 : 15 de Diciembre de 2011, 12:54:46 pm »

Y ya que estamos, tengo una cuestión. Al mirar estas cosas me acabo de dar cuenta de algo. Si haces un print#1 en screen 2/4 dentro de los últimos 8 pixels, te recorta el caracter y printa lo que quepa en la pantalla. Si lo haces de screen 5 para arriba también recorta, pero imprime basurilla. Me resulta curioso, ¿será un bug del BASIC?
En línea

sempre fun un valente corredor
Dreamerm42
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #14 : 16 de Diciembre de 2011, 08:25:45 pm »

Esta noche probare el codigo y muchas gracias!!!
En línea
Páginas: [1] 2
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!