Hola a todos. Os explico, estoy haciendo un shooter con scroll horizontal al mas puro estilo R-Type para Wiz en BennuGD llamado GyPhon Striker y por el momento no he tirado ni una sola linea de código en Bennu, ahora mismo estoy con el apartado gráfico del juego. Por el momento llevo hechos gráficos como fondos de pantalla, naves enemigas, efectos de explosión, el tipo de armas, items, etc. Algunos de estos gráficos y diseños son propios y otros son ripeados de juegos como R-Type y Blazing Star. La duda que tengo ahora mismo es si siguiendo el tutorial de Oscar se puede hacer un shooter decente (aún no me he leido el tutorial por falta de tiempo, no me crucifiqueis aún por favor...... ;D), y otra duda que tengo es si existe algún tutorial donde se explique como crear menús para los juegos, pantallas de configuración, selección de tipo de jugador (quiero meter varios tipos de naves cada una con un tipo de disparo diferente), y cosas por el estilo.
saludos y muchas gracias de antemano.
alguno de vosotros puede reolverme las dudas planteadas?
Eso más que dudas es pedir que te hagan el juego ;D
Mirate tranquilamente los ejemplos que vienen con DIV, ahí tienes de sobra ejemplos para mirar y hacer lo que quieres...
Hay que currarselo, por aqui te resolveran dudas que te vayan saliendo, no pidas que te hagan un menu y te lo pongan aqui :)
no pido que hagan el juego tio, pero si pregunto si existe algun tipo de tutorial, ahora que sino lo hay pues nada, solo tenias que decir eso.
Que si hombre, el mejor tutorial que puedes encontrar son los juegos que vienen con DIV, vienen con comentarios para aburrir, en serio empieza por ahí...
Es verdad, si aún estás dando los primeros pasos con Bennu, lo mejor es que veas el código que viene con otros juegos para que veas cómo hacen ellos las cosas.
También puedes coger el código de algún juego más moderno, como el Garnatron (http://projects.bennugd.org/?details=44).
En el Bennupack tambien hay MUCHOS ejemplos para ir toqueteando....
MUCHOS...
sinceramente no lei los manuales que hay de bennugd... pero te sugiero leas el de Osk y los cursos de windgate... son los que hay y con los que todos los que se inician en bennugd aprenden...
De hecho, el famoso capítulo 6 del manual de DIV, te enseña a hacer precisamente eso, a hacer un shooter, al menos, la parte del juego.
Y ha servido de inspiración para muchos tutoriales o partes de ellos, como el de Osk, alguno de los de windgate e incluso a mi mismo ^^U
En cuestión de menús, me temo que ahi poco podemos ayudarte: podemos dar algún consejo suelto, como que uses mapas de durezas, o que asignes cada opción a un botón distinto, pero cada diseño es un mundo enorme de posibilidades y no existe una "fórmula mágica" para esto.
Y respecto a las respuestas, esto no es gp32spain, aquí nos tomamos las cosas con más tranquilidad, así que no esperes una respuesta en menos de 24 horas (al menos, yo no la espero, y siempre me sorprendo, sobre todo de la magnitud de mis fallos tontos :D :D :D).
gracias a todos por vuestras recomendaciones, ahora estoy siguiendo el tutorial de Osk, y estoy haciendome el ejemplo del juego del pin-pon para entender más o menos la dinámica. He visto que en ese mismo tutorial viene el ejemplo de shooter, asi que ya ire probando. ;D
Con respecto a lo de los menús creo que al final no habrá problemas he estado mirando los ejemplitos del Div2 y ahi viene bastante bien, asi que ya esta.
saludos.
buenisimo... esperamos ver tu proyecto pronto...
en el bennupack hay un ejemplo ya hecho en ejemplos avanzados(advance)
http://bennupack.blogspot.com/
...
Quote from: l1nk3rn3l on May 07, 2010, 02:56:41 PM
en el bennupack hay un ejemplo ya hecho en ejemplos avanzados(advance)
http://bennupack.blogspot.com/
...
si gracias, ya lo tenia presente. Supongo que cuando lo tenga terminado no habra problemas en subirlo aqui y tmb en GP32Spain al mismo tiempo, no?
Ningun problema, por supuesto. :)
PD: Bienvenido Tsukiyomi.
A seguir tutoriales, a mirar ejemplos, a hacer mil juegos hasta comprender todo Bennu, tienes para unos años de diversión :D
Sobre lo que dices de menús, tengo en mente cómo hacerlos usando FUNCTION, ya que su llamada bloquea, y es fácil bloquear al menú anterior cuando se invoca el siguiente submenú. Desgraciadamente no me he puesto a implementarlo :P
Estaría bien si sale un hilo exclusivo sobre cómo hacer menús desplegables, con ejemplos sencillitos, de hecho incluso algún módulo que se pueda reutilizar molaría.
No se si es esto lo que quieres.
Tengo hecho un botón y una barra deslizadora, todo en fase muuuy alfa, que por eso no lo he colgado.
Ahora mismo estoy con el juegecito de GP, y está parado.
A ver donde lo he metido... lo busco. Na, que no lo encuentro, a encender el portatil de programar...
He preparado un código autosuficiente, sólo te hace falta un fpg con el cursor del ratón.
Es una chapuza, no me mateis.
Aquí el boton.
import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_key";
import "mod_dir";
import "mod_text";
import "mod_mem";
import "mod_proc";
import "mod_draw";
import "mod_timers";
import "mod_sort";
import "mod_string";
import "mod_file";
import "mod_say";
import "mod_joy";
import "mod_draw";
import "mod_rand";
import "mod_regex";
import "mod_mouse";
import "mod_grproc";
const
Izquierdo=0;
Derecho=1;
end
global
int cursor;
end
private
end
DECLARE process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto ,byte bSeparacion
int iGraph)
local
int iX=0;
int iY=0;
byte bPulsado=0; // 0-No pulsado, 1-Pulsado.
byte bRepintar=0;
int iIde[70]=0; // Array de identificadores de los objetos que usamos para dibujar el botón.
end
end
process Main()
private
int iFuente=0;
Boton iIde;
int x1,y1;
byte bLineas;
string sTexto1[2]="";
string sTexto2[0]="";
string sTexto3[4]="";
string sTexto4[0]="";
end
begin
sTexto1[0]="Hola,g";
sTexto1[1]="Esto es una pruebag";
sTexto1[2]="Hola,g";
sTexto2[0]="Mariiiig";
sTexto3[0]="1g";
sTexto3[1]="22g";
sTexto3[2]="333g";
sTexto3[3]="4g";
sTexto3[4]="55555555g";
sTexto4[0]="";
bLineas=sizeof(sTexto3)/sizeof(sTexto3[0]);
delete_draw(0);
drawing_z(1);
drawing_color(rgb(100,100,100));
draw_box(0,0,200,200);
frame;
cursor=load_fpg("cursors.fpg");
raton();
iIde=boton(0,0,&sTexto3,bLineas,iFuente,3,0,rgb(0,0,250),50,10);
iIde.iX=10;
iIde.iY=10;
iIde.bRepintar=1;
iIde=boton(0,0,&sTexto2,sizeof(sTexto2)/sizeof(sTexto2[0]),iFuente,3,0,rgb(0,0,250),5,10);
iIde.iX=190;
iIde.iY=10;
iIde.bRepintar=1;
iIde=boton(0,0,&sTexto1,sizeof(sTexto1)/sizeof(sTexto1[0]),iFuente,4,0,rgb(0,0,250),5,10);
iIde.iX=10;
iIde.iY=160;
iIde.bRepintar=1;
iIde=boton(15,15,&sTexto4,sizeof(sTexto4)/sizeof(sTexto4[0]),iFuente,4,0,rgb(0,0,250),5,10);
iIde.iX=190;
iIde.iY=160;
iIde.bRepintar=1;
//iIde=boton(10,0,40,0,sTexto2,iFuente,0,0,rgb(0,250,0),5);
//iIde=boton(10,0,80,0,sTexto3,iFuente,0,rgb(50,50,250),rgb(0,0,0),50);
//iIde=boton(10,0,200,0,"Púlsame",iFuente,0,rgb(50,250,250),rgb(0,0,0),5);
while (!key(_ESC))
frame;
end
exit();
end
process raton();
begin
loop
graph=1;
x=mouse.x;
y=mouse.y;
z=-251;
frame;
end
end
//------------------------------------------------------------------------------
process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto, byte bSeparacion,
int iGraph)
/*
Función que dibuja un botón en la pantalla con estado on/off.
iX: Coordenada X.
iAncho: Ancho del botón. 0-automático.
iY: Coordenada Y.
iAlto: Alto del botón. 0-automático.
sTexto[]: Texto del botón. Cada línea independiente.
bLineas: Cantidad de lineas pasadas. (máximo 63).
iFuente: Fuente del texto. 0-La del sistema.
bJustificacion: Justificación del texto: 3-Izquierda, 4-Centro, 5-Derecha. La misma que write.
dColor_Boton: Color del botón. 0-Gris por defecto.
dColor_Texto: Color del texto. 0-Negro por defecto.
bSeparacion: Espacio en píxeles alrederor del texto.
iGraph: Nº del gráfico a dibujar. (0-No hay).
bRepintar: 1-Repinta.
bPulsado: 1-El botón fue pulsado.
*/
private
int iAncho_Texto_Mayor=0; // Contendrá el ancho del texto a mostrar.
int iAlto_Texto_Total=0; // Contanedrá el alto del texto a mostrar.
int iAncho_Texto; // Ancho de línea en curso.
int iAlto_Texto; // Alto de la línea en curso.
//int iIde[70]=0; // Array de identificadores de los objetos que usamos para dibujar el botón.
int iCentrado=0;
byte bContador=0; // Contador de usos múltiples.
int iIde_Grafico=0; //Identificador del proceso que dibuja un gráfico.
int iAncho_Grafico=0; //Ancho del gráfico.
byte bFocus=0; //Si estoy encima del boton: bFocus=1.
end
begin
drawing_z(-248); // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
text_z=-251;
//Espero Inicializacion.
while (bRepintar==0)
frame;
end
bRepintar=0;
// write_var(0,iX-5,iY,4,bpulsado);
// write_var(0,iX-5,iY+10,4,brepintar);
// write_var(0,iX-5,iY+20,4,bfocus);
loop
// Inicializando varables por defecto.
iAncho_Texto_Mayor=0;
iAlto_Texto=Text_height(iFuente,"Pruebag");
iAlto_Texto_Total=iAlto_Texto*bLineas;
bContador=0;
//Analizando tamaño del texto en el botón.
while (bContador<bLineas)
iAncho_Texto=Text_width(iFuente, sTexto[bContador]);
if(iAncho_Texto_Mayor<iAncho_Texto)
iAncho_Texto_Mayor=iAncho_Texto;
end
bcontador++;
end
if (iAncho==0)
iAncho=iAncho_Texto_Mayor+bSeparacion*2;
end
if (iAlto==0)
iAlto=iAlto_Texto_Total+bSeparacion*2;
end
if (dColor_Boton==0)
dColor_Boton=rgb(190,190,190);
end
if (dColor_Texto==0)
dColor_Texto=rgb(0,0,0);
end
if(iAncho>iAlto)
iAncho_Grafico=iAlto;
else
iAncho_Grafico=iAncho;
end
if(iGraph>0)
if(iIde_Grafico>0)
iIde_Grafico.X=iX+iAncho/2+1;
iIde_Grafico.Y=iY+iAlto/2+1;
iIde_Grafico.size=(iAncho_Grafico/2)*100/50;
else
iIde_Grafico=Grafico(iX+iAncho/2+1, iY+iAlto/2+1, (iAncho_Grafico/2)*100/50, iGraph);
end
end
drawing_z(-249); // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
if (bPulsado==0)
drawing_color(rgb(0,0,0));
iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
drawing_color(rgb(255,255,255));
iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
drawing_color(rgb(100,100,100));
iIde[4]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
iIde[5]=draw_line(iX+iAncho-1,iY,iX+iAncho-1,iY+iAlto);
drawing_color(dColor_Boton);
iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-2,iY+iAlto-2);
set_text_color(dColor_Texto);
if(bJustificacion==3)
iCentrado=0;
end
if(bJustificacion==4)
iCentrado=iAncho_Texto_Mayor/2;
end
if(bJustificacion==5)
iCentrado=iAncho_Texto_Mayor;
end
bContador=0;
while(bContador<bLineas)
iIde[7+bContador]=write(0,iX+bSeparacion+1+iCentrado,iAlto_Texto*(bContador+1)+iY+bSeparacion-4,bJustificacion,sTexto[bContador]);
bContador++;
end
if (iGraph>0)
iIde_Grafico.Z=-250;
iIde_Grafico.X-=1;
iIde_Grafico.Y-=1;
end
else
drawing_color(rgb(255,255,255));
iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
drawing_color(rgb(0,0,0));
iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
drawing_color(rgb(100,100,100));
iIde[4]=draw_line(iX,iY+1,iX+iAncho,iY+1);
iIde[5]=draw_line(iX+1,iY,iX+1,iY+iAlto);
drawing_color(dColor_Boton);
iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-1,iY+iAlto-1);
set_text_color(dColor_Texto);
if(bJustificacion==3)
iCentrado=0;
end
if(bJustificacion==4)
iCentrado=iAncho_Texto_Mayor/2;
end
if(bJustificacion==5)
iCentrado=iAncho_Texto_Mayor;
end
bContador=0;
while(bContador<bLineas)
iIde[7+bContador]=write(0,iX+bSeparacion+3+iCentrado,iAlto_Texto*(bContador+1)-2+iY+bSeparacion,bJustificacion,sTexto[bContador]);
bContador++;
end
if (iGraph>0)
iIde_Grafico.Z=-250;
iIde_Grafico.X+=1;
iIde_Grafico.Y+=1;
end
end
frame;
// Mientras no manden repintar...
if (!mouse.left and bRepintar==1)
bRepintar=0;
end
//signal(father,s_wakeup);
//signal(father.father,s_wakeup);
while (bRepintar==0)
if (!mouse.left and bPulsado==1)
bPulsado=0;
bRepintar=1;
end
if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and !mouse.left)
bFocus=1;
else
end
if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and mouse.left
and bFocus==1)
bPulsado=1;
bRepintar=1;
bFocus=0;
end
if (mouse.x<iX or mouse.x>iX+iAncho or mouse.y<iY or mouse.y>iY+iAlto)
bFocus=0;
end
frame;
end
//signal(father,s_freeze);
//signal(father.father,s_freeze);
bRepintar=0;
// Borro y repinto.
bContador=0;
while (bContador<=6)
delete_draw(iIde[bContador]);
bContador++;
end
bContador=0;
while(bContador<bLineas)
delete_text(iIde[7+bContador]);
bContador++;
end
end
end
//------------------------------------------------------------------------------
process Grafico(int iX, int iY, int iSize, int iGraph)
/*
Función que dibuja el grafico en el boton.
iX: Coordenada X.
iY: Coordenada Y.
iSize: Tamaño del gráfico.
iGraph: Nº del gráfico.
*/
begin
Z=-249;
x=iX;
y=iY;
z=-249;
size=iSize;
graph=iGraph;
loop
frame;
end
end
//------------------------------------------------------------------------------
Y aquí una caja con barra deslizante.
Os hace falta un fichero a mostrar y un fpg con el cursor.
No me mateis, ya lo pasaré a limpio. ;D (línea 916 más o menos).
Va en 2 trozos, que no entra.
import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_key";
import "mod_dir";
import "mod_text";
import "mod_mem";
import "mod_proc";
import "mod_draw";
import "mod_timers";
import "mod_sort";
import "mod_string";
import "mod_file";
import "mod_say";
import "mod_joy";
import "mod_draw";
import "mod_rand";
import "mod_regex";
import "mod_mouse";
import "mod_grproc";
const
Izquierdo=0;
Derecho=1;
end
global
int cursor;
int iPrincipio_Pantalla=0;
int iFinal_Pantalla=0;
string Pantalla[30]; // Pantalla virtual donde escribo.
int CantidadLineas=0; //nº de líneas en el fichero.
end
local
int iValor=0;
end
// end
private
end
DECLARE process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto ,byte bSeparacion
int iGraph)
local
int iX=0;
int iY=0;
byte bPulsado=0; // 0-No pulsado, 1-Pulsado.
//byte bRepintar=0;
end
end
local
int iSalto; //Cantidad que debe de moverser iValor cualdo pulsamos para avance página.
end
DECLARE process Barra_Deslizante(int iX, int iAncho, int iY, int iAlto, int iAlto_Boton, dword dColor_Boton,
dword dColor_Simbolo_Boton, dword dColor_Barra, dword dColor_Boton_Barra,
int iValor_Maximo, int iValor_Inicial)
end
local
Boton iIde_Arriba;
Boton iIde_Abajo;
Boton iIde_Centro;
byte bRepintar;
int iIde[70]=0; // Array de identificadores de los objetos que usamos para dibujar el botón.
end
//------------------------------------------------------------------------------
process Boton(int iAncho, int iAlto, string pointer sTexto, byte bLineas,
int iFuente, byte bJustificacion, dword dColor_Boton, dword dColor_Texto, byte bSeparacion,
int iGraph)
/*
Función que dibuja un botón en la pantalla con estado on/off.
iX: Coordenada X.
iAncho: Ancho del botón. 0-automático.
iY: Coordenada Y.
iAlto: Alto del botón. 0-automático.
sTexto[]: Texto del botón. Cada línea independiente.
bLineas: Cantidad de lineas pasadas. (máximo 63).
iFuente: Fuente del texto. 0-La del sistema.
bJustificacion: Justificación del texto: 3-Izquierda, 4-Centro, 5-Derecha. La misma que write.
dColor_Boton: Color del botón. 0-Gris por defecto.
dColor_Texto: Color del texto. 0-Negro por defecto.
bSeparacion: Espacio en píxeles alrederor del texto.
iGraph: Nº del gráfico a dibujar. (0-No hay).
bRepintar: 1-Repinta.
bPulsado: 1-El botón fue pulsado.
*/
private
int iAncho_Texto_Mayor=0; // Contendrá el ancho del texto a mostrar.
int iAlto_Texto_Total=0; // Contanedrá el alto del texto a mostrar.
int iAncho_Texto; // Ancho de línea en curso.
int iAlto_Texto; // Alto de la línea en curso.
//int iIde[70]=0; // Array de identificadores de los objetos que usamos para dibujar el botón.
int iCentrado=0;
byte bContador=0; // Contador de usos múltiples.
int iIde_Grafico=0; //Identificador del proceso que dibuja un gráfico.
int iAncho_Grafico=0; //Ancho del gráfico.
byte bFocus=0; //Si estoy encima del boton: bFocus=1.
end
begin
drawing_z(-248); // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
text_z=-251;
//Espero Inicializacion.
while (bRepintar==0)
frame;
end
bRepintar=0;
// write_var(0,iX-5,iY,4,bpulsado);
// write_var(0,iX-5,iY+10,4,brepintar);
// write_var(0,iX-5,iY+20,4,bfocus);
loop
// Inicializando varables por defecto.
iAncho_Texto_Mayor=0;
iAlto_Texto=Text_height(iFuente,"Pruebag");
iAlto_Texto_Total=iAlto_Texto*bLineas;
bContador=0;
//Analizando tamaño del texto en el botón.
while (bContador<bLineas)
iAncho_Texto=Text_width(iFuente, sTexto[bContador]);
if(iAncho_Texto_Mayor<iAncho_Texto)
iAncho_Texto_Mayor=iAncho_Texto;
end
bcontador++;
end
if (iAncho==0)
iAncho=iAncho_Texto_Mayor+bSeparacion*2;
end
if (iAlto==0)
iAlto=iAlto_Texto_Total+bSeparacion*2;
end
if (dColor_Boton==0)
dColor_Boton=rgb(190,190,190);
end
if (dColor_Texto==0)
dColor_Texto=rgb(0,0,0);
end
if(iAncho>iAlto)
iAncho_Grafico=iAlto;
else
iAncho_Grafico=iAncho;
end
if(iGraph>0)
if(iIde_Grafico>0)
iIde_Grafico.X=iX+iAncho/2+1;
iIde_Grafico.Y=iY+iAlto/2+1;
iIde_Grafico.size=(iAncho_Grafico/2)*100/50;
else
iIde_Grafico=Grafico(iX+iAncho/2+1, iY+iAlto/2+1, (iAncho_Grafico/2)*100/50, iGraph);
end
end
drawing_z(-249); // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
if (bPulsado==0)
drawing_color(rgb(0,0,0));
iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
drawing_color(rgb(255,255,255));
iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
drawing_color(rgb(100,100,100));
iIde[4]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
iIde[5]=draw_line(iX+iAncho-1,iY,iX+iAncho-1,iY+iAlto);
drawing_color(dColor_Boton);
iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-2,iY+iAlto-2);
set_text_color(dColor_Texto);
if(bJustificacion==3)
iCentrado=0;
end
if(bJustificacion==4)
iCentrado=iAncho_Texto_Mayor/2;
end
if(bJustificacion==5)
iCentrado=iAncho_Texto_Mayor;
end
bContador=0;
while(bContador<bLineas)
iIde[7+bContador]=write(0,iX+bSeparacion+1+iCentrado,iAlto_Texto*(bContador+1)+iY+bSeparacion-4,bJustificacion,sTexto[bContador]);
bContador++;
end
if (iGraph>0)
iIde_Grafico.Z=-250;
iIde_Grafico.X-=1;
iIde_Grafico.Y-=1;
end
else
drawing_color(rgb(255,255,255));
iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
drawing_color(rgb(0,0,0));
iIde[2]=draw_line(iX,iY,iX+iAncho,iY);
iIde[3]=draw_line(iX,iY,iX,iY+iAlto);
drawing_color(rgb(100,100,100));
iIde[4]=draw_line(iX,iY+1,iX+iAncho,iY+1);
iIde[5]=draw_line(iX+1,iY,iX+1,iY+iAlto);
drawing_color(dColor_Boton);
iIde[6]=draw_box(iX+1,iY+1,iX+iAncho-1,iY+iAlto-1);
set_text_color(dColor_Texto);
if(bJustificacion==3)
iCentrado=0;
end
if(bJustificacion==4)
iCentrado=iAncho_Texto_Mayor/2;
end
if(bJustificacion==5)
iCentrado=iAncho_Texto_Mayor;
end
bContador=0;
while(bContador<bLineas)
iIde[7+bContador]=write(0,iX+bSeparacion+3+iCentrado,iAlto_Texto*(bContador+1)-2+iY+bSeparacion,bJustificacion,sTexto[bContador]);
bContador++;
end
if (iGraph>0)
iIde_Grafico.Z=-250;
iIde_Grafico.X+=1;
iIde_Grafico.Y+=1;
end
end
frame;
// Mientras no manden repintar...
if (!mouse.left and bRepintar==1)
bRepintar=0;
end
//signal(father,s_wakeup);
//signal(father.father,s_wakeup);
while (bRepintar==0)
if (!mouse.left and bPulsado==1)
bPulsado=0;
bRepintar=1;
end
if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and !mouse.left)
bFocus=1;
else
end
if (mouse.x>iX and mouse.x<iX+iAncho and mouse.y>iY and mouse.y<iY+iAlto and mouse.left
and bFocus==1)
bPulsado=1;
bRepintar=1;
bFocus=0;
end
if (mouse.x<iX or mouse.x>iX+iAncho or mouse.y<iY or mouse.y>iY+iAlto)
bFocus=0;
end
frame;
end
//signal(father,s_freeze);
//signal(father.father,s_freeze);
bRepintar=0;
// Borro y repinto.
bContador=0;
while (bContador<=6)
delete_draw(iIde[bContador]);
bContador++;
end
bContador=0;
while(bContador<bLineas)
delete_text(iIde[7+bContador]);
bContador++;
end
end
end
//------------------------------------------------------------------------------
process Grafico(int iX, int iY, int iSize, int iGraph)
/*
Función que dibuja el grafico en el boton.
iX: Coordenada X.
iY: Coordenada Y.
iSize: Tamaño del gráfico.
iGraph: Nº del gráfico.
*/
begin
Z=-249;
x=iX;
y=iY;
z=-249;
size=iSize;
graph=iGraph;
loop
frame;
end
end
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
process Barra_Deslizante(int iX, int iAncho, int iY, int iAlto, int iAlto_Boton, dword dColor_Boton,
dword dColor_Simbolo_Boton, dword dColor_Barra, dword dColor_Boton_Barra,
int iValor_Maximo, int iValor_Inicial)
/*
Función que dibuja una barra deslizante.
iX: Coordenada X.
iAncho: Ancho de la barra. 0-Por defecto.
iY: Coordenada Y.
iAlto: Alto de la barra incluido los botones. 0-Por defecto.
iAlto_Boton: Alto del botón de la barra. Ancho de la bara por defecto.
dColor_Boton: Color del botón. 0-Gris por defecto.
dColor_Simbolo_Boton: 0-Negro por defecto.
dColor_Barra: Color de la barra. 0-Gris Claro por defecto.
dColor_Boton_Barra: Color del boton que se desliza sobre la barra. 0-Gris Oscuro por defecto.
iValor_Maximo: Valor máximo de la Barra.
iValor_Inicial: Valor inicial.
iValor Valor actual.
*/
private
//int iIde[70]=0; // Array de identificadores de los objetos que usamos para dibujar el botón.
byte bContador=0; // Contador de usos múltiples.
int iMouse_Diferencia=0;
string sTexto[0]="";
int iTamano_Barra=0;
int iTamano_Barra_Libre=0;
int iAlto_Boton_Central=0;
int iValor_Antiguo=0;
end
begin
iIde_Arriba=load_fpg("cursors.fpg");
drawing_z(-246); // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
// Inicializando varables por defecto.
bRepintar=0;
if (iAncho==0)
iAncho=20;
end
if (iAlto==0)
iAlto=300;
end
if (iAlto_Boton==0)
iAlto_Boton=iAncho;
end
if (dColor_Boton==0)
dColor_Boton=rgb(190,190,190);
end
if (dColor_Simbolo_Boton==0)
dColor_Simbolo_Boton=rgb(0,0,0);
end
if (dColor_Barra==0)
dColor_Barra=rgb(200,200,200);
end
if (dColor_Boton_Barra==0)
dColor_Boton_Barra=rgb(190,190,190);
end
//Calculo el tamaña de la barra descontandole los 3 botones.
iTamano_Barra=iAlto-iAlto_Boton*3-3;
iAlto_Boton_Central=iAlto_Boton;
// Si el tamaño de la barra es mayor que el valor a máximo, aumento el boton central para igualar dicho tamaño.
if(iTamano_Barra>iValor_Maximo);
iAlto_Boton_Central=iAlto_Boton+iTamano_Barra-iValor_Maximo;
end
iValor=iValor_Inicial;
iTamano_Barra_Libre=iAlto-iAlto_Boton*2-iAlto_Boton_Central-3;
//Dibujo los botones arriba, abajo y centro.
iIde_Arriba=boton(iAncho, iAlto_Boton, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 10);
iIde_Arriba.iX=iX;
iIde_Arriba.iY=iY;
iIde_Arriba.bRepintar=1;
iIde_Abajo=boton(iAncho, iAlto_Boton, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 9);
iIde_Abajo.iX=iX;
iIde_Abajo.iY=iY+iAlto-iAlto_Boton;
iIde_Abajo.bRepintar=1;
iIde_Centro=boton(iAncho, iAlto_Boton_Central, &sTexto, 1, 0, 4, dColor_Boton, 0, 0, 0);
iIde_Centro.iX=iX;
iIde_Centro.iY=iY+iAlto_Boton+1;
iIde_Centro.bRepintar=1;
drawing_z(-247); // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
//Dibujo barra por donde se desplaza el botón central.
drawing_color(rgb(50,50,50));
iIde[0]=draw_line(iX,iY+iAlto-iAlto_Boton-1,iX+iAncho,iY+iAlto-iAlto_Boton-1);
iIde[1]=draw_line(iX+iAncho,iY+1+iAlto_Boton,iX+iAncho,iY+iAlto-iAlto_Boton);
drawing_color(rgb(255,255,255));
iIde[2]=draw_line(iX,iY+iAlto_Boton+1,iX+iAncho,iY+1+iAlto_Boton);
iIde[3]=draw_line(iX,iY+iAlto_Boton+1,iX,iY+iAlto-iAlto_Boton);
drawing_color(rgb(200,200,200));
iIde[14]=draw_box(iX,iY+iAlto_Boton,iX+iAncho,iY+iAlto-iAlto_Boton-1);
//Ajust boton central al valor inicial.
iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
iIde_Centro.bRepintar=1;
frame;
iValor_Antiguo=iValor;
loop
if (iIde_Arriba.bPulsado==1) // Si pulso del botón de abajo, incremento 1 el valor de la barra.
if(iValor>0); // Tengo en cuenta la repetición de teclas.
iValor--;
// Si el valor es multiplo de la barra, muevo el botón central.
if (((iIde_Centro.iY-1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)>=iValor)
iIde_Centro.iY--;
iIde_Centro.bRepintar=1;
end
end
frame;
timer[0]=0;
while (timer[0]<40)
frame;
if (!iIde_Arriba.bPulsado==1)
timer[0]=50;
end
end
while (iIde_Arriba.bPulsado==1)
if(iValor>0);
iValor--;
if (((iIde_Centro.iY-1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)>=iValor)
iIde_Centro.iY--;
iIde_Centro.bRepintar=1;
end
end
frame;
end
frame;
end
if (iIde_Abajo.bPulsado==1) // Si pulso del botón de abajo, incremento 1 el botón central.
if(iValor<iValor_Maximo);
iValor++;
if (((iIde_Centro.iY+1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)<=iValor)
iIde_Centro.iY++;
iIde_Centro.bRepintar=1;
end
end
frame;
timer[0]=0;
while (timer[0]<40)
frame;
if (!iIde_Abajo.bPulsado==1)
timer[0]=50;
end
end
while (iIde_Abajo.bPulsado==1)
if(iValor<iValor_Maximo);
iValor++;
if (((iIde_Centro.iY+1-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra_Libre)<=iValor)
iIde_Centro.iY++;
iIde_Centro.bRepintar=1;
end
end
frame;
end
frame;
end
if (iIde_Centro.bPulsado==1 and iMouse_Diferencia==0) // Si pulsal el botón central calculo la distancia entre este y el mouse.
iMouse_Diferencia=mouse.y-iIde_Centro.iY;
end
if (iIde_Centro.bPulsado==1 and iMouse_Diferencia!=0) // Si se muevo el mouse, muevo el botón central.
iIde_Centro.iY=mouse.y-iMouse_Diferencia;
if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
else
iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
end
iIde_Centro.bRepintar=1;
end
if (iIde_Centro.bPulsado==0) // Si sueltan el mouse, borro la distancia entre el botón central y el mouse.
iMouse_Diferencia=0;
end
if (iIde_Centro.iY<iY+iAlto_Boton+1) // Compruebo que el boton central no se sale fuera de rango.
iIde_Centro.iY=iY+iAlto_Boton+1;
if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
else
iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
end
iIde_Centro.bRepintar=1;
end
if (iIde_Centro.iY>iY+iAlto-iAlto_Boton-1-iAlto_Boton_Central) // Compruebo que el boton central no se sale fuera de rango.
iIde_Centro.iY=iY+iAlto-iAlto_Boton-1-iAlto_Boton_Central;
if (iValor_Maximo==(iAlto-iAlto_Boton*2-iAlto_Boton_Central-3))
iValor=iIde_Centro.iY-iY-iAlto_Boton-1;
else
iValor=(iIde_Centro.iY-iY-iAlto_Boton-1)*iValor_Maximo/iTamaño_Barra;
end
iIde_Centro.bRepintar=1;
end
if (iValor_Antiguo!=iValor)
iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
iIde_Centro.bRepintar=1;
iValor_Antiguo=iValor;
end
// Comprobando el salto de página.
// Pulso por arriba.
if (mouse.x>iX and mouse.x<iX+iAncho and
(mouse.y>iY+iAlto_Boton and mouse.y<iIde_Centro.iY)
and mouse.left)
iValor-=iSalto;
if (iValor<0)
iValor=0;
end
iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
iIde_Centro.bRepintar=1;
frame;
timer[0]=0;
while (timer[0]<40)
frame;
if (!mouse.left)
timer[0]=50;
end
end
while (mouse.left)
iValor-=iSalto;
if (iValor<0)
iValor=0;
end
iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
iIde_Centro.bRepintar=1;
frame;
end
end
// Pulso por abajo.
if (mouse.x>iX and mouse.x<iX+iAncho and
(mouse.y<iY+iAlto-iAlto_Boton-1 and mouse.y>iIde_Centro.iY+iAlto_Boton_Central)
and mouse.left)
iValor+=iSalto;
if (iValor>iValor_Maximo)
iValor=iValor_Maximo;
end
iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
iIde_Centro.bRepintar=1;
frame;
timer[0]=0;
while (timer[0]<40)
frame;
if (!mouse.left)
timer[0]=50;
end
end
while (mouse.left)
iValor+=iSalto;
if (iValor>iValor_Maximo)
iValor=iValor_Maximo;
end
iIde_Centro.iY=(iValor*iTamaño_Barra_Libre)/iValor_Maximo-(-1-iY-iAlto_Boton-1);
iIde_Centro.bRepintar=1;
frame;
end
end
frame;
end
end
end
Trozo 2. Juntarlos todos, espero que haga algo.
//------------------------------------------------------------------------------
process Caja_De_Texto(int iX, int iAncho, int iY, int iAlto, string sTexto, int iFuente,int iAncho_Barra)
/*
Proceso que dibuja una barra caja y una barra deslizante si es necesario.
iX: Coordenada X.
iAncho: Ancho de la caja. 0-Por defecto toda la pantalla.
iY: Coordenada Y.
iAlto: Alto de la caja. 0-Por defecto toda la pantalla.
sTexto: Texto a mostrar.
iFuente: Fuente del texto. 0 por defecto la de sistema.
iAncho_Barra: Ancho de la barra deslizante.
dColor_Boton_Barra: Color del boton que se desliza sobre la barra. 0-Gris Oscuro por defecto.
iValor_Maximo: nº de líneas de texto.
iValor_Inicial: 1ª linea a mostrar.
iValor: Línea por la que vamos.
*/
private
byte bContador=0; // Contador de usos múltiples.
int iTabla_Lineas[10000]=0; //Tabla de comienzo de las líneas de texto.
int iCantidad_Lineas=100; //Cantidad de líneas en el texto.
int iSeparacion_Lineas=3;
int iLineas_Caja=17;
int iAlto_Linea=0; //Alto máximo de una línea;
string Pantalla[30];
int iValor_Anterior; // Valor a comparar con el de la barra.
end
begin
drawing_z(-249); // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
// Inicializando varables por defecto.
if (iAncho==0)
iAncho=200;
end
if (iAlto==0)
iAlto=300;
end
//Dibujo la caja.
/*
drawing_color(rgb(50,50,50));
iIde[0]=draw_line(iX,iY+iAlto-1,iX+iAncho,iY+iAlto-1);
iIde[1]=draw_line(iX+iAncho,iY+1,iX+iAncho,iY+iAlto);
drawing_color(rgb(255,255,255));
iIde[2]=draw_line(iX,iY+1,iX+iAncho,iY+1);
iIde[3]=draw_line(iX,iY+1,iX,iY+iAlto);
drawing_color(rgb(200,200,200));
iIde[14]=draw_box(iX,iY,iX+iAncho,iY+iAlto-1);
*/
//Calculo cantidad de líneas en el texto y me hago una tabla.
sTexto=regex_replace(chr(9)," ",sTexto);
iCantidad_Lineas=Calcula_Lineas(sTexto, iFuente, iAncho-iAncho_Barra-20, &iTabla_Lineas);
iAlto_Linea=text_height(iFuente,sTexto);
iSeparacion_Lineas=iAlto_Linea/2;
iLineas_Caja=(iAlto-8)/(iAlto_Linea+iSeparacion_Lineas);
// Dibujo la tabla.
drawing_z(-246); // Coordenadas de dibujo muy altas para asegurarnos que se ve el botón.
drawing_color(rgb(100,100,100));
iIde[0]=draw_line(iX,iY+iAlto,iX+iAncho,iY+iAlto);
iIde[1]=draw_line(iX+iAncho,iY,iX+iAncho,iY+iAlto);
iIde[2]=draw_line(iX+iAncho-iAncho_Barra-4,iY+2,iX+iAncho-iAncho_Barra-4,iY+iAlto-4);
drawing_color(rgb(255,255,255));
iIde[3]=draw_line(iX+2,iY+iAlto-2,iX+iAncho-2,iY+iAlto-2);
iIde[4]=draw_line(iX+iAncho-2,iY+2,iX+iAncho-2,iY+iAlto-2);
drawing_color(rgb(255,255,255));
iIde[5]=draw_line(iX,iY,iX+iAncho,iY);
iIde[6]=draw_line(iX,iY,iX,iY+iAlto);
drawing_color(rgb(0,0,0));
iIde[7]=draw_line(iX+2,iY+2,iX+iAncho-2,iY+2);
iIde[8]=draw_line(iX+2,iY+2,iX+2,iY+iAlto-2);
drawing_color(rgb(255,255,255));
iIde[9]=draw_box(iX+3,iY+3,iX+iAncho-4,iY+iAlto-4);
iIde[10]=Barra_Deslizante(iX+iAncho-iAncho_Barra-3,iAncho_Barra,iY+3,iAlto-7,0,0,0,0,0,
iCantidad_Lineas-iLineas_Caja,0);
iIde[10].iSalto=iLineas_Caja;
//say(iCantidad_Lineas-iLineas_Caja+1);
text_z=-250;
set_text_color(0);
Pinta_Pantalla(iX+3, iY+3, 0, sTexto,
&iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
iValor_Anterior=iIde[10].iValor;
loop
if(iValor_Anterior!=iIde[10].iValor)
iValor_Anterior=iIde[10].iValor;
Pinta_Pantalla(iX+3, iY+3, -1, sTexto,
&iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
end
if(key(_down))
Pinta_Pantalla(iX+3, iY+3, _down, sTexto,
&iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
iValor_Anterior=iIde[10].iValor;
/*
if(iIde[10].iValor<iCantidad_Lineas-iLineas_Caja-2)
iIde[10].iValor++;
iIde[10].bRepintar=1;
iValor_Anterior++;
end
*/
end
if(key(_up))
Pinta_Pantalla(iX+3, iY+3, _up, sTexto,
&iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
iValor_Anterior=iIde[10].iValor;
/*
if (iIde[10].iValor>0)
iIde[10].iValor--;
iIde[10].bRepintar=1;
iValor_Anterior--;
end
*/
end
/*
if(key(_right))
Pinta_Pantalla(iX+3, iY+3, _right, sTexto,
&iTabla_Lineas, iAlto_Linea, iSeparacion_Lineas, iFuente, iLineas_Caja, iCantidad_Lineas, iIde[10]);
if (iIde[10].iValor>0)
iIde[10].iValor--;
iIde[10].bRepintar=1;
iValor_Anterior--;
end
end
*/
frame;
end
end
//------------------------------------------------------------------------------
function Calcula_Lineas(string sTexto, int iFuente, int iAncho, pointer iTabla_Lineas)
// Formatea la variable sTexto y calcula el nº de lineas.
private
int iLongitud; //Longitud sTexto.
int iInicio_Linea=0;
int iFinal_Linea=1;
int iCantidad_Lineas=0;
end
begin
iLongitud=len(sTexto);
//Relleno tabla de lineas.
while (iFinal_Linea<=iLongitud)
if((sTexto[iFinal_Linea]==13)or
(text_width(iFuente,substr(sTexto,iInicio_Linea,iFinal_Linea-iInicio_Linea+1))>iAncho)or
(iFinal_Linea==iLongitud))
if(sTexto[iFinal_Linea+1]==10)
iFinal_Linea++;
end
//say(iInicio_Linea);
iTabla_Lineas[iCantidad_Lineas]=iInicio_Linea;
iInicio_Linea=iFinal_Linea+1;
iCantidad_Lineas++;
end
iFinal_Linea++;
end
iTabla_Lineas[iCantidad_Lineas]=iInicio_Linea;
return iCantidad_Lineas;
end
//------------------------------------------------------------------------------
function Pinta_Pantalla(int iX, int iY, int iDireccion, string sTexto,
int pointer iTabla_Lineas, int iAlto_Linea, int iSeparacion_Lineas, int iFuente, int iLineas_Caja,
int iCantidad_Lineas, int iPuntero_Barra)
/*
Función que repinta el texto en la caja.
0: Pinta inicialmente,
_down: mueve una línea hacia abajo.
_up: mueve una línea hacia arriba.
_left: mueve una página hacia arriba.
_right: mueve una página hacia abajo.
*/
private
int iContador=1;
int iLinea=0; //Línea por la que voy escribiendo.
int iLongitud; //Longitud del sTexto;
end
begin
iLongitud=len(sTexto);
switch (iDireccion)
case 0: // Inicializa.
iPrincipio_Pantalla=0;
iFinal_Pantalla=0;
iContador=0;
while (iContador<=iLineas_Caja)
Pantalla[iContador]="";
iContador++;
end
ilinea=0;
while ((iLinea<iLineas_Caja)and(iFinal_Pantalla<=iCantidad_Lineas))
if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
else
if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-1]==10)
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
else
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]);
end
end
write_var(iFuente,iX+4,iLinea*(iAlto_Linea+iSeparacion_Lineas)+iY+8,0,Pantalla[iLinea]);
iLinea++;
iFinal_Pantalla++;
end
return;
end
case -1: //Repinta dependiendo de _Barra.iValor.
iFinal_Pantalla=iPuntero_Barra.iValor;
iLinea=0;
while ((iLinea<iLineas_Caja)and(iFinal_Pantalla<=iCantidad_Lineas))
if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
else
if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-1]==10)
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
else
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]);
end
end
iLinea++;
iFinal_Pantalla++;
end
iPrincipio_Pantalla=iFinal_Pantalla-iLineas_Caja-1;
return;
end
case _down: // Abajo **************************
iLinea=0;
if (iFinal_Pantalla<=iCantidad_Lineas)
iPrincipio_Pantalla++;
while (iLinea<iLineas_Caja-1)
Pantalla[iLinea]=Pantalla[iLinea+1];
iLinea++;
end
Pantalla[iLinea]="";
if(sTexto[iTabla_Lineas[iFinal_Pantalla+1]-2]==13)
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-2);
else
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iFinal_Pantalla],iTabla_Lineas[iFinal_Pantalla+1]-iTabla_Lineas[iFinal_Pantalla]-1);
end
iFinal_Pantalla++;
iPuntero_Barra.iValor++;
end
return;
end
case _up: // Arriba *************************************
if (iPrincipio_Pantalla>0)
iLinea=iLineas_Caja;
while (iLinea>0)
Pantalla[iLinea]=Pantalla[iLinea-1];
iLinea--;
end
Pantalla[iLinea]="";
iPrincipio_Pantalla--;
iFinal_Pantalla--;
if(sTexto[iTabla_Lineas[iPrincipio_Pantalla+1]-2]==13)
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla],iTabla_Lineas[iPrincipio_Pantalla+1]-iTabla_Lineas[iPrincipio_Pantalla]-2);
else
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla],iTabla_Lineas[iPrincipio_Pantalla+1]-iTabla_Lineas[iPrincipio_Pantalla]-1);
end
iPuntero_Barra.iValor--;
//say(iPuntero_Barra.iValor);
end
return;
end
case _right:
if (iFinal_Pantalla<CantidadLineas-1)
iFinal_Pantalla=iFinal_Pantalla+iLineas_Caja;
if (iFinal_Pantalla>CantidadLineas-1)
iFinal_Pantalla=CantidadLineas-1;
end
iPrincipio_Pantalla=iFinal_Pantalla-iLineas_Caja;
iLinea=0;
while ((iLinea<iLineas_Caja))
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla+iLinea],iTabla_Lineas[iPrincipio_Pantalla+iLinea+1]-iTabla_Lineas[iPrincipio_Pantalla+iLinea]);
iLinea++;
end
end
return;
end
case _left:
if (iPrincipio_Pantalla>0)
iPrincipio_Pantalla=iPrincipio_Pantalla-iLineas_Caja;
if (iPrincipio_Pantalla<1)
iPrincipio_Pantalla=0;
end
iFinal_Pantalla=iPrincipio_Pantalla+iLineas_Caja;
iLinea=0;
while ((iLinea<iLineas_Caja))
Pantalla[iLinea]=substr(sTexto,iTabla_Lineas[iPrincipio_Pantalla+iLinea],iTabla_Lineas[iPrincipio_Pantalla+iLinea+1]-iTabla_Lineas[iPrincipio_Pantalla+iLinea]);
iLinea++;
end
end
return;
end
end
end
process Main()
private
int iFuente=0;
// Boton iIde;
int x1,y1;
byte bLineas;
string sTexto1[2]="";
string sTexto2[0]="";
string sTexto3[4]="";
string sTexto="";
end
begin
set_fps(30,0);
delete_draw(0);
drawing_z(1);
drawing_color(rgb(100,100,100));
draw_box(0,0,350,300);
cursor=load_fpg("cursors.fpg"); // AQUI EL FPG CON EL GRAFICO DEL CURSOR. ####################
raton();
sTexto=File("varios.prg"); // AQUI EL FICHERO A MOSTRAR. #####################################
iIde=Caja_De_Texto(10,300,15,220,sTexto,iFuente,10);
//write_var(0,200,100,4,iIde.iValor);
while (!key(_ESC))
frame;
end
exit();
end
process raton();
begin
loop
graph=1;
x=mouse.x;
y=mouse.y;
z=-251;
frame;
end
end
No era más fácil ponerlo de adjunto ? Karma por el labor de todos modos :)
Uppppsssssssssss, Division By Zero...
Veleeeeeee, esta noche lo pongo mono, si me dejan. ;D
Yo tengo algo parecido de los tiempos de DIV por aqui, si te interesa podré buscartelo cuando tenga más tiempo...
Cuando vuecencia pueda. :D
Aqui te lo dejo :) Tenia eventos y controles como si fueran de "Windows", no lo he probado, sobretodo porque es necesario compilarlo con DIV ya que usa la dll 'ascii.dll' de Tizo para DIV, aunque algo de ello puedes aprovechar.
Mirate tambien las cajas de texto que ha hecho Windgate, igual no las conocias:
http://forum.bennugd.org/index.php?topic=861.msg12691#msg12691
Gracias compañero.
gracias a toda la peña. Hace un par de dias que no entro asi que toca comentar los avances conseguidos. Bueno el apartado gráfico creo que ya esta prácticamente terminado. Tengo en total 20 misiones programadas y tengo todos los fondos de pantalla terminados.
Respecto al tema de las naves enemigas consegui terminar un par de diseños propios y aunque me ha costado sudor y lagrimas he conseguido ripear una especie de robot-humanoide al mas puro estilo Macross del juego Blazing Star. Todo esta retocado usando el editor gráfico de Div-2 (gracias a FreeYourMind por pasarlo). Los efectos de explosiones tmb están terminados asi como los items que puede capturar la nave espacial escogida. Me falta por terminar/retocar los gráficos de la nave del protagonista y los distintos tipos de disparos.
Respecto al tema de los menus ya esta resuelto, en el tuto de osk viene perfectamente explciado como realiar menus sencillos, asi que no me complicare muxo la vida y lo seguire porque esta bastante bien.
saludos.