Hola,abro este post para no mezclar cosas.Ire comentando como va avanzando el motor de scroll multidireccional.
Lo que tengo hecho:
1.Cargo un mapa externo en miniatura que tiene toda la informacion de los "tiles",pongo tiles entre comas porque en verdad no son tiles como tal,pues todo se basa en tablas.
2.Seleciono la pantalla de inicio ,tiene 10x10+10*10... ,es decir 3200x2400 pixeles tiene el mapa del juego,aunque no tiene limite alguno porque todo esta troceado.
3.Me puedo mover de forma multidireccional,es decir de forma ciclica en todos los lados,arriba,abajo,izquierda y derecha.Me falta poner "banderas"en otra tabla,es decir por ejemplo si estoy en la pantalla 03 que solo pueda subir o bajar.
4.Ahora estoy reduciendo codigo,pues repito muchas cosas y mirando porque en los limites del mapa grande no me permite pintar o avanzar,si aun quedan un par de tiles por mostrar.Podria omitirlo y solo utilizar 9x9+9x9..pero mejor encontrar el motivo y si no lo encuentro,pues nada pregunto a ver quien me saca la duda.
Cuando lo solvente paso a la segunda fase añadir colisones para hacer juegos tipo cenital y comento.
Interesante! Esperando ejemplo para ver que tal funciona. :)
Por si te sirve, hay una función que trocea mapas y te devuelve los trozos en un array: https://www.divgo.net/c-bd2fcf35
Un saludo.
Hola amakast,
Hace tiempo que vi este ejemplo, pero no le presté atención,tengo que mirar su código, pues pensaba que era simplemente un efecto gráfico y resulta que cada trozo lo manipulas con su índice de la tabla.... seguro que le saco provecho, gracias.
Hola Amakast
Bug chungo...con las condiciones y scrolls ...si elimino la linea divgo no se bloquea :
IF(falla==100)falla=200;end ///linea que bloquea divgo ..debes de borrarla para que funcione...
Si elimino la linea :
// IF(falla==100)falla=200;end ///linea que hace dibujar mal el scroll si pongo todo el motor completo XD;que gracioso..
con el codigo completo el scroll funciona en parte,pues tengo que añadir una condicion que no me deja,pues se bloquea o bien dibuja mal,da igual que parametros ponga en la condicion que aunque sea ficticia afecta al comportamiento erroneo JOE
/*
Program's Name: <My Program Name>
Author's Name: <My Name>
Company's Name: <My Company or Group>
*/
program Motor2d;
global
resolucionx=128;
resoluciony=128;
fichero1;
T_tx=96;//tamaño de la tablax
T_ty=96;//tamño de la tablay
T_sizex=8;//tamaño del tile
T_sizey=8;//tamalo del tile
Casilla_Iniy=1;
Casilla_Inix=2;
jota1;
jota2;
jota3;
jota4;
jota5;
Celda_x;
Celda_y;
Tiles_nx=resolucionx/8;//numero de tiles x;
Tiles_ny=resolucionx/8;//numero de tiles y;
T_tiles[96*96];
begin
set_title("Motor 2d");
//set_icon("graficos/009.png");
set_mode(resolucionx+16,resoluciony+16,2);
screen_color(rgb(255,0,0));
set_color(rgb(0,0,0));
set_fps(60, 0);
screen_smooth(false);
// call a process
write_int(0,0,0,0, offset jota1);
write_int(0,0,20,0,offset jota2);
write_int(0,0,40,0,offset jota3);
write_int(0,0,60,0,offset jota4);
write_int(0,0,80,0,offset jota5);
fichero1=load_fpg("graficos/motor2d/");
// my_process(240, 160);
Inicializa_tabla();
loop
if (key(_esc)) exit("Text Exit", 1); end
frame;
end
end
process my_process(x, y);
private
//declared private variables
energy = 100;
life = 3;
begin
file=fichero1;
graph = 1;
size = 100;
z = 10;
loop
frame;
end
end
//_______________________________________________________________________________________________________________________________________________________--
//_______________________________________________________________________________________________________________________________________________________--
Process Inicializa_Tabla()
private
valor,tile;
BEGIN
file=fichero1;
for (y=0;y<T_ty;y++)
for (x=0;x<T_tx;x++)
valor=map_get_pixel(fichero1, 100, x, y, "r");
if (valor==151) tile=201;end
if (valor==0) tile=200;end
if (valor==44) tile=202;end
T_tiles[x+y*T_tx]=tile;
end
end
Pinta_Fondo();
END
//__________________________________________________________________________________________________________________________________________________________________________________-
//__________________________________________________________________________________________________________________________________________________________________________________-
Process Pinta_Fondo()
private
x_destino,y_destino,x_origen,y_origen,map_ancho,map_alto;
c_x,c_y,i,j,valor;
n_tilex,n_tiley;//numero de tiles en la horizontal y vertical de la resolucion 128/8=16...
casillax,casillay;
scrolx,scroly,sy;
lineay,lineax;
anteriory,anteriorx;
sentidoy;
actualy;
kx,ky;
scroll_sentido;
incremento_y;
ku,kd;//sube ..kd=baja
ii;
v_sentido;
falla;
BEGIN
file=fichero1;
//graph=101;
n_tilex=resolucionx/T_sizex;////128/8=16;
n_tiley=resoluciony/T_sizey;
map_ancho = 1;
map_alto = 1;
c_x=Casilla_Inix*(n_tilex);//128/8=16 casillas..4
c_y=Casilla_Iniy*(n_tiley);//128/8=16 casillas..2
casillax=Casilla_Inix*n_tilex;//16
casillay=(Casilla_Iniy)*(T_ty)*(n_tiley);//2*96*16...fila 1== 1*96*16...
//casillay=(Casilla_Iniy)*(T_ty)*(16);//2*96*16...fila 1== 1*96*16...
Celda_x=Casilla_Inix*n_tilex;
Celda_y=Casilla_Iniy*n_tiley;
x=(T_sizex*2+resolucionx)/2;
y=(T_sizey*2+resoluciony)/2;
valor=201;
for(i=0;i<resoluciony/T_sizey;i++)//128/8=16....
for(j=0;j<resolucionx/T_sizex;j++)//128/8=16....
valor=T_tiles[((Casillax+j)+(Casillay+96*i))];//(casilla Inicial*16+j)+i*96...
x_origen=0;
y_origen=0;
x_destino=T_sizex+T_sizex/2+j*T_sizex;//8+4=12
y_destino=T_sizey+T_sizey/2+i*T_sizey;
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
end
end
i=0;
for(j=0;j<(resolucionx/T_sizex)+8*2;j++)//128/8=16....
valor=T_tiles[((Casillax+j-1)+(Casillay+96*i)-96)];//(casilla Inicial*16+j)+i*96...
x_origen=0;
y_origen=0;
x_destino=4+j*8;
y_destino=4;
///...............ARRIBA....................................................................
if(Celda_y<>0)
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
end
valor=T_tiles[((Casillax+j-1)+(Casillay+96*i)+96*16)];//(casilla Inicial*16+j)+i*96...
x_origen=0;
y_origen=0;
x_destino=4+j*8;
y_destino=4+8*17;
///...............ABAJO....................................................................
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
end
start_scroll(0, fichero1, 101, 201, 0, 15);
scroll.front.alpha = 100;
scroll.back.alpha = 0;
y_destino=0;
anteriory=0;
sentidoy=0;
// map_block_copy(fichero1,101, 144/2, 144/2 , 4,0,0, 144,144);//dibuja un punto en el centro...
// refresh_scroll(0);
LOOP
if(key(_down) )
ii++;
IF(ii>6)
scroll.front.y += 8;
scroll.back.y += 8;
ii=0;
scroll_sentido = 1;
else
scroll_sentido= 0;
END
end
if(key(_up) )
ii++;
IF(ii>6)
scroll.front.y -= 8;
scroll.back.y -= 8;
ii=0;
scroll_sentido =-1;
else
scroll_sentido = 0;
END
end
if(not key(_up) and not key(_down))
scroll_sentido = 0;
end
If(scroll_sentido<>0 and (abs(scroll.back.y) % 8 )== 0 ) //si me muevo 8 pixeles hacia arriba o hacia abajo...
IF(falla==100)falla=200;end ///linea que bloquea divgo ..debes de borrarla para que funcione..//FALLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
i=0;j=0;
i=0;
//______________________________________________________________________________________________________________________________________________________________________________________________________________-
IF(scroll_sentido == 1)
IF(falla==100)falla=200;end ///linea que hace dibujar mal el scroll si pongo todo el motor completo XD;que gracioso.. FALLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!
incremento_y = (Celda_y + Casilla_Iniy*2) mod 18;
Celda_y=Celda_y+1;
FOR(j=0;j<(resolucionx/T_sizex)+8*2;j++)//128/8=16....
valor=T_tiles[(Celda_x+j-1 + (96*Celda_y))+96*16];
x_origen=0;
y_origen=0;
x_destino=4+j*8;
y_destino=4+8*(incremento_y);
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
END
incremento_y++;
IF(incremento_y==18) incremento_y=0;END
v_sentido=1;
refresh_scroll(0);
END
END
jota1=Celda_x;
jota2=Celda_y;
jota3=incremento_y;
//jota4=incremento_y;
FRAME;
END
END
Si con esto trozo de código y explicación no encuentras el motivo pq se bloquea divgo te puedo pasar dos ejemplos empaquetados y con su código .lo más reducido posible..uno es simplemente con el código que te he mostrado, provoca que divgo se bloqueé otro añade un par de líneas más donde puedes bajar y subir el scroll por teclado,pero como tengo que añadir una condición para que dibuje correctamente no lo hace bien,si elimino la condición aunque no afecte el código va bien hasta que cambia de sentido el scroll ,lógico pues falta implementar la condición que no me permite,pues hace tonterías ;D
Hola oskarg,
Me faltan los gráficos, sin ellos se me bloquea antes, en la carga. Aun así, en esas líneas no veo nada raro para que se te bloquee el código. Pásame lo que me has comentado para yo poder probar y ver desde el navegador que esta fallando.
Un saludo.
Esta noche, cuando llegue a casa, sin falta te paso el ejemplo con gráficos y de esa manera quizás descubras pq se bloquea....si quitas el if comentado no se bloquea.. si añado el otro if los incrementos los suma mal...la mar de divertido 😁 y eso que el if no afecta para nada al código.
Gracias de antemano por echarle un vistazo
Hola Amakast,
te paso el primer ejemplo empaquetado donde en este caso se bloquea... a raiz de la linea 238 una vez que pulsas la tecla down...
IF(falla==100)falla=200;end ///linea que bloquea divgo ..debes de borrarla para que funcione... si la quitas y pulsas tecla down baja el scroll.
Si encuentras el motivo ,te agradezco el esfuerzo por encontrarlo ,pues no puedo poner condiciones y si las acepta sin que se quede bloqueado los incrementos ..por ejemplo x++; los hace mal
Un saludo
/*
Program's Name: <My Program Name>
Author's Name: <My Name>
Company's Name: <My Company or Group>
*/
program Motor2d;
global
resolucionx=128;
resoluciony=128;
fichero1;
T_tx=96;//tamaño de la tablax
T_ty=96;//tamño de la tablay
T_sizex=8;//tamaño del tile
T_sizey=8;//tamalo del tile
Casilla_Iniy=1;
Casilla_Inix=2;
jota1;
jota2;
jota3;
jota4;
jota5;
Celda_x;
Celda_y;
Tiles_nx=resolucionx/8;//numero de tiles x;
Tiles_ny=resolucionx/8;//numero de tiles y;
T_tiles[96*96];
begin
set_title("Motor 2d");
//set_icon("graficos/009.png");
set_mode(resolucionx+16,resoluciony+16,2);
screen_color(rgb(255,0,0));
set_color(rgb(0,0,0));
set_fps(60, 0);
screen_smooth(false);
// call a process
write_int(0,0,0,0, offset jota1);
write_int(0,0,20,0,offset jota2);
write_int(0,0,40,0,offset jota3);
write_int(0,0,60,0,offset jota4);
write_int(0,0,80,0,offset jota5);
fichero1=load_fpg("graficos/motor2d/");
// my_process(240, 160);
Inicializa_tabla();
loop
if (key(_esc)) exit("Text Exit", 1); end
frame;
end
end
process my_process(x, y);
private
//declared private variables
energy = 100;
life = 3;
begin
file=fichero1;
graph = 1;
size = 100;
z = 10;
loop
frame;
end
end
//_______________________________________________________________________________________________________________________________________________________--
//_______________________________________________________________________________________________________________________________________________________--
Process Inicializa_Tabla()
private
valor,tile;
BEGIN
file=fichero1;
for (y=0;y<T_ty;y++)
for (x=0;x<T_tx;x++)
valor=map_get_pixel(fichero1, 100, x, y, "r");
if (valor==151) tile=201;end
if (valor==0) tile=200;end
if (valor==44) tile=202;end
T_tiles[x+y*T_tx]=tile;
end
end
Pinta_Fondo();
END
//__________________________________________________________________________________________________________________________________________________________________________________-
//__________________________________________________________________________________________________________________________________________________________________________________-
Process Pinta_Fondo()
private
x_destino,y_destino,x_origen,y_origen,map_ancho,map_alto;
c_x,c_y,i,j,valor;
n_tilex,n_tiley;//numero de tiles en la horizontal y vertical de la resolucion 128/8=16...
casillax,casillay;
scrolx,scroly,sy;
lineay,lineax;
anteriory,anteriorx;
sentidoy;
actualy;
kx,ky;
scroll_sentido;
incremento_y;
ku,kd;//sube ..kd=baja
ii;
v_sentido;
falla;
BEGIN
file=fichero1;
//graph=101;
n_tilex=resolucionx/T_sizex;////128/8=16;
n_tiley=resoluciony/T_sizey;
map_ancho = 1;
map_alto = 1;
c_x=Casilla_Inix*(n_tilex);//128/8=16 casillas..4
c_y=Casilla_Iniy*(n_tiley);//128/8=16 casillas..2
casillax=Casilla_Inix*n_tilex;//16
casillay=(Casilla_Iniy)*(T_ty)*(n_tiley);//2*96*16...fila 1== 1*96*16...
//casillay=(Casilla_Iniy)*(T_ty)*(16);//2*96*16...fila 1== 1*96*16...
Celda_x=Casilla_Inix*n_tilex;
Celda_y=Casilla_Iniy*n_tiley;
x=(T_sizex*2+resolucionx)/2;
y=(T_sizey*2+resoluciony)/2;
valor=201;
for(i=0;i<resoluciony/T_sizey;i++)//128/8=16....
for(j=0;j<resolucionx/T_sizex;j++)//128/8=16....
valor=T_tiles[((Casillax+j)+(Casillay+96*i))];//(casilla Inicial*16+j)+i*96...
x_origen=0;
y_origen=0;
x_destino=T_sizex+T_sizex/2+j*T_sizex;//8+4=12
y_destino=T_sizey+T_sizey/2+i*T_sizey;
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
end
end
i=0;
for(j=0;j<(resolucionx/T_sizex)+8*2;j++)//128/8=16....
valor=T_tiles[((Casillax+j-1)+(Casillay+96*i)-96)];//(casilla Inicial*16+j)+i*96...
x_origen=0;
y_origen=0;
x_destino=4+j*8;
y_destino=4;
///...............ARRIBA....................................................................
if(Celda_y<>0)
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
end
valor=T_tiles[((Casillax+j-1)+(Casillay+96*i)+96*16)];//(casilla Inicial*16+j)+i*96...
x_origen=0;
y_origen=0;
x_destino=4+j*8;
y_destino=4+8*17;
///...............ABAJO....................................................................
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
end
start_scroll(0, fichero1, 101, 201, 0, 15);
scroll.front.alpha = 100;
scroll.back.alpha = 0;
y_destino=0;
anteriory=0;
sentidoy=0;
// map_block_copy(fichero1,101, 144/2, 144/2 , 4,0,0, 144,144);//dibuja un punto en el centro...
// refresh_scroll(0);
LOOP
if(key(_down) )
ii++;
IF(ii>6)
scroll.front.y += 8;
scroll.back.y += 8;
ii=0;
scroll_sentido = 1;
else
scroll_sentido= 0;
END
end
if(key(_up) )
ii++;
IF(ii>6)
scroll.front.y -= 8;
scroll.back.y -= 8;
ii=0;
scroll_sentido =-1;
else
scroll_sentido = 0;
END
end
if(not key(_up) and not key(_down))
scroll_sentido = 0;
end
If(scroll_sentido<>0 and (abs(scroll.back.y) % 8 )== 0 ) //si me muevo 8 pixeles hacia arriba o hacia abajo...
IF(falla==100)falla=200;end ///linea que bloquea divgo ..debes de borrarla para que funcione...
i=0;j=0;
i=0;
//______________________________________________________________________________________________________________________________________________________________________________________________________________-
IF(scroll_sentido == 1)
// IF(falla==100)falla=200;end ///linea que hace dibujar mal el scroll si pongo todo el motor completo XD;que gracioso..
// incremento_y = (Celda_y + Casilla_Iniy*2) mod 18;
Celda_y=Celda_y+1;
FOR(j=0;j<(resolucionx/T_sizex)+8*2;j++)//128/8=16....
valor=T_tiles[(Celda_x+j-1 + (96*Celda_y))+96*16];
x_origen=0;
y_origen=0;
x_destino=4+j*8;
y_destino=4+8*(incremento_y);
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
END
incremento_y++;
IF(incremento_y==18) incremento_y=0;END
v_sentido=1;
refresh_scroll(0);
END
END
jota1=Celda_x;
jota2=Celda_y;
jota3=incremento_y;
//jota4=incremento_y;
FRAME;
END
END
No entiendo por que quitando ese if de la linea 238,divgo no se bloquea y baja el scroll si ese if no hace nada.
Hola AmakaST,
He encontrado el motivo pero no entiendo el error que comete divgo al compilarlo e intentar ejecutarlo.
SI pongo esto asi tal cual ,con la condicion no anulada de la linea 238 se bloquea:
if(key(_down) )
ii++;
IF(ii>6)
scroll.front.y += 8;
scroll.back.y += 8;
ii=0;
scroll_sentido = 1;
else
scroll_sentido= 0;
END
end
en cambio si pongo esto con la condicion no anulada no se bloquea.
if(key(_down) )
ii++;
// IF(ii>6)
scroll.front.y += 8;
scroll.back.y += 8;
// ii=0;
scroll_sentido = 1;
// else
// scroll_sentido= 0;
// END
end
y si quito la condicion no se bloquea aunque lo ponga asi
if(key(_down) )
ii++;
IF(ii>6)
scroll.front.y += 8;
scroll.back.y += 8;
ii=0;
scroll_sentido = 1;
else
scroll_sentido= 0;
END
end
Qué explicación lógica tiene ?¿? no entiendo nahh ;D
HOla otra vez,ya lo tengo funcionando correctamente :P el scroll ,pero no puedo reducir la velocidad del scroll con esta forma ?¿? POR QUE?¿? por que se bloquea ?¿? por que al ponerlo ,tambien me afecta en otras condiciones de forma erronea y los incrementos?¿? .que explicacion tiene¿?¿?me gustaria comprender el motivo .
if(key(_down) )
ii++;
IF(ii>6)
scroll.front.y += 8;
scroll.back.y += 8;
ii=0;
scroll_sentido = 1;
else
scroll_sentido= 0;
END
end
Hola oskarg,
Ya he corregido este problema, se debía a un problema en el espacio que reserva DivGO para las condiciones a la hora de construir el javascript, esto es lo que estaba pasando:this.DivGO_code[107] = function(My){ My.DivGO_inst = 79; };
this.DivGO_code[109] = function(My){ My.falla=200; };
this.DivGO_code[110] = function(My){ My.DivGO_inst = 91; };
this.DivGO_code[112] = function(My){ My.valor=t_tiles[(celda_x+My.j-1 + (96*celda_y))+96*16]; };
this.DivGO_code[113] = function(My){ My.x_origen=0; };
this.DivGO_code[114] = function(My){ My.y_origen=0; };
this.DivGO_code[115] = function(My){ My.x_destino=4+My.j*8; };
this.DivGO_code[116] = function(My){ My.y_destino=4+8*(My.incremento_y); };
this.DivGO_code[116] = function(My){ celda_y=celda_y+1; };
this.DivGO_code[117] = function(My){ DivGO.functions.map_block_copy(fichero1, 101, My.x_destino,My.y_destino,My.valor , My.x_origen,My.y_origen, 8,8); };
this.DivGO_code[117] = function(My){ My.j=0; };
this.DivGO_code[118] = function(My){ My.DivGO_inst = 119; };
this.DivGO_code[118] = function(My){ if ((My.j<(resolucionx/t_sizex)+8*2)){ My.DivGO_inst = 112; }else{ My.DivGO_break(121); }; };
this.DivGO_code[119] = function(My){ My.j++; };
this.DivGO_code[120] = function(My){ My.DivGO_inst = 118; };
El this.DivGO_code[116], this.DivGO_code[117] y this.DivGO_code[118] se repiten y bloquea el programa, esto me estaba fallando hace algún tiempo en mi juego Panic! y no sabía cómo localizarlo debido al código tan grande que tiene. :)
Un saludo y gracias por el report!
Hola de nuevo...
Desde hace dos dias tengo vacaciones obligadas >:( ,pero bueno aprovecho estos días para programar con divgo.
Publico los avances que he realizado,muestro simplemente un scroll multidireccional.Cada casilla enumerada representa una pantalla completa del juego..solo hay que mover los cursores para que se mueva correctamente el scroll.Juraria que cuando lo programe hace siglos lo hice de otra manera en div2 basandome en la revista div nº6....pero estando en el trabajo se me ocurrio una forma muy sencilla de hacerlo,pues me estaba volviendo loco ,pues no pegaba correctamente los tiles en la posicion adecuada cuando pulsaba para que avanzara en dos direcciones,por ejemplo arriba y derecha....
Ahora que lo tengo hecho,paso a la fase de colisiones ...cuando lo tenga realizado ,monto otro ejemplo y sigo comentando.
Un saludo.
Bueno....Ya tengo el scroll ciclico con el segundo plano :) ...es decir.....tengo de momento dos planos de scroll....uno limitado y el otro cuando llega al final de la casilla 1,5,comienza a dibujar en el 1,0...........ahora sí,a por las colisiones.....
Hola oskarg,
Ahora estamos todos en casa de forma obligatoria... es lo que hay. Yo estos días he podido avanzar más rápido DivGO y ya estoy preparando la versión 1.28.
Esta muy bien este motor de tiles, a ver que tal avanza. :)
Un saludo.
Hola AmakaSt,
tengo localizado un bug muy raro en divgo..compila el ejemplo pero el proceso no lo pinta...
Consiste en hacer simplemento esto tabla1[0]=tabla2[1][1] ..En cambio si creo una variable previamente donde haga lo siguiente:
variable=tabla2[1][1];
tabla1[0]=variable
Se ejecuta bien el proceso y lo muestra.......... muy raro. :o
muestro codigo completo donde lo puedes compilar adjunto graficos..
/*
Program's Name: <My Program Name>
Author's Name: <My Name>
Company's Name: <My Company or Group>
*/
/*
var rect1 = {x: 5, y: 5, width: 50, height: 50}
var rect2 = {x: 20, y: 10, width: 10, height: 10}
if (rect1.x < rect2.x + rect2.width &&
rect1.x + rect1.width > rect2.x &&
rect1.y < rect2.y + rect2.height &&
rect1.height + rect1.y > rect2.y) {
// ¡colision detectada!
*/
program Plataformas_Base;
GLOBAL
Coli_box;//colision caja
P_x = 16;//Posicion x
P_y = 0;//rectangulo alto
P_ancho=8;
P_alto= 8;//16
zz;
T_fondo[128,128];//para no complicar el algoritmo lo hago en dos dimensiones...quizas lo cambie.....
//10 pantallas.....de tamaño 128x128 .....
//T_salto[]=-10,-8,-6,-4,-2,-2,-1,-1,0,0,1,1,2,2,4,6,8,10;
//T_salto[]=-9,-7,-5,-2,-2,-1,-1,0,1,1,2,2,5,7,9;
T_salto[] =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; /////////15..............
T_salto1[] =-6,-3,0,0,3,6; /////6
T_salto2[] =-6,-5,-4,-3,-2,-1,-1,0,0,0,0,0,1,1,2,3,4,5,6; /////////19..............
T_tipo[5] = 0,0,0,0,0;
indice_salto=0;
Tabla_Fondo[15,15];
valor_tabla;
T_x = 8;//posicion rectangulo x
T_y = 8;//posicion rectangulo y
T_ancho=8;
T_alto =8;
caida=1;
Poder_salto=6;
v_g=2;
saltando;
salto_poder=8;
puedo_saltar=0;
jota1;
jota2;
jota3;
jota4;
jota5;
jota6;
jota8;
dista_up;
dista_do;
dista_le;
dista_ri;
coli_up;
coli_do;
coli_le;
coli_ri;
mame;
FICHERO1;
Prota_cajax;
Prota_cajay;
Prota_estoy;
LOADING
set_mode(m320x240);
set_title("Game´s Evoteka: Cargando...");
text = 'Cargando datos...';
text_color = rgb(255, 220, 200);
text_size = 40;
text_x = 240;
text_y = 200;
text_position = 4;
BEGIN
set_title("My Program Name");
set_mode(128,128,3);
set_color(rgb(0,0,0));
screen_color(rgb(20,50,10));
screen_smooth(false);
screen_color(cc_silver);
set_fps(30, 0);
text_size=42;
//write_int(0,0,20,0,offset jota1);
FICHERO1=load_fpg("graficos/motor2d/");
Graba_tabla();
Prota(P_x,P_y);
loop
if (key(_esc)) exit("Text Exit", 1); end
frame;
end
end
PROCESS Prota(x, y)
private
tile_x;
tile_y;
salto_offset;
salto_pasos;
gg;
Prota_H;
Prota_v;
//Prota_cajax;
//Prota_cajay;
piso_suelo;
caida_libre;
cambia_sentido;
tipo_salto;
ancho,alto;
gravedad;
disparando;
reloj1;
reloj2;
reloj3;
i;
final_salto;
colision_salto;
cajaxx,cajayy;
xxx;
BEGIN
file=FICHERO1;
graph = 804;
Saltando=FALSE;
Prota_h=1;
flags=0;
cambia_sentido=0;
ancho = P_ancho/2;
alto = P_alto/2;
x=x+ancho;
y=y+alto;
Prota_h=1;
P_x=x;
P_y=y;
LOOP
//_____________________________________________________________________________________________________________________________________________-
Prota_cajay=round(P_y /8) -1 ;
Prota_cajax=round(P_x /8) -1 ;
IF(Prota_H == -1)
Prota_cajax=round( (P_x-1) /8);//////////TENGO QUE MIRARLO MEJOR EL P_x y el PY !!!!!!!!!!
END
Cajaxx=Prota_cajax;
Cajayy=Prota_cajay;
jota1=cajaxx;
jota2=cajayy;
//////// BUG!...........................BUG.........!!!! T_tipo[1]=Tabla_fondo[cajaxx][cajayy];
xxx=Tabla_fondo[cajaxx][cajayy];
T_tipo[1]=xxx;
// T_valor[2]=Tabla_fondo[cajaxx][cajayy];
//_____________________________________________________________________________________________________________________________________________-
FRAME;
END
END
//________________________________________________________________________________________________________________________________________________________________________-
//________________________________________________________________________________________________________________________________________________________________________-
PROCESS BUSCA_COLISION(PP_x,PP_y)//px protagonista.
BEGIN
END
//________________________________________________________________________________________________________________________________________________________________-
//________________________________________________________________________________________________________________________________________________________________-
PROCESS TILE(T_x,T_y)
BEGIN
END
//_____________________________________________________________________________________________________________________________-
PROCESS Graba_tabla()
BEGIN
PINTA_FONDO();
END
//______________________________________________________________________________________________________________________________________________________________
//_____________________________________________________________________________________________________________________________________________________________--
//______________________________________________________________________________________________________________________________________________________________________________-
PROCESS PROTA_DISPARA(sentido_b,balax,balay)
BEGIN
END
//_____________________________________________________________________________________________________________________________________________________________--
//______________________________________________________________________________________________________________________________________________________________________________-
//________________________________________________________________________________________________________________________________________________________________________-
//________________________________________________________________________________________________________________________________________________________________________-
PROCESS BUSCA_COLISIONB(B_ancho,B_alto,B_x,B_y,colisionb)//px protagonista.
BEGIN
END
//________________________________________________________________________________________________________________________________________________________________-
//______________________________________________________________________________________________________________________________________________________________________________________--
//______________________________________________________________________________________________________________________________________________________________________________________--
PROCESS PINTA_FONDO()
BEGIN
END
LINEA 174
POR QUE?¿? POR QUE¿? :-\
Otro bug molesto...cuando empaqueto el juego a veces no me incluye ciertos graficos,por fortuna lo abro el index con open brackets y ahi averiguo que grafico esta corrupto o no incluido.
Un saludo.
Has probando con la 1.28.2?
Hola AmakST,
El bug persiste en la ultima version...te he incluido el codigo con sus graficos . Por algun motivo divgo directamente no acepta asignar una tabla procecente de otra tabla....Ya me contaras .....
ahhh!! y gracias por la actualizacion ...estoy con ella ahora.
tabla1[0]=tabla2[1][1]; //DA error !!!!
variable=tabla2[1][1];
tabla1[0]=variable;// FUNCIONA
NO ES QUE DE ERROR SIMPLEMENTE QUE EL PROCESO NO LO PINTA....... ???
Un saludo.
Hola AmakSt,
Hay un nuevo bug en la version 128r2 sobre los scrolls.....te pongo el ejemplo
te explico...
1.si anulo la linea 34 el scroll no se mueve :o //scroll[0].front.y -= 0.5;
2.si anulo la linea 35 el scroll front y bak se mueve... :o // scroll[0].back.y -= 0.25;
3.si no anulo linea 34 y 35 el scroll front y back se mueven correctamente. ;D
// Example of online compiler Div GO: Games Online
// Php + Html5 + Canvas + Javascript
// by J. Manuel Habas
program example_collision;
global
id_txt1, id_txt2;
score = 0;
sound1, sound2, sound3;
begin
set_title("Div GO : Example of Collisions");
/* display options */
set_mode(480, 320);
screen_color(#025);
set_fps(60, 0);
start_scroll(0, 0, 2, 1, 0, 0);
scroll[0].front.alpha = 20;
scroll[0].back.alpha = 10;
map_block_copy(0, 2, 50,50,3 , 0,0, 120,120);//dibuja un punto en el centro...
refresh_scroll(0);
loop
scroll[0].front.y -= 0.5;
// scroll[0].back.y -= 0.25;
if (key(_esc)) exit("Amaka Soft 2012", 1); end
frame;
end
end
un saludo.
EN LA VERSION ANTERIOR FUNCIONA!!! >:(
Hola oskarg,
Doy un tiempo prudencial para testear antes de sacar la versión de descarga y no para testearla yo solo, sino para que la testeen también los interesados en DivGO. Yo testeo lo que se que ha ido fallando y alguna cosa más que me va apareciendo. Si nadie, aparte de mí, reporta nada, lo considero como que todo va de maravilla.
He localizado el problema del scroll, hice cambios para solucionar otro problema con un reajuste de posición automática de la cámara que sucedía en Dr. Malvado y Panic!. Me lo apunto para corregir.
Un saludo.
Hola AmaKaST,
gracias por el detalle.
Sobre el testeo,hasta que no estaba disponible y no me di cuenta no la probé...Ya intentaré en otra ocasión probar más a fondo la versión que está disponible online.
Sobre la asignacion de una tabla sobre otra tienes ahi otro bug.... es decir tabla1[0]=tabla2[1][2] ...Falla...pero si hago variable=tabla2[1][2] y luego tabla1[0]=variable funciona.
Te comento otra bug raro ,quizas ya lo hayas corregido...es sobre el scroll.aunque quizas sea algo normal ni idea...
Si el tamaño de la resolucion de la pantalla tiene el mismo tamaño que el mapa de scroll no se mueve y si el front tiene diferente sentido al back tampoco se mueve.
sigo trasteando
Un saludo.
Hola oskarg,
Ya tengo corregido el bug de los arrays de dos dimensiones, pasa tanto al asignar como al operar entre ellos, y también he corregido los scrolls manuales.
Sobre el bloqueo del mapa en el scroll se puede deber al código de bloqueo (sacado de Div2):
start_scroll(<número de scroll>, <fichero>, <gráfico>, <gráfico fondo>, <número de región>, <indicador de bloqueo>);
<indicador de bloqueo> - Aquí se indicará un valor que define si cada uno de los dos planos de scroll es cíclico en horizontal y vertical. Por ejemplo, un plano es cíclico en horizontal cuando al salirse del dibujo por la derecha aparece el dibujo por la izquierda. Para componer este valor se deben sumar las siguientes cantidades:
+ 1 - Si el primer plano es cíclico horizontalmente.
+ 2 - Si el primer plano es cíclico verticalmente.
+ 4 - Si el segundo plano es cíclico horizontalmente.
+ 8 - Si el segundo plano es cíclico verticalmente.
Es decir, 0 si ninguno de los dos planos debe ser cíclico, 15 (1+2+4+8) si ambos planos deben ser cíclicos en ambos ejes, 12 (4+8) si únicamente debe ser cíclico el segundo plano, etc.
Cuando un gráfico (principal o de fondo) sea más pequeño que la ventana de visualización, el sistema forzará a que su plano de scroll sea cíclico pues, en caso contrario, no se podría rellenar la ventana de scroll por completo, sin repetir cíclicamente el gráfico (en mosaico).
Un saludo.
Muchas gracias AmakaSt;
Por mi parte estoy liado ahora con el motor base para juegos 2d....Cuando termine una cosa,muestro los progresos.
Un saludo.
Hola de nuevo,
Tengo un pequeño problema en el código que hace que tenga que comprobar más posiciones de la tabla que las que debería, ayer por fin encontré dónde falla , espero subsanarlo esta semana y ya tengo un motor donde el personaje puede saltar, disparar y que las balas colisione con las paredes,subir escaleras, eliminar tiles etc,
Cuando lo tenga solventado , público un simple ejemplo,el código es muy sencillo de entender y si todo marcha como espero ya el domingo implento el scroll .
Un saludo
Hola de nuevo...
Si la montaña no va a Mahoma ,Mahoma va la montaña.....
Hace siglos que no programo,pero mañana tengo dia libre y retomo el proyecto.
Hago un pequeño resumen de lo que tengo:
1.Ya tengo el motod multidireccional,funcionando ....ahora tengo que implementarlo como funciona los juegos de megaman...siempre el scroll funciona en forma de "L "ya entraré con más detalles cuando esté acabado....
2.Ya tengo un ejemplo muy didáctico donde una caja dispara y este colosiona con el fondo,una pared,un enemigo etc,tiene salto de dos tipos .... sube por las escaleras tipo dong king kong ,salta entre plataformas móviles y el fondo es un scroll....Este ejemplo estaría genial que se incluyera en divgo base...pues con él cualquiera puede hacer cualquier tipo de juego a "pantalla parada".
Mañana comienzo hacer el motor tipo megaman...cuando lo tenga vuelvo a comentar y hago una explicación de como funciona el motor para que la gente con poca base o cualquiera entienda su mecánica y público un ejemplo jugable.
Hola de nuevo,sigo vivo ; :P
Sigo con el motor....uhmmm..Lo tenia parado por pereza,no desvelo nada,pero si informo que aun estoy en ello y que de momento todo va avanzando.Cuando tenga algo potable para expirementar publico.
Hola,hoy tengo dia libre y lo estoy aprovechando para seguir con el proyecto..
Desde hace un par de semanas tenia un bug en el programa que me impedia cambiar de mapa,basicamente cuando cambiaba de direccion no mostraba los tiles correctamente y no encontraba el por que,era basicamente una simple variable que no la reseteaba adecuamente...estaba bastante hastiado porque llevaba tiempo sin entender el motivo.Tambien pensaba que me habia equivocado con el sistema que habia creado,me explico,solo podia desplazarme con multiplos del tamaño del tile...1.....2...4....8..16=tamaño tile. No podia cambiarlo durante el transcurso del juego...Esto me ha tenido bastante desconcertado...hasta que me he dado cuenta que solo tenia que hacer un for....desplazandome 1 pixel hasta llegar al lugar que indica la camara y volcar el contenido :P.
1.He probado diferentes cosas...el mapa de colisiones hacerlo por tablas , con un mapa de bits o incluso con un mini scroll el cual no lo visualizo y ahi hago un pixel get.....De momento lo hago de esta forma...cargo el mapa lo transformo en tabla y ahi accedo..aunque tambien me he dado cuenta que con get_pixel,directamente no veo ralentizacion alguna..vere como lo implemento...con 1000 get_pixeles todo fluye en divgo bien.Con el sistema de mini scroll me olvido por completo de tablas uhmmm,cuando lo tenga implementado y funcional con este ultimo sistema quizas Amakast,te doy una sugerencia porque es un simple mapa de scroll de 20x15 que representa 320x240 y los calculos o colisiones es sumamente facil de hacer.Actualmente lo tengo realizado del otro modo,es decir si el mapa tiene 4 pantallas horizontales,esto implica 4*20x15x4 mapa de colision o tamaña de la tabla.
2.Ya tengo un sistema de transicion de pantallas ,me gusta mucho el efecto de mega-man, cuando cambia de direccion se para y de forma automatica se mueve el scroll.De momento solo lo activo en el inicio y al final del mapa.Es decir,solo cuando cambio de direccion....en forma de L.
3.De momento dejo de seguir avanzando y me concentro en unir las dos partes que tengo separadas,El proceso camara,que controla el scroll y el proceso jugador que controla las colisiones Y de esto espero que no salga un frankeinsten ;D ,pues lo tengo bastante bien estructurado.
Ya os contare...
Hola AmakaSt,
Hace tiempo que no programo en divgo,estaba liado con otro hobbie que tengo,el dibujo .He leido tu post y me ha alegrado y motivado seguir en lo que estaba haciendo,aunque la forma como yo lo he planteado es bien diferente a la tuya.Cuando tenga algo funcional con camara te lo paso,lo tengo creado por partes ,falta unirlas...
Como hacia tanto tiempo que no programaba no me enteraba de nada de lo que habia escrito y basicamente esta noche he comentado unas cuantas lineas en el codigo para aclararme .
Adjunto un simple ejemplo de una parte del codigo..Esta semana continuo con el proyecto ,soluciono una cosa del tile de las escaleras y creo un ejemplo basico con camara ahi te paso ya el codigo completo ,quizas ahi saques nuevas ideas para implementarlas en lo que has realizado.
Por cierto,me sale siempre el simbolo de cargar continuamente en windowdesk ,no suelo utilizar el xamp,porque cuando compilo se demora en exceso a la hora de compilar.Aunque ahora me veo obligado,deberias encontrar la solucion al problema.Es cuando he definido una ruta de fpg que no la crea divgo,entonces se bloquea .Deberia reiniciarse por defecto con un ejemplo base y asi se evitar tal problema.
teclas de cursor y z para saltar.
Un saludo.
Hola oskarg,
También tengo (o tenia) el hobbie de dibujar a todas horas, pero ahora solo dibujo cuando lo necesito.
Lo de la ruta de fpg es raro, yo creo muchos fpgs desde carpeta y al buscar mediante load_fpg() me los muestra bien, prueba antes de hacer eso en recargar la página.
En breve libero la versión 1.40.0, estoy preparando algunos ejemplos junto con sus respectivos tilemaps. :)
Un saludo.
Por cierto, ejemplo muy chulo para juegos tipo Bubble Bobble. 8)
Te cuento, amakast
En versión xamp me funciona en versión para escritorio no va.
El bug salió cuando quise crear un nuevo fpg, hacía un load_fpg( " gráficos/fpg1/míos.fpg") y me decía que no lo encontraba entonces ponía otro fpg,le cambiaba el nombre y zass bloqueo total.. hasta que ayer mismo descubrí que solo hay que poner la ruta y omitir el nombre míos.fpg. ahora por más que toco f5 no sale del bucle del icono que se está cargando la página, ese redondo y nunca entra al editor, una vez me lo arreglastes bajando un archivo , pero ya no recuerdo dónde lo guardé. Sí ejecutó otra versión anterior de divgo me pasa igual se queda bloqueado. Tendría que haber un modo que me permitiera cargar un ejemplo por defecto que trae divgo,un simple hola mundo aunque fuera cambiando unos valores en un txt .
Estoy intrigado con lo que has creado , uhmm es lo que siempre he esperado que trajera por defecto cualquier derivado de div porque agiliza de sobremanera una parte muy engorrosa de hacer .
Un saludo.