Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: Dreamerm42 en 05 de Diciembre de 2011, 05:54:51 pm



Título: Mover texto por la pantalla
Publicado por: Dreamerm42 en 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.


Título: Re: Mover texto por la pantalla
Publicado por: ryback en 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!  :)


Título: Re: Mover texto por la pantalla
Publicado por: kabish en 05 de Diciembre de 2011, 10:44:31 pm
http://karoshi.auic.es/index.php?topic=171.0 (http://karoshi.auic.es/index.php?topic=171.0)


Título: Re: Mover texto por la pantalla
Publicado por: Dreamerm42 en 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!!!


Título: Re: Mover texto por la pantalla
Publicado por: ryback en 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.  :)


Título: Re: Mover texto por la pantalla
Publicado por: ryback en 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.


Título: Re: Mover texto por la pantalla
Publicado por: MsxKun en 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.


Título: Re: Mover texto por la pantalla
Publicado por: e_sedes en 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.


Título: Re: Mover texto por la pantalla
Publicado por: Dreamerm42 en 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.


Título: Re: Mover texto por la pantalla
Publicado por: e_sedes en 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.  ;)


Título: Re: Mover texto por la pantalla
Publicado por: Dreamerm42 en 10 de Diciembre de 2011, 09:25:15 pm
e_sedes, nada muchas gracias por tu ayuda! :P :)


Título: Re: Mover texto por la pantalla
Publicado por: e_sedes en 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.  ;)


Título: Re: Mover texto por la pantalla
Publicado por: theNestruo en 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... :D
HOLA......CARACOLA......PEPSICOLA......JAJAJA


Título: Re: Mover texto por la pantalla
Publicado por: e_sedes en 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?


Título: Re: Mover texto por la pantalla
Publicado por: Dreamerm42 en 16 de Diciembre de 2011, 08:25:45 pm
Esta noche probare el codigo y muchas gracias!!!


Título: Re:Mover texto por la pantalla
Publicado por: Dreamerm42 en 18 de Diciembre de 2014, 12:20:03 am
16 de diciembre de 2011, un poco mas y posteo ayer para hacer los años justos, como pasa el tiempo madre mia...

Bueno voy a retomar esto y por ... que lo termino minimamente!

Gracias a los que me respondieron en su dia :)

un saludo a todos!


Título: Re:Mover texto por la pantalla
Publicado por: AxelStone en 13 de Enero de 2015, 12:31:10 pm
Muy majo si señor.


Título: Re: Mover texto por la pantalla
Publicado por: yodh en 09 de Septiembre de 2015, 09:25:37 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?


   Hola e_sedes... a ver si te puedo ayudar: en un juego que estoy haciendo actualmente que se llama Cavernator (lo digo porque está bastante avanzado, no son 4 líneas, a parte de que este juego lo voy a acabar sí o sí  ;D), me encontré con ese mismo (creo), problema de la basurilla al final de la frase (exacto, en sc5). Tal como tú no lo entendía y era muy molestoso y al igual feo a la vista. No me digas por qué, pero se me ocurrió comenzar la frase en la posición ´X´ (de ´X,199), en lugar de en ´uno´ ponerla una posición a la izquierda oséase claro, en la posición ´cero´... y voalá (o como se escriba), ¡todo perfecto al final de la frase!