Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: abaray on September 26, 2009, 11:57:09 PM

Title: noob necesito ayuda plz
Post by: abaray on September 26, 2009, 11:57:09 PM
Primero daros la enorabuena  por el foro y paginas web tanto oficiales como no de bennu.

Llevo sin intentar programar desde epocas de div1 y tampoco es q hiciera mucho.

El problema es q estoy intentando hacer un rpg algo estilo ff(de los viejos) o lufia

1er problema no se como poner q si aprieto los cursores arriba e izquierda u derecha a la vez me ponga la animacion de arriba y mas de lo mismo con abajo. y a parte q cuando tenga la diagonal pulsada q me avance mas lento por q va mas rapido puesto q esta moviendo los 5 d x y los 5 d y  osea mueve 10 pixel en vez de 5

2º problema no se como crear mas niveles (otros mapeados , combates etc) vi algo en un antiguo tutorial sobre fenix de OSK con un switch y tantos case como mapeados pero no consigo hacer nada asi q si podeis ayudarme os lo agradeceria mucho

PDTA: sorry x las molestias y gracias x la ayuda q espero me deis :)
Title: Re: noob necesito ayuda plz
Post by: DjSonyk on September 27, 2009, 02:41:57 AM
Buenas:

En cuando tu primera pregunta creo que te refieres a pulsar las diagonalesque se vea la animacion del personaje en diagonal,no?
Me imagino que tendras todas las animaciones en las 8 direcciones...Intenta algo asi...

IF ((Key(_UP))&&(Key(_Left)))
   graph=Animaciones diagonal arriba-izquierda;
   x-=5;y-=5;
end
IF ((Key(_UP))&&(Key(_Rigth)))
   graph=Animaciones diagonal arriba-derecha;
   x-=5;y+=5;
end
ect..
En cuando a tu segunda pregunta existe en el Pack 1.7 de Bennu un editor llamado TilesAndMap buenisimo y muy facil,en los que ademas puedes dar efecto de sombras,efectos de luz ,ect y queda muy bien ,y como he dicho facilisimo..
Saludos y Suerte...
Title: Re: noob necesito ayuda plz
Post by: Prg on September 27, 2009, 02:42:03 AM
el punto uno se puede hacer de muchísimas formas diferentes

if (key(_right) and key(_up))
     animacion=a; x+=5; y-=5;

     elseif (key(_right))
     animacion=b; x+=5;

     elseif (key(_up))
     animacion=c; y-=5;
end
o cosas asi, usando el else y elseif :)

lo de los niveles lo puedes hacer de muchas formas distintas, el más cómodo es como lo hace osk:

switch (nivel);
     case 1: //lo que pasa en el nivel uno
            cargaa();
            cargab();
            cargac();
     end
     case 2: //lo que pasa en el nivel dos
            carga1();
            carga0();
            cargac();
     end
end

esto lo pondrias en una funcion o proceso que llamarías cada ves que quieres cargar un nivel y lo pondrias en el begin, fuera de bucles.
es un ejemplo, seguro luego te darán más :) bienvenido al foro :)
edito:
je je
ya se me adelantaron :) je je
Title: Re: noob necesito ayuda plz
Post by: DjSonyk on September 27, 2009, 02:48:57 AM
Por cierto en cuando los combates estilo FF , no es muy complicado.
Deves decidir cuantos enemigos podrian salir previo al combate, y seria crear los precesos de tantos enemigos salieran,les pones una variable por ejemplo "Tiempo de Ataque=100", cuando el proceso enemigo llegara a ese 100 ,podria atacar,lanzar magias,curarse ,ect.
Eso si la variable mejor Local o Privada , y no se te olvide que tiene que estar a 0 de nuevo independientemente de la accion que realizara.

Saludos.
Title: Re: noob necesito ayuda plz
Post by: Drumpi on September 27, 2009, 03:06:35 AM
Abaray, no deberías preocuparte por que avance el personaje más en diagonal o no, los FF no hacen esa diferenciación: si pulsas izquierda se mueve x pixels a la izquierda, independientemente de si se pulsa arriba o no.
De todas formas, si quieres hacer cosas diferentes según la dirección, aqui va un truco:

-Observa el teclado numérico que tienes a la derecha del teclado ¿ves los números?
-Vale, crea una variable y ponla a 5: esta será nuestra posición neutral, sin movimiento. El centro de dicho teclado.
-Comprueba si se pulsa derecha, si se hace, sumale a la variable 1: valdría 6, búscalo en el teclado numérico.
-Comprueba si se pulsa izquierda, si se hace, réstale 1: valdría 4 si no se pulsaba derecha y se movería a la derecha (mira el teclado). Si hubiese estado pulsada derecha, valdría 5 al sumar 1 y restar 1 y no se movería.
-¿Vas pillando por donde voy? Comprueba arriba, si está pulsado, suma 3.
-Comprueba abajo, si está pulsado resta 3.
-Ahora la variable tendrá un valor que indica la dirección de movimiento, y tienes el teclado numérico como referencia. Usa un switch y actúa en consecuencia :)
Title: Re: noob necesito ayuda plz
Post by: abaray on September 27, 2009, 12:35:57 PM
Creo q mas o menos lo he pillao asi q muchas gracias x todo
otra duda existencial en bennu para hacer una animacion de un movimiento hago esto

IF (key(_left))         
         x=x-5;
        if (graph<=10 or graph>=12) graph=10; end;
            flags=1;
         graph=graph+1;

               end
y en div 1 creo recordar q en vez de ese "if (graph...end"  ponia

graph=10 to 12;

hay alguna solucion x el estilo o x lo menos mas abreviada q la mia???
Gracias por toda la ayuda otra vez mas
Title: Re: noob necesito ayuda plz
Post by: Windgate on September 27, 2009, 12:50:32 PM
En DIV quizás hubiese algún FROM graph=1 TO 12; Pero el método que dices es igual de válido.

Para animaciones más complejas, con diferentes "estados" de animación, por ejemplo quieto, andar, salto, patada, agachar, etc. Yo uso una struct donde guardo graph_ini, graph_fin y latencia (Para animar cada N FRAMES).

La estructura anterior conviene usarla con animaciones complejas, 3 estados distintos o más, si te ves en esa situación puedo pasarte animacion.prg, un fichero de código que incluyo siempre en mis juegos para gestionar la animación, lo podrás encontrar en casi todos ellos, Just Fantasy por ejemplo que está en el foro.

Ánimo!
Title: Re: noob necesito ayuda plz
Post by: DjSonyk on September 27, 2009, 01:38:23 PM
Buenas :

Yo coincido con WindGate hacer una Structura,que aparte si por cualquier motivo quisieras cambiar los codigos o aumentar el numeros de graficos para una animacion ,solo tendrias que actualizar la estrucuta y no estar buscando el codigo del proceso y modificar casi todo,si las estructuras no es lo tuyo podrias utilizar tablas que tambien bienen muy bien,puedes usar el indice 0 para que te guarde el numero de graficos que utilizara por ejemplo "Ir hacia la derecha",y al igual que con la estructruras con cambiar las tablas podrias modificar las animaciones,aqui te dejo un ejemplo:
Ani_Personaje[0]=8,100,101,102,103,104,105,106,107; // 7 Es el numero de Graficos digamos para Derecha,los otro numero son el cofigo del grafico en el fichero
Ani_Personaje[1]=6,110,111,112,113,114,115; //Animacion Izquierda si te fijas tiene menos animaciones pero con la siguiente parte ...
If (Ani_Personaje[N].0==Anima);               // Donde N seria la tabla de la direccion en la que mira el personaje
   Anima=1;Graph=Ani_Personaje[Anima];   // y Anima el numero actual de la posicion en la tabla
Else
    ++Anima;Graph=Ani_Personaje[Anima]; 
Con esta sencilla comparacion podrias crear distintas animaciones del personaje,teniendo diferentes animaciones para cada direcion si fuera el caso.
Title: Re: noob necesito ayuda plz
Post by: DjSonyk on September 27, 2009, 01:46:33 PM
Perdon,corrijo una cosilla:

Eso seria con una Structura no con tablas ^^...

Con las tablas seria igual solo que en cada If (Key)) dereiras poner el nombre de la tabla de la direcciòn...
Y solo compensa para animaciones derecha e izquierda y usando el flag para invertir el grafico horizontalmente...
Solucion usa una structura como te recomienda MUY BIEN Wind...

Suerte.
Title: Re: noob necesito ayuda plz
Post by: Windgate on September 27, 2009, 02:23:13 PM
Recomiendo miréis mi animaciones.prg, si la recupero os pego un trozo aquí, es la BOMBAZA
Title: Re: noob necesito ayuda plz
Post by: Drumpi on September 27, 2009, 11:36:50 PM
Lo suyo es que dejeis el bloque de animaciones aparte, fuera de las comprobaciones de teclas. Lo ideal sería tener un vector por cada secuencia de animación, y seleccionar el vector mediante una variable de "estado" que podría ser:
-0: Quieto
-1: Andando
-2: Saltando...

Por cierto, DjSonyk, haz el incremento del gráfico ANTES de comprobar si está fuera de rango, se puede dar el caso de que valga 11 y después del incremento valga 12, que es un valor "no deseado" según tu código.
Title: Re: noob necesito ayuda plz
Post by: Windgate on September 28, 2009, 12:22:07 AM
Eso es, yo para indexar el vector además me saco unas CONST y así es más intuitivo aún.
Title: Re: noob necesito ayuda plz
Post by: DjSonyk on September 28, 2009, 04:19:50 PM
Cierto Drumpi  ^^ ...
Gracias por la correción , mi escusa esque tengo al peque de 2 años por aqui correteando y me distrae mucho y a veces me pierdo,
perdon por si asido la causa de algun error . ^^

Saludos.
Title: Re: noob necesito ayuda plz
Post by: abaray on September 28, 2009, 11:10:46 PM
viendo q sige con vida el post aprovecho pa seguir pidiendo ayuda sobre lo mismo (ya se que parezco un lammer pero os aseguro q lo intento pero no encuentro la forma)

sigo con el problema de las animaciones en las diagonales ya se q me dijisteis algo de hacer unas structuras pero soy tan noob q necesitaria un ejemplo pa ir plagiando un poco y asi terminar aprendiendo.

paso a explicar el problema/s
de momento solo quiero usar 4 animaciones(arriba,abajo,derecha,izquierda)
y quiero q si muevo una diagonal hacia arriba me ponga la animacion "arriba" y si muevo una diagonal de abajo me ponga la animacion "abajo" pero cuando hago eso en vez de ponerme animacion se me queda simplemente un frame pillao y si no me equivoco se debera a algun conflicto q aya x medio.
las 4 direcciones normales van bien (arriba, abajo , derecha e izquierda)
asi q os voy a poner el codigo y si podeis me comentais q esta mal o como solucionarlo.
        if (key(_left)and key (_up)and obs==false)     //diagonal arriba izquierda
x=x-5;y=y-5;
if (graph<=7 or graph>=12) graph=7; end; //animacion de movimiento hacia arriba
graph=graph+1;
end
if (key(_right)and key (_up)and obs==false) //diagonal arriba derecha
x=x+5;y=y-5;
if (graph<=7 or graph>=12) graph=7; end; //animacion de movimiento hacia arriba
graph=graph+1;
end
if (key(_left)and key (_down)and obs==false)   //diagonal izquierda abajo
x=x-5;y=y+5;
if (graph<=1 or graph>=6) graph=1; end; //animacion de movimiento hacia abajo
graph=graph+1;
end
if (key(_right)and key (_down)and obs==false) //diagonal derecha abajo
x=x+5;y=y+5;
if (graph<=1 or graph>=6) graph=1; end; //animacion de movimiento hacia abajo
graph=graph+1;
end

IF (key(_left)and obs==false) //izquierda
x=x-5;
  if (graph<=13 or graph>=18) graph=13; end; //animacion izquierda
flags=1;
graph=graph+1;
END        
IF (key(_right)and obs==false) //derecha
x=x+5;
  if (graph<=13 or graph>=18) graph=13; end; //animacion derecha
flags=0;
graph=graph+1;
END
IF (key(_up)and obs==false) //arriba
y=y-5;
  if (graph<=7 or graph>=12) graph=7; end; //animacion arriba
graph=graph+1;
END        
IF (key(_down)and obs==false) //abajo
y=y+5;
  if (graph<=1 or graph>=6) graph=1; end; //animacion abajo
graph=graph+1;
END      
 
IF (key(_esc))    
exit(0);    
END    
FRAME;    
END    
END    

(obs=obstaculo; una variable para las durezas x lo demas todo legible mas o menos creo yo)
ay ta el toston de codigo ya me direis algo
y ya q tamos como se puede hacer  para q la animacion vaya mas lenta a parte de la version cutre q se me ocurrio a mi de meterle sprites repetidos (1,1,2,2,3,3 ....)y asi hacer q se vea un poco mas lenta x q bajarle los fps no lo veo como una opcion factible y hacer 20 sprites x movimimiento de momento como q no sobretodo x q primero quiero meterme mas bien  con el codigo y los graficos ya los hare bonitos cuando tenga el codigo echo si es q algun dia esto llega a buen puerto.
si quereis el codigo completo de lo q llevo (poco mas de lo q veis)con el fpg y demas avisadme x pribado y os lo paso encantado
PDTA:toda critica constructiva sera bien recibida :)
PDTA2: poor milesima vez gracias de un noob q no lamer aunque lo parezca.
Title: Re: noob necesito ayuda plz
Post by: DCelso on September 28, 2009, 11:47:58 PM
uff, muchos ifs y  muchos ands, imposible controlar todos los casos, debes de separar más los condicionales por conceptos.
Además tal y como lo planteas no es necesario que muevas en diagonal ya que es simplemente hacer dos pasos en un mismo frame (por ejemplo subir e ir a la derecha) así que podrías simplificar a algo como esto

av_x = 5; // para poder luego ajustar  el avance en x de manera más facil
av_y = 5; // para poder luego ajustarlo el avance en y de manera más facil
gfx_max =1;
gfx_min = 6;
if (obs==false)
 if (key(_left)) x-=av_x; gfx_min=13;gfx_max=18; end // NOTA: x-=valor es lo mismo que x=x-valor;
 if (key(_right)) x+=av_x; gfx_min=13;gfx_max=18;end
 if (key(_down)) y+=av_y; gfx_min=1;gfx_max=6;end
 if (key(_up)) y-=av_y; gfx_min=7;gfx_max=12;end
 graph=graph+1;
 if ( graph  <  gfx_min OR graph > gfx_max ) graph=gfx_min; end;
else
//no se lo que haces, no lo pusiste :D.
end
frame;

Con este código si por ejemplo tienes pulsadas las flechas izquierda y arruba: se ejecutará el if del _left y también se ejecutará seguidamente el if del _up, por lo que la animación a ver será la de subir y "x" e "y" habrán disminunido.
Title: Re: noob necesito ayuda plz
Post by: Windgate on September 28, 2009, 11:54:22 PM
Yo lo que veo es que parece que te hayas dejado varios END para los IF, te recomiendo una cosa:

Siempre que habras un IF separa las instrucciones asociadas a la condición con un tabulador, y cuando terminen sitúa el END a la misma altura del IF que lo abre...

En otro caso es imposible mirar tu código ni ayudarte, ya que no sé si es que te has equivocado y te falta algún END o que pretendes hacer algo extraño para animar.

De verdad, sin poner tabuladores en ese código y situar los IF justo encima de los END es ilegible, mira cualquier ejemplo del tutorial y fíjate cómo lo hago.

También se agradece mucho tener los IF, LOOP, END en mayúsculas, las etiquetas que se ven azules en general en el Notepad++

Haz eso y verás como te ayudamos con mucha más facilidad, en cualquier caso deberías saber que el tema de la animación puede llegar a resultar MUY complejo. En ese sentido tengo los temas 22 y 23 casi listos y tratan ambos sobre la animación, tan compleja como la quieras hacer, vendrá con un módulo .prg te ayuda y con ello verás que animar puede suponer un intenso placer para el aparato reproductor humano :o

PD: La solución de DCelso es muy buena, al menos para resolver el tema de animación arriba,abajo,derecha,izquierda.
Title: Re: noob necesito ayuda plz
Post by: abaray on September 29, 2009, 01:39:58 AM
DCelso I LOVE YOU a partir de ahora te llamare "MR.RAR" x q encima de resolverme el problema me lo has pasao de unas 50 lineas a 10.
X cierto lo colgaste y lo edistaste despues o soy yo q corto y pego mal x q tube como 1 hora peleandome con el codigo x q la forma me molo muxisimo hasta q me di x vencido y volvi a mirar el post a ver si respondio alguien mas y me da q ese ultimo if era diferente la primera vez q lo mire.

el codigo lo entiendo bien ecepto x 2 cosas:
1ª he notao un efecto raro y es q la animacion me corre un poco bastante mas lenta (mejor iva muy rapida) y yo x lo menos segun el codigo no veo nada q le diga q corra mas lento x q sera?
2ª no entiendo x q si pulso izquierda y arriba a la vez el programa se decide x la animacion de arriba en vez de la de izquierda es justo lo q queria pero es q no entiendo x q.Si me lo pudierais esplicar me ayudaria a entender un poco mas como piensa la maquina y podria dar pie a q os de un poco menos la lata.

Lo del codigo pa la proxima intentare ponerlo como dices lo q paso es q los if q use pa las animaciones fue un corta pega del tutorial de osk y en vez de poner los end debajo de los if como en el resto en esas lineas lo tenia al final y con la impaciencia de solucionar el problema no me di cuenta de limpiarlo un poco para hacerlo mas legible pa la proxima intentare dejarlo mas lejible sorry .
gracias a todos y hasta la proxima q seguro sera dentro poco

Title: Re: noob necesito ayuda plz
Post by: Drumpi on September 29, 2009, 01:57:03 AM
Sólo le veo explicación a la segunda pregunta (demasiado sueño para la otra).
El que se decida por arriba y abajo tiene que ver por el orden que les ha cado a las sentencias IFs de las teclas: fíjate que en cada IF se le asigna un valor distinto a gfx_min y gfx_max, cuando termine con todas las comprobaciones, estas variables, obviamente, valdrán el último valor asignado, porque se habrá sobreescrito a las anteriores.
Dentro de un proceso, las instrucciones son secuenciales, una detrás de otra, y la última prevalece sobre la anterior siempre.
Si quieres que prevalezcan los lados respecto a las teclas verticales, basta con poner las comprobaciones de _left y _right despues de las de _up y _down.
Title: Re: noob necesito ayuda plz
Post by: DCelso on September 29, 2009, 07:43:28 AM
Jurl entonces yo te llamaré "MR.EXPAND" :D.
Efectivamente cambié el código en ese último if, no porque me hubiera equivocado, que podría ser el caso pero esta vez fué por culpa del foro si pones los "mayoresque", "menoresque" y "OR" sin espacios por delante y por detrás los usa como carácteres especiales y no los representa en pantalla. Me dí cuenta al releer el post una vez enviado, pensé su p..madre si eso no es lo que puse, lo edité y ví el problema así que metí espacios por todos lados en el condicional y cruzé los dedos para que funcionara y funcionó, menos mal sino ni arj idea de como expresarlo.

En cuanto al segundo punto que pones, es exactamente lo que dice DRUMPI, el compilador va leyendo instrucción a instrucción al igual que nosotros leemos el código de arriba a abajo así que si pulsamos arriba e izquierda a la vez primero hace lo que pone el
if (key(_left)) x-=av_x; gfx_min=13;gfx_max=18; end así que decrementa "x" y cambia a los gráficos de ir a la izquierda, después sigue leyendo el código y no se cumplen los otros "if" pero al llegar al if  if (key(_up)) y-=av_y; gfx_min=7;gfx_max=12;end ve que se cumple y también lo ejecuta así que usa los gráficos de este último estado y decrementa "y"
El orden lo hice así a posta porque pusiste que querías que se viera la animación de ir hacia arriba, no fue casualidad eh.

Te respondí al segundo punto antes porque está relaccionado con lo que te pasa en el primero, si ahora entiendes cómo lee el procesador las instrucciones sabrá porqué te va a ti mas rápido en las diagonales asi que no leas esto, en el caso de pulsar arriba e izquierda en tu código el compilador ejecutaba el condicional que pusiste para tu diagonal , decrementando "x" e "y", pero después tambien ejecutaba el condicional para izquerda, decrementando "x" una vez mas, y luego después el condicional para arriba decrementando "y" una vez mas, el efecto es que va el doble de rápido, sino, selecciona estas lineas en blanco para ver qué te pasaba.
Title: Re: noob necesito ayuda plz
Post by: abaray on September 29, 2009, 10:38:50 AM
ya veo q tengo q practicar mi forma de expresarme textualmente no me entendiste el primer punto  lo q pasa es q exactamente solo cambiando mi codigo x el tuyo y añadiendo las variables nada mas:
paso de moverme los 6 frames de la animacion de (por decir numeros)0.5 segundos a 0.7 segundos o x lo menos me da esa impresion y el set_fps sigue igual q con el otro codigo a q se puede deber eso o son imaginaciones mias.
lo del movimiento extra en las diagonales ya me di cuenta al meter y releer tu codigo para pillar como funciona.

PDTA:gracias del pesao de turno.

Title: Re: noob necesito ayuda plz
Post by: DCelso on September 29, 2009, 10:57:05 AM
juas, ok, pues si lo dices por rendimiento, npi, yo se que los condicionales son lentos pero vamos para que se aprecie de tener 12 condicionales a 6 no creo.
Title: Re: noob necesito ayuda plz
Post by: Windgate on September 29, 2009, 03:19:27 PM
Aquí tienes el primero de los 2 temas dedicados a la animación compleja:

http://trinit.es/tutoriales/ (http://trinit.es/tutoriales/)

El PDF es el último de todos, el tema 22, te recomiendo echarle un vistazo, es muy cortito.

Luego con el segundo tema (Que es el "obeso") lo tendrás todo en un fichero .prg separado, jamás deberás preocupar de los números de gráfico y te serviría para gestionar cualquier cambio de animación, por complicada sea, gracias a esa parte animé TODAS las animaciones de Ryu de Street Fighter (Andar, quieto, andar de espaldas, salto, 3 tipos de patada, 3 tipos de puñetazo y agacharse) e iba como la seda.
Title: Re: noob necesito ayuda plz
Post by: abaray on October 01, 2009, 01:14:45 AM
Bueno seguimos con los problemas lo q pasa es q soy un inutil y no soy capaz de hacer q me cambie de nivel x asi decirlo
(en este caso es un juego de rol asi q en vez de cambiar de nivel seria de mapa)
Aqui os pongo el codigo q tengo de momento y despues os esplico q e intentado
PROGRAM videojuego;
INCLUDE "DLL\import.prg";           
GLOBAL
INT ID_protagonista;
INT file1;

BEGIN
set_mode(800,600,32,MODE_WINDOW);    
file1=load_fpg("images/rpg.fpg");
set_fps(15,0);
ID_protagonista = protagonista ( );            
start_scroll ( 0 , 0 , 21 , 0 , 0 , 12 );
scroll[0].camera = ID_protagonista;

END                    

PROCESS protagonista()
private
INT despega_x;                //variable del valor de la cordenada X para despegar de una dureza contra la q aya sacado
INT despega_y; //variable del valor de la cordenada Y para despegar de una dureza contra la q aya sacado
INT obs; //variable q nos avisara de cuando esta chocando con la dureza
INT av_x; //variable para ajustar el movimiento en pixeles de la cordenada X
INT av_y; //variable para ajustar el movimiento en pixeles de la cordenada Y
INT gfx_max ; //variable q indica el grafico max de la animacion de movimiento
INT gfx_min; //variable q indica el grafico minimo de la animacion de movimiento
INT cnt; //variable de Color No Transitable (dureza)

BEGIN
ctype = C_SCROLL;    
x = 1550; //cordenada X con la q empieza el primer mapa
y = 2980; //cordenada Y con la q empieza el primer mapa
size=180;
CNT=map_get_pixel(file1,22,100,100); //le indico el archivo y zona del color no transitable (dureza)     
LOOP
despega_Y=0;
despega_x=0;
IF (key(_right)) despega_x=5;
END
IF (key(_left)) despega_x=-5;
END
IF (key(_up)) despega_y=-5;
END
IF (key(_down)) despega_y=5;
END
IF (map_get_pixel(file1,22,x+despega_x,y+despega_y)==cnt) //condicional q nos indica si hay obstaculos
obs=true;
ELSE
obs=false;
END
av_x = 5;
av_y = 5;
gfx_min =23;
gfx_max =23;
IF (obs==false)

IF (key(_left)) x-=av_x; gfx_min=13;gfx_max=18;flags=1; //condicionales con los cuales movemos y animamos el personaje
END
IF (key(_right)) x+=av_x; gfx_min=13;gfx_max=18;flags=0;
END
IF (key(_down)) y+=av_y; gfx_min=1;gfx_max=6;
END
IF (key(_up)) y-=av_y; gfx_min=7;gfx_max=12;
END
graph+=1;
IF ( graph  <  gfx_min OR graph > gfx_max ) graph=gfx_min;
END

END
IF (key(_esc))     // condicional que al pulsar escape nos cierra el juego
exit(0);    
END    
FRAME;    
END    
END    

//Notas
//Casa 1 IF (map_get_pixel(file1,22,1570,1740))
// MAPA2
//Graficos Abajo: 1 a 6 ;Arriba: 7 a 12; Derecha: 13 a 18; Quieto: 23; Mapa1: 21;Dureza1: 22


Como puedes ver windgate esta vez ta un poco mejor colocado el codigo tal como me recomendaste ;D

Consegi hacerlo haciendo un proceso nuevo para el 2º mapa pero puesto q tengo intencion de hacerlo x lo menos con unos 100 mapas o mas no creo q sea buena solucion tb intente hacerlo con switch (level) como esplica el tutorial sobre FENIX de Osk pero no se si son incompativilidades con bennu o yo q me lio pero no soy capaz asi q si  me podeis orientar un poco sobre como hacerlo os lo agradeceria no os pido q me hagais el codigo x q si no no tendria gracia hacer el juego para eso usaria el rpgmaker o similares os agradecere toda ayuda

El codigo q os e puesto esta totalmente funcional aunq no es mas q un keko moviendose x un mapa inmenso con scroll y chocando con las cosas.

PDTA: otra vez gracias del pesado de turno ;D

Title: Re: noob necesito ayuda plz
Post by: DCelso on October 01, 2009, 08:00:26 AM
Pues no veo ningún control de cambio de fase, así que será dificil de ayudarte.
Si lo que quieres es que lo implementemos en el código que dejaste, el resultado podría ser algo como esto

PROGRAM videojuego;
INCLUDE "DLL\import.prg";           
GLOBAL
INT ID_protagonista;
INT file1;
int gfx_nivel;

BEGIN
    gfx_nivel = 21;
set_mode(800,600,32,MODE_WINDOW);    
file1=load_fpg("images/rpg.fpg");
set_fps(15,0);
ID_protagonista = protagonista ( );            
start_scroll ( 0 , file1 , gfx_nivel , 0 , 0 , 12 );
scroll[0].camera = ID_protagonista;
LOOP
    IF (key(_f))     // intercambiamos a pantalla completa o no
            while (key(_f)) frame; end      // hacemos bucle no bloqueante hasta que soltemos la F.        
        full_screen = !full_screen;
        set_mode(800,600,32);
END    
    IF (key(_1))     // intercambiamos a pantalla completa o no
            while (key(_1)) frame; end      // hacemos bucle no bloqueante hasta que soltemos la F.        
        if (gfx_nivel <> 21)
                gfx_nivel = 21;
                start_scroll ( 0 , file1 , gfx_nivel , 0 , 0 , 12 );
            end            
END    
    IF (key(_2))     // intercambiamos a pantalla completa o no
            while (key(_2)) frame; end      // hacemos bucle no bloqueante hasta que soltemos la F.        
        if (gfx_nivel <> 24)
                gfx_nivel = 24;
                start_scroll ( 0 , file1 , gfx_nivel , 0 , 0 , 12 );
            end            
END    
    IF (key(_esc))     // condicional que al pulsar escape nos cierra el juego
exit(0);    
END    
FRAME;    
END
END                    

PROCESS protagonista()
private
INT despega_x;                //variable del valor de la cordenada X para despegar de una dureza contra la q aya sacado
INT despega_y; //variable del valor de la cordenada Y para despegar de una dureza contra la q aya sacado
INT obs; //variable q nos avisara de cuando esta chocando con la dureza
INT av_x; //variable para ajustar el movimiento en pixeles de la cordenada X
INT av_y; //variable para ajustar el movimiento en pixeles de la cordenada Y
INT gfx_max ; //variable q indica el grafico max de la animacion de movimiento
INT gfx_min; //variable q indica el grafico minimo de la animacion de movimiento
INT cnt; //variable de Color No Transitable (dureza)

BEGIN
ctype = C_SCROLL;    
x = 1550; //cordenada X con la q empieza el primer mapa
y = 2980; //cordenada Y con la q empieza el primer mapa
size=180;
CNT=map_get_pixel(file1,gfx_nivel+1,100,100); //le indico el archivo y zona del color no transitable (dureza)
    //, el gráfico del mapa de durezas siempre será un número mayor al gráfico del mapa y el color del pixel 100,100 siempre será el no transitable en todos los mapas       
LOOP
despega_Y=0;
despega_x=0;
IF (key(_right)) despega_x=5;
END
IF (key(_left)) despega_x=-5;
END
IF (key(_up)) despega_y=-5;
END
IF (key(_down)) despega_y=5;
END
IF (map_get_pixel(file1,22,x+despega_x,y+despega_y)==cnt) //condicional q nos indica si hay obstaculos
obs=true;
ELSE
obs=false;
END
av_x = 5;
av_y = 5;
gfx_min =23;
gfx_max =23;
IF (obs==false)

IF (key(_left)) x-=av_x; gfx_min=13;gfx_max=18;flags=1; //condicionales con los cuales movemos y animamos el personaje
END
IF (key(_right)) x+=av_x; gfx_min=13;gfx_max=18;flags=0;
END
IF (key(_down)) y+=av_y; gfx_min=1;gfx_max=6;
END
IF (key(_up)) y-=av_y; gfx_min=7;gfx_max=12;
END
graph+=1;
IF ( graph  <  gfx_min OR graph > gfx_max ) graph=gfx_min;
END

END
IF (key(_esc))     // condicional que al pulsar escape nos cierra el juego
exit(0);    
END    
FRAME;    
END    
END    

//Notas
//Casa 1 IF (map_get_pixel(file1,22,1570,1740))
// MAPA2
//Graficos Abajo: 1 a 6 ;Arriba: 7 a 12; Derecha: 13 a 18; Quieto: 23; Mapa1: 21;Dureza1: 22;Mapa2: 24;Dureza2: 25
Title: Re: noob necesito ayuda plz
Post by: Windgate on October 01, 2009, 04:07:45 PM
Controlar el cambio de fase es complejo, yo suelo poner un proceso crear_escenario()

Se encarga de destruir todo bicho viviente y posteriormente generarlo. Hace uso de stop_scroll, delete_text y signal... Quizás cosas demasiado avanzadas si estás empezando...
Title: Re: noob necesito ayuda plz
Post by: DjSonyk on October 03, 2009, 11:11:17 PM
Hola Abaray, si realmente eres muy nuevo te aconsejaria que practicaras con un arbol como te pongo en el ejemplo,solo es un ejemplo no muy elavorado pero que te puede servir de referencia,con unas horas que practiques seguro que te queda claro que deves comprobar y cuando y todas las cosas ya sea restar energia,cambio de nivel,pasar a una fase bonus...ect...
Por cierto no se como se ponen imagenes xD sin tener que poner a descargar :P.
(http://forum.bennugd.org/index.php?action=dlattach;topic=792.0;attach=533)
Title: Re: noob necesito ayuda plz
Post by: DCelso on October 04, 2009, 05:57:25 AM
¿Arbol? Si tiene como ramas encadenadas, yo llamaría grafo a eso. ;D
Title: Re: noob necesito ayuda plz
Post by: Windgate on October 04, 2009, 10:08:51 AM
Para poner imágenes aquí las tienes que subir a un hosting o enlazarlas desde donde estén alojadas... Que yo sepa.

Para el cambio de fase si hago algún ejemplo mega-sencillo lo cuelgo...
Title: Re: noob necesito ayuda plz
Post by: DCelso on October 04, 2009, 10:20:32 AM
E insertas la url de la imagen entre [ img ] y [ /img ] sin espacios.
Title: Re: noob necesito ayuda plz
Post by: Windgate on October 04, 2009, 10:29:20 AM
Ciertamente, yo uso el botoncito del editor de mensajes que lo pone sólo, es que soy muy perezoso xD
Title: Re: noob necesito ayuda plz
Post by: DjSonyk on October 04, 2009, 04:02:42 PM
JE JE ,si me sale lo de (//),pero no se como se tenia que hacer ^^,acostumbrado a que te abra una ventanica y eso...
Bueno lo llame arbol,porque no me salia la palabra en ese mismo momento,y que sigo sin recordad como se dice xD...