Dreamerm42
Karoshi Newbie
Mensajes: 34
|
|
« : 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
|
|
« 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_TEXTO50 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!
|
|
|
En línea
|
Ya no tengo balas, pero sabes... te pudieron haber evitado mucho dolor (Steven Seagal).
|
|
|
kabish
|
|
« Respuesta #2 : 05 de Diciembre de 2011, 10:44:31 pm » |
|
|
|
|
En línea
|
|
|
|
Dreamerm42
Karoshi Newbie
Mensajes: 34
|
|
« 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
|
|
« 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.
|
|
|
En línea
|
Ya no tengo balas, pero sabes... te pudieron haber evitado mucho dolor (Steven Seagal).
|
|
|
ryback
|
|
« 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
|
|
« 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
|
-- She Bops!
|
|
|
e_sedes
|
|
« 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í: 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
|
|
« 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
|
|
« 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.
|
|
|
En línea
|
sempre fun un valente corredor
|
|
|
Dreamerm42
Karoshi Newbie
Mensajes: 34
|
|
« Respuesta #10 : 10 de Diciembre de 2011, 09:25:15 pm » |
|
e_sedes, nada muchas gracias por tu ayuda!
|
|
|
En línea
|
|
|
|
e_sedes
|
|
« Respuesta #11 : 12 de Diciembre de 2011, 07:43:11 pm » |
|
Prueba esto. 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.
|
|
|
En línea
|
sempre fun un valente corredor
|
|
|
theNestruo
|
|
« 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...
|
|
|
En línea
|
theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
|
|
|
e_sedes
|
|
« 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
|
|
« Respuesta #14 : 16 de Diciembre de 2011, 08:25:45 pm » |
|
Esta noche probare el codigo y muchas gracias!!!
|
|
|
En línea
|
|
|
|
|