Cambiando textos

Started by Futu-block, May 10, 2010, 09:25:29 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block

he estado indagando pero no sé como hacer que una variable sea de texto...

empiezo: denomino una variable como string, le doy cierto "valor" no numerico y lo hago cambiar a mi antojo...
¿esto se puede hacer? es que un texto no se puede poner en un loop ¿no?

tambien he estado buscando en el foro y he visto que en un array guardaba los ''valores'' del texto o lo que tenia que poner en cada momento...


Prg

ahm, a qué te refieres?

mira, al igual que en java y sus Strings, en bennu puedes hacer:

[code language="bennu"]private
String micad;
begin
write_var(0,100,100,4,micad);
from z=0 to 25;
micad="mira mami, digo:  "+z;
say(micad);
frame;
end
end[/code]

y varías las string.

también puedes hacer:

[code language="bennu"]private
String micad[26],micads;
begin
write_var(0,100,100,4,micads);
from z=0 to 25;
micad[z]="mira mami, digo:  "+z;
end
z=0;
loop
if (++z>25)
z=0;
end
micads=micad[z];
frame;
end
end[/code]
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Futu-block

lo que quiero es (por ejemplo) que al principio de cada pantalla me ponga ''stage1'' el numero es el de la pantalla

no se si el texto tengo que guardarlo en un array, o es el valor de una variable...

aunque eso que has puesto de say igual es para cambiar el texto ¿no?

Drumpi

Las strings son un tipo de variable muy especial: puede almacenar cadenas de caracteres de tamaño indefinido (aunque creo que tienen un tope de 256 caracteres).
Puedes asignarles cualquier cadena entre comillas dobles:

string mi_cadena;
mi_cadena="esto es una prueba.";

y luego usarla con el comando WRITE, permanecerá en pantalla hasta que se borre. WRITE devuelve la id de ese texto en pantalla que puedes borrar con DELETE_TEXT, acción fundamental para no sobrepasar el límite de 256 textos en pantalla.
Si usas WRITE_STRING (o WRITE_VAR usando _STRING, creo) no necesitarás borrar el texto y volver a escribirlo para que se actualice: cualquier cambio de la string se reflejará automáticamente en pantalla (para los que usaron DIV, este método es distinto, DIV reflejaba los cambios directamente con write, pero este método es más estandar respecto al resto de tipos de variables).

Say escribe textos en la ventana de comandos, sólo para depuración.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

no tienen tope...

512 son los textos maximos en pantalla.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Sobre lo de la fase te recomiendo tener "stage" en una variable (o const...) tipo string y el número de fase en una variable de tipo int, así podrás poner:

write ( 0 , 400 , 300 , 4 , string_fase + int_fase );

Eso escribiría "stage 1", "stage 2", etc. Según el valor numérico de la variable int_fase.

Los textos en Bennu son mucho más complejos que en cualquier otro lenguaje, hay que usarlos mucho para comprenderlos del todo.

En cuanto a los 512 textos máximos en pantalla, ¿Es una GLOBAL que pueda cambiarse?

En casos en los que he podido necesitar más de 512 textos he usado write_in_map que genera un gráfico con el texto en lugar de pintar el texto, así no hay límites y puedes rotar, escalar, poner transparencias, etc :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

no es ninguna global, esta por codigo, antes en fenix, eran menos...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

Quote from: Futublog on May 10, 2010, 10:52:13 PM
lo que quiero es (por ejemplo) que al principio de cada pantalla me ponga ''stage1'' el numero es el de la pantalla

no se si el texto tengo que guardarlo en un array, o es el valor de una variable...

aunque eso que has puesto de say igual es para cambiar el texto ¿no?

lo que quice decir en mi código original es:
sí, si puedes modificar la cadena en cualquier momento. puedes poner

int zona; //zona en la que estas
String cad="Stage ",cadAux;
loop
cadAux=cad+zona
...
end
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)