Hola, he probado las herramientas que trae la beta publica 5.5 y esta fenomenal, pero sigo hechando de menos un comando basico que para hacer videojuegos de aventura grafica me iria muy bien, o incluso para dejar constancia de los jugadores en los creditos de mi juego.
Se ha pensado en incorporar un comando que permita ingresar texto desde teclado directamente asignado a una variable?
Puedo hacerlo perfectamente con lo que ya tiene Gemix, pero es algo bastante laborioso y limitado.
INPUT como en Qbasic
- erkosone
- Posts: 10657
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
INPUT como en Qbasic
Last edited by erkosone on Tue Mar 10, 2009 1:22 pm, edited 1 time in total.
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Limitacion..
Hola erkos
Te deje una rutina de ejemplo en otro hilo donde lo preguntastes, hacer una rutina de default de esa es bastante dificil con la logica que tiene un lenguaje como DIV que es particular, mas adelante lo intentare con mas calma para varar si se puede implementar algo bueno, de momento usa la rutina, en todo caso lo que pides es simplemente una operacion con una cadena de texto y usando el valor de la variable ASCII:
Como ves es una operacion muy muy simple, si necesitas mas ayuda pon un post en "Mesa de Ayuda".
Hasta pronto
Te deje una rutina de ejemplo en otro hilo donde lo preguntastes, hacer una rutina de default de esa es bastante dificil con la logica que tiene un lenguaje como DIV que es particular, mas adelante lo intentare con mas calma para varar si se puede implementar algo bueno, de momento usa la rutina, en todo caso lo que pides es simplemente una operacion con una cadena de texto y usando el valor de la variable ASCII:
Code: Select all
global
string txt_input;
begin
txt_input += ascii;
...
end
Hasta pronto
- erkosone
- Posts: 10657
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
Re: Limitacion..
Gracias CicTec.
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
- erkosone
- Posts: 10657
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
Re: Limitacion..
He estado haciendo unas pruebas sobre una rutina para hacer lo que te comentava y me ha salido esto.
Se puede mejorar muchisimo pero es algo muy muy basico, si a alguien le sirve para algo pues ahi esta.
Gracias igualmente por la ayuda CicTec.
http://www.megaupload.com/?d=L98G1TQM
Se puede mejorar muchisimo pero es algo muy muy basico, si a alguien le sirve para algo pues ahi esta.
Gracias igualmente por la ayuda CicTec.
http://www.megaupload.com/?d=L98G1TQM
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
- BigHead
- Posts: 1277
- Joined: Sun Nov 30, 2008 1:28 pm
- Contact:
Re: Limitacion..
hola erkosone, mis saludos, quiza deberías cambiar el titulo del tema con algo referente al tema de entradas por teclado o algo así, mas que nada pq asi si otro usuario tiene dudas o busca info sobre el mismo tema, podrá dar con este tema más facilmente y eso es una ayuda bastante grande. Mas saludos y suerte con lo que estas haciendo 
Hañime Bushi, nekonoashi
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: INPUT como en Qbasic
Hola erkosone, he bajado y probado tu rutina, es bastante buena, aunque el codigo lo puedes mejorar bastante, mira esa:
inputchar.zip
Puedes personalizarla como prefieres (en cuanto a velocidad de input), posiblemente te puede ayudar en algo.
Saludos y gracias por el aporte
inputchar.zip
Puedes personalizarla como prefieres (en cuanto a velocidad de input), posiblemente te puede ayudar en algo.
Saludos y gracias por el aporte
- erkosone
- Posts: 10657
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
Re: INPUT como en Qbasic
Ya lo prove CicTec, muy buena y simple.
Yo segire a la espera de ver un dia la función INPUT en Gemix jeje, la hecho mucho de menos de otros lenguajes, pero como ves hay forma de husar algo parecido.
Me encanta Gemix tio, Enhorabuena a todos los que lo estan tirando para adelante.
Yo segire a la espera de ver un dia la función INPUT en Gemix jeje, la hecho mucho de menos de otros lenguajes, pero como ves hay forma de husar algo parecido.
Me encanta Gemix tio, Enhorabuena a todos los que lo estan tirando para adelante.
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: INPUT como en Qbasic
Gracias 
Si, lo de la funcion de input mas adelante lo intentare, si se puede hacer algo bueno y flexible lo añado sin duda, tranquilo.
Si, lo de la funcion de input mas adelante lo intentare, si se puede hacer algo bueno y flexible lo añado sin duda, tranquilo.
- matt64
- Posts: 124
- Joined: Sun Oct 05, 2008 6:17 am
- Location: Villa Luzuriaga, Buenos Aires
- Contact:
Re: INPUT como en Qbasic
Estube viendo algunas cosas de un cd divmania que Gino subio hace tiempos, y me parecio interesante este código.
Sin duda, esta para echarle un ojo y ver en que puede inspirar...
Code: Select all
/*
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º ViTAL-input 1.0.1 º
º º
º autor: Jos‚ Antonio Migens G¢mez º
º nick : ViTAL º
º email: migens@teleline.es º
º º
º edici¢n especial para DiVman¡a 8 º
º º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
*/
PROGRAM Ejemplo_Input;
PRIVATE
string Var1;
string Var2;
BEGIN
Set_mode(640480);
Write(0,20,100,0,"Escriba su nombre:");
Var1=ViTAL_Input(0,150,100,20,"",23); //23=rojo
IF (var1=="");
WRITE(0,20,300,0,"Se cancel¢ el Input. Pulsa X para salir");
ELSE
Var2="Gracias "+var1+" por usar ViTAL-Input. Pulsa X para salir";
write(0,20,300,0,var2);
END
loop
if (key(_x)); exit("ViTAL-iNPUT 1.0",0); end
frame;
end
END
/*
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍViTAL-InputÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍv 1.0.1Í»
º º
º ViTAL-iNPUT(Fuente,x_text,y_text,int n_carac_max,string Txt_pred, º
º byte color_cursor) º
º º
º Fuente -> nombre o numero de fuente a mostrar. º
º X,Y -> coordenadas donde se sit£a el input. º
º int n_carac_max -> n£mero de car cteres m ximos permitidos. º
º String txt_pred -> texto predeterminado del input. º
º Byte color_cursor -> color del cursor (0-255) º
º º
º NOTA: El timer[9] est reservado para ViTAL-iNPUT. º
º º
º Uso: Copie este documento al final de cualquier prg DiV2. Use la sintaxisº
º descrita y si quiere recoger el resultado en una variable use: º
º º
º variable=vital_input(... º
º º
º e-mail: vitalweb@electronic-soft.com º
º º
º licencia de uso: Esta librer¡a es de uso libre siempre y cuando se º
º respeten las siguientes condiciones. Estos comentarios º
º deben permanecer intactos en todos los c¢digos de º
º programas en que se utilice. Cualquier modificaci¢n que º
º se realice a la rutina debe ser documentado y remitido º
º a su autor v¡a e-mail. No se permite su uso para uso º
º en programas con fines comerciales si no se da consenti-º
º miento expreso v¡a e-mail de su autor. El autor reserva º
º todos los derechos sobre esta rutina. º
º - Esta rutina se entrega sin ningun tipo de garant¡a º
º de da¤os en el pc donde se ejecute.No se autoriza la º
º utilizaci¢n de la rutina sin la aceptaci¢n de esta º
º licencia. º
º º
º º
º La rutina no es quiz s la m s º
º brillantes de todas las imaginables, º
º no obstante no se ha cambiado su º
º concepci¢n por encontrar º
º que posiblemente es la m s r pida º
º de las existentes. º
º ViTAL º
º º
º º
ÈÍÍhttp://www.pagina.de/vitalÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
*/
FUNCTION ViTAL_INPUT(V_Fuente,V_x_Text,V_y_Text,int V_Carac_Max,string V_Txt_Pred,byte color_cursor);
PRIVATE
//Variables de configuraci¢n
//Retardo en milisegundos del parpadeo del cursor
V_G_Retardo=100;
//Admitir input en blanco? True, False
V_Acepta_0=False;
//Admitir cancelar con ESC? -> ViTAL_Input devolver "" -> True, False
V_Acepta_ESC=True;
//Admitir introducir espacios en blanco al principio¨? -> True, False
V_Acepta_Spc_in=False;
//Retardo en milisegundos que tardar en repetirse una letra
V_Retar_Letra=50;
//Si la rutina no detecta correctamente la altura de la fuente
//indicarla aqu¡ directamente
V_Guion_Height=0; //0= autodetectar >0 altura en pixels del cursor
//C¢digo de las letras b sicas
V_Letras[50]= 30,18,23,24,22, /* a-u */
2,3,4,5,6,7,8,9,10,11, /* 1-0 */
41,12,13,27,51,52,53,86, /* §'+,.-<*/
16,17,19,20,21,25, /* Q-P */
31,32,33,34,35,36,37,38,39, /* A-¥ */
44,45,46,47,48,49,50, /* Z-M */
57,43, /*space € */
55,74,78,28; /* / *-+ (tecla num) */
V_bn_teclas[11]=71,72,73,75,76,77,79,80,81,82,83;
STRING V_Bn_Equiv="7894561230.";
//Caracteres de las letras b sicas
STRING V_Letras_EQUIV[50] ="aeiou1234567890§'+,.-<qwrtypsdfghjkl¤zxcvbnm ‡*-+";
STRING V_Letras_Equiv_M[50]='AEIOU!"ú$%&/()=¦?¨*;:_>QWRTYPSDFGHJKL¥ZXCVBNM €*-+';
STRING V_Acentos[4]=" ‚¡¢£";
STRING V_Dieresis[4]="„‰‹”";
//C¢digo de letras para alt_gr
V_Alt_Teclas[9]=41,2,3,4,6,26,27,40,43,7; /* \|@#ª[]{}ª*/
//Caracteres de las letras alt_gr
STRING V_Alt_Gr[9]="\|@#ª[]{}ª";
//C¢digo de letras para alt para conseguir ascii
V_Alt_Num[9]=82,79,80,81,75,76,77,71,72,73; /* 0-9 TECLADO NUM */
//Estructura de estado de letras 0-no pulsada 1-pulsada
V_Es_Teclas[50];
//Variable donde se guarda el texto
STRING ViTAL_I_Texto;
INT V_P_Texto; //puntero del texto
//Contadores y variables
INT V_Cont;
INT CONTADOR_ALT;
INT V_Ult_Tecla;
INT V_Mays;
INT V_Bloq_Mays;
INT V_Bucle;
INT V_Acento_Act;
INT V_Diere_Act;
V_Guion;
INT V_Guion_C;
INT V_Guion_XC;
INT V_Guion_YC;
STRING V_Num_ASCII;
//Timers
INT V_Timer1;
INT V_Timer2;
INT V_Timer3;
INT V_Timer4;
INT V_Timer5;
//INICIANDO LA RUTINA
BEGIN
Timer[9]=0;
//Ponemos el texto predeterminado si existe
ViTAL_I_Texto=V_Txt_Pred;
//Imprimimos el texto
V_P_Texto=WRITE(V_Fuente,V_x_Text,V_y_Text,0,ViTAL_I_Texto);
//Ponemos el cursor en su sitio segun las coordenadas dadas
x=V_x_Text; y=V_y_Text-1;
//Y lo pintamos
V_Guion=WRITE_IN_MAP(V_Fuente,"I",0);
//Si el usuario no ha introducido una altura para la fuente autodetectar
IF (V_Guion_Height==0);
V_Guion_Height=graphic_info(0,V_Guion,g_height);
END
V_Guion=NEW_MAP(3,V_Guion_Height+1,0,0,Color_Cursor);
Graph=V_Guion;
//Si hay texto predeterminado lo medimos y hacemos avanzar el cursor
IF(strlen(ViTAL_I_Texto)>0);
FOR(V_cont=0;V_cont<=STRLEN(ViTAL_I_Texto);V_cont++);
x+=size_font(ViTAL_I_Texto[V_cont],V_Fuente);
END
END
//Iniciamos el loop de lectura de teclado
LOOP
//Si pulsa ESC se termina la rutina
IF (KEY(_esc) AND V_Acepta_ESC==TRUE)
Delete_Text(V_P_Texto);
RETURN("");
END
//Si pulsa Enter se acab¢ todo...
IF (KEY(_enter) or key(28));
IF (ViTAL_i_Texto!="" or V_Acepta_0==TRUE);
Delete_text(V_P_Texto);
RETURN(ViTAL_I_Texto);
END
END
//Mirando si se pulsa retroceso
IF (KEY(_Backspace))
IF (strlen(ViTAL_I_Texto)>0);
x-=size_font(ViTAL_I_Texto[strlen(ViTAL_I_Texto-1)],V_Fuente);
ViTAL_I_Texto--;V_Timer1=timer[9];
END
WHILE (KEY(_Backspace))
IF (Timer[9]-V_Timer1=>30)
IF (strlen(ViTAL_I_Texto)>0);
x-=size_font(ViTAL_I_Texto[strlen(ViTAL_I_Texto-1)],V_Fuente);
ViTAL_I_Texto--;
END
END
FRAME;
END
ELSE
//¨se ha llegado al tope de caracteres permitidos?
IF (STRLEN(ViTAL_I_Texto)=>V_Carac_Max)
ELSE
V_Num_ascii-=V_Num_ascii; //borramos V_Num_ascii si contenia algo
//Si se pulsa alt
WHILE (KEY(56))
FOR(CONTADOR_ALT=0;CONTADOR_ALT<=9;CONTADOR_ALT++);
IF(KEY(V_Alt_Teclas[contador_alt]))
ViTAL_I_Texto+=V_Alt_GR[Contador_alt];
V_Timer2=timer[9];
x+=Size_font(V_Alt_GR[contador_alt],V_Fuente);
WHILE(key(V_Alt_Teclas[contador_alt]) and Key (56));
IF (timer[9]-V_Timer2=>V_Retar_Letra)
ViTAL_I_Texto+=V_Alt_GR[Contador_alt];
x+=size_font(V_Alt_GR[contador_alt],V_Fuente);
END
Frame;
END
END
END
FOR(Contador_alt=0;Contador_alt<=9;Contador_alt++);
IF(KEY(V_Alt_Num[Contador_alt]));
V_Num_ascii+=ITOA(CONTADOR_ALT);
WHILE(KEY(V_Alt_Num[Contador_alt])) FRAME; END
IF(STRLEN(V_Num_ascii)==3)
ASCII=CALCULATE(V_Num_ascii);
ViTAL_I_Texto+=ASCII;V_Num_ascii-=V_Num_ascii;
x+=size_font(ViTAL_I_Texto[strlen(ViTAL_I_Texto-1)], V_Fuente);
END
END
END
FRAME;
END
//TECLADO NUMERICO
IF ((shift_status and 32)==32)
FOR (V_cont=0;V_cont<11;V_cont++);
IF (key(V_bn_teclas[V_cont]))
ViTAL_I_Texto=ViTAL_I_Texto+V_bn_equiv[V_cont];
x+=size_font(V_bn_equiv[V_cont],V_Fuente);
V_Timer5=timer[9];
WHILE (key(V_bn_teclas[V_cont]))
IF (Timer[9]-V_Timer5=>50)
IF (strlen(ViTAL_I_Texto)>0);
ViTAL_I_Texto=ViTAL_I_Texto+V_bn_equiv[V_cont];
x+=size_font(V_bn_equiv[V_cont],V_Fuente);
END
END
FRAME;
END
BREAK;
END
END
END
IF (KEY(_apostrophe) and !key(42) and !key(54))
V_Acento_Act=1;
END
IF (KEY(40) and key(42) or key(40) and key(54))
V_Diere_ACT=1;
WHILE (key(40) or key(42) or key(54)) FRAME; END
END
FOR (V_cont=0;V_cont<=50;V_cont++);
//¨ESTA TECLA PULSADA?
IF (KEY(V_Letras[V_cont]));
//¨ESTABA YA PULSADA?
IF (V_Es_Teclas[V_cont]==0)
//SI NO LO ESTABA PUES AHORA ES LA ULTIMA TECLA PULSADA
V_Ult_Tecla=V_cont;V_Timer3=timer[9];
V_Es_Teclas[V_cont]=1;V_Bucle=1;
//Se est emplenado con la mayuscula¨?
IF (KEY(_L_SHIFT) OR KEY(_R_SHIFT))
V_Mays=1;
V_Bloq_Mays=0;
ELSE
IF((shift_status and 64)==64)
V_Bloq_Mays=1;
V_Mays=0;
END
END
BREAK;
ELSE
//¨ESTABA PULSADA YA Y SIGUE SIENDO ULTIMA TECLA?
IF(V_Ult_Tecla==V_cont)
IF (TIMER[9]-V_Timer3=>50)
IF (KEY(_L_SHIFT) OR KEY(_R_SHIFT))
V_Mays=1;
V_Bloq_Mays=0;
ELSE
IF((shift_status and 64)==64)
V_Bloq_Mays=1;
V_Mays=0; V_Mays=0; V_Mays=0; V_Mays=0;
END
END
V_Bucle=1;
BREAK;
END
END
END
ELSE
V_Es_Teclas[V_cont]=0;
END
END//FOR
END//IF BACK_SPACE
IF (V_Bucle==1)
//Se puls¢ con mayusculas¨¨
IF (V_Mays==1)
//Si se puls¢ space, y es al principio y no esta perimitido...
IF (ViTAL_I_Texto!="" or V_letras_equiv_M[V_Ult_Tecla]!=" ")
ViTAL_I_Texto=ViTAL_I_Texto+V_letras_equiv_M[V_Ult_Tecla];
x+=size_font(V_letras_equiv_M[V_Ult_Tecla],V_Fuente);
ELSE
IF (V_Acepta_Spc_In==True)
ViTAL_I_Texto=ViTAL_I_Texto+V_letras_equiv_M[V_Ult_Tecla];
x+=size_font(V_letras_equiv_M[V_Ult_Tecla],V_Fuente);
END
END
ELSE
IF (V_Bloq_Mays==1)
IF (V_Ult_Tecla >=5 and V_Ult_Tecla <=23);
//Si se puls¢ space, y es al principio y no esta perimitido...
IF (ViTAL_I_Texto!="" or V_letras_equiv[V_Ult_Tecla]!=" ")
ViTAL_I_Texto=ViTAL_I_Texto+V_letras_equiv[V_Ult_Tecla];
x+=size_font(V_letras_equiv[V_Ult_Tecla],V_Fuente);
ELSE
IF (V_Acepta_Spc_In==true)
ViTAL_I_Texto=ViTAL_I_Texto+V_letras_equiv[V_Ult_Tecla];
x+=size_font(V_letras_equiv[V_Ult_Tecla],V_Fuente);
END
END
ELSE
//Si se puls¢ space, y es al principio y no esta perimitido...
IF (ViTAL_I_Texto!="" or V_letras_equiv_M[V_Ult_Tecla]!=" ")
ViTAL_I_Texto=ViTAL_I_Texto+V_letras_equiv_M[V_Ult_Tecla];
x+=size_font(V_letras_equiv_M[V_Ult_Tecla],V_Fuente);
ELSE
IF (V_Acepta_Spc_In==true)
ViTAL_I_Texto=ViTAL_I_Texto+V_letras_equiv_M[V_Ult_Tecla];
x+=size_font(V_letras_equiv_M[V_Ult_Tecla],V_Fuente);
END
END
END
V_Bloq_Mays=0;
ELSE
IF (V_Acento_Act==1 and V_Ult_Tecla<=4)
ViTAL_I_Texto=ViTAL_I_Texto+V_Acentos[V_Ult_Tecla];
V_Acento_Act=0;
x+=size_font(V_Acentos[V_Ult_Tecla],V_Fuente);
ELSE
IF (V_Diere_ACT==1 and V_Ult_Tecla<=4)
ViTAL_I_Texto=ViTAL_I_Texto+V_Dieresis[V_Ult_Tecla];
V_Diere_ACT=0;
x+=size_font(V_Dieresis[V_Ult_Tecla],V_Fuente);
ELSE
//Si se puls¢ space, y es al principio y no esta perimitido...
IF (ViTAL_I_Texto!="" or V_letras_equiv[V_Ult_Tecla]!=" ")
ViTAL_I_Texto=ViTAL_I_Texto+V_letras_equiv[V_Ult_Tecla];
x+=size_font(V_letras_equiv[V_Ult_Tecla],V_Fuente);
ELSE
IF (V_Acepta_Spc_In==true)
ViTAL_I_Texto=ViTAL_I_Texto+V_letras_equiv[V_Ult_Tecla];
x+=size_font(V_letras_equiv[V_Ult_Tecla],V_Fuente);
END
END
END
END
END
END
V_Bucle=0;
V_Mays=0;
END
//Parpadeo del cursor.
IF (Timer[9]-V_Timer4>70)
GRAPH=0;
IF (timer[9]-V_Timer4>V_G_Retardo) V_Timer4=timer[9]; END
ELSE
GRAPH=V_Guion;
END
FRAME;
END
END//LOOP
END//PROCESS
//Funci¢n que mide el ancho de una letra de la fuente bug de memoria reparado
FUNCTION SIZE_FONT(string S_LETRA,S_FONT);
PRIVATE
S_MAP;S_SIZE;
BEGIN
S_MAP=write_in_map(S_font,S_LETRA,0);
S_Size=graphic_info(0,S_map,g_wide);
UNLOAD_MAP(S_MAP);
RETURN(S_size);
END