he decidido reformar el juego de los caracoles, pero mientras me dedico a ello salen dudas que no me resuelve el manual de osk...
por ejemplo, como hago para que se vea el cursor o flechita o lo que le quiera poner al raton para verlo en pantalla...
misteriosamente lo he hecho funcionar y me acepta bien las colisiones con objetos pero mientras no vea el cursor probandolo en el pc, me sigue descontrolando...
hablais de eso en algun hilo?¿??, estoy buscandolo y nasty...
sigo buscando
Hay 2 opciones.
1- Usar mouse.graph=... para indicar el grafico del cursor (mouse.file=... )
2- Usar un proceso que siga al mouse (dentro del bucle x=mouse.x; y=mouse.y) y le das el graph que quieras al proceso.
Mirate en el wiki todo lo relacionado con mouse.
Saludos
buena idea, con eso tengo bastante por ahora...
aunque el tema del mode_2xscale no me muestra nada en la pantalla, igual me falta alguna libreria o algo
gracias
Con la mod_video y la libvideo debería funcionar sin problemas.
El Echo lo trae al principio del proceso MAIN, en el único prg que hay.
Con eso y lo que te paso a continuación tienes para entretenerte un rato (usa la función de buscar del notepad).
bueno y lo de MAIN que es exactamente, que me rayo mas que una temblaera...
¿el nombre del programa? creo que es como poner program videojuego ¿no?
vale, otra:
estoy poniendo un selector giratorio (un grafico de la señal de tafico) para seleccionar el menú y quiero (mientra estoy probando mas alternativas...) que cuando esté girando me anule el boton de izda o dcha, en este caso vendria bien una funcion, como la declaro como un proceso cualquiera o poniendole delante 'funtion tal();' con punto y coma, parentesis....
miraré en el wiki en de mientras...
Quote from: Futublog on March 15, 2010, 07:03:32 PM
bueno y lo de MAIN que es exactamente, que me rayo mas que una temblaera...
¿el nombre del programa? creo que es como poner program videojuego ¿no?
vale, otra:
estoy poniendo un selector giratorio (un grafico de la señal de tafico) para seleccionar el menú y quiero (mientra estoy probando mas alternativas...) que cuando esté girando me anule el boton de izda o dcha, en este caso vendria bien una funcion, como la declaro como un proceso cualquiera o poniendole delante 'funtion tal();' con punto y coma, parentesis....
miraré en el wiki en de mientras...
Ya has ripeado el Magnet Man ? ;D ;D
El main es el programa principal, el primer BEGIN-END que se encarga de invocar al resto de procesos. En C se llama main esa parte del programa.
Quote from: FreeYourMind on March 15, 2010, 08:15:52 PM
Quote from: Futublog on March 15, 2010, 07:03:32 PM
bueno y lo de MAIN que es exactamente, que me rayo mas que una temblaera...
¿el nombre del programa? creo que es como poner program videojuego ¿no?
vale, otra:
estoy poniendo un selector giratorio (un grafico de la señal de tafico) para seleccionar el menú y quiero (mientra estoy probando mas alternativas...) que cuando esté girando me anule el boton de izda o dcha, en este caso vendria bien una funcion, como la declaro como un proceso cualquiera o poniendole delante 'funtion tal();' con punto y coma, parentesis....
miraré en el wiki en de mientras...
Ya has ripeado el Magnet Man ? ;D ;D
¬¬!
¡HASTA LOS COJONES! del mode_2xscale...
no se que haceis o que libreria me falta que no me vá en lo que hago, y sin embargo en otros juegos va que no veas...
lo siento por el lenguaje, pero es que estoy harto...
(si, ya he mirado en el manual de osk)
Siempre puedes desahogarte y relajarte dedicandole algun tiempo de relax haciendo otras cosas, como por ejemplo ripeando el Magnet Man ;D
en fin, me resignaré el riped magnet ese como se llame... T_T
si usas scale_resolution no va...
lo seteas antes del set_mode?
eso tiene que ser que tengo una libreria antigua o me falta alguna otra cosa, yo creo que lo que tengo es lo correcto, aunque me dá a mí que falta tamien un mode_window o algo asi...
[code language="bennu"]PROGRAM videojuego;
INCLUDE "DLL/import.prg"; //Incluye las DLL necesarias para que todo funcione
BEGIN
set_mode(190,102,16,MODE_2xscale);
load_fpg("carpett/graficc.fpg");
proceso1();
END
[/code]
proba poner antes del set_mode
scale_mode=MODE_2XSCALE;
pues no vá...
y eso que el juego es así de simple solo con un proceso que en el loop pone x++;
no sé por que no me vá
:'( :'( :'( :'( :'( :'(
pone el codigo completo a ver que pasa...
[code language="bennu"]PROGRAM videojuego;
INCLUDE "DLL/import.prg"; //Incluye las DLL necesarias para que todo funcione
BEGIN
set_mode(190,102,16,MODE_2xscale);
load_fpg("carpett/graficc.fpg");
proceso1();
END
process proceso1()
begin
x= 10;
y= 10;
graph 1;
loop
x++;
frame;
end
end
[/code]
No tiene mas misterio, algo hay que me falla tanto en .bat como dandole a F6
jua!
man, no es problema del MODE_2xscale... es problema de que tu codigo no esta compilando...
"graph 1;" no existe... deberias poner "graph=1;"
hay que mirar la salida de compilacion...
no, lo de graph 1; no es, despues de corregirlo sigue dando el mismo problema. Sin embargo cojo el apocalypto y le copio el mode2xscale y funciona perfectamente...
creo que lo que me falta es el main...
no se
Prueba esto
PROGRAM videojuego;
INCLUDE "DLL/import.prg"; //Incluye las DLL necesarias para que todo funcione
GLOBAL
mi_fpg;
END
BEGIN
set_mode(190,102,16,MODE_2xscale);
mi_fpg=load_fpg("carpett/graficc.fpg");
proceso1();
END
process proceso1()
begin
x= 10;
y= 10;
file = mi_fpg;
graph=1;
loop
x++;
frame;
end
end
a mi me funciona perfectamente poniendo graph = 1 o quitando esa linea...
prueba poniendo y quitando el mode_2xscale, vas a ver que cambia y si funciona.
pero splinterGU ¿como te va si el graph 1 no está en el file 0? O te refieres a que te compila nada más.
Yo supuse que le faltaba asignar a file el valor devuelto por fpg_load.
compila y ejecuta, no importa que no este el grafico... eso no impide que no se ejecute el proceso y setee el modo de video escalado...
PROGRAM videojuego;
import "mod_video";
import "mod_screen";
import "mod_map";
BEGIN
set_mode(190,102,16,MODE_2xscale);
//load_fpg("carpett/graficc.fpg");
proceso1();
END
process proceso1()
begin
x= 10;
y= 10;
graph=1;
loop
x++;
frame;
end
end
funciona perfectamente...
PROGRAM videojuego;
import "mod_video";
import "mod_screen";
import "mod_map";
BEGIN
set_mode(190,102,16/*,MODE_2xscale*/);
//load_fpg("carpett/graficc.fpg");
proceso1();
END
process proceso1()
begin
x= 10;
y= 10;
graph=1;
loop
x++;
frame;
end
end
esta tambien funciona perfectamente
con esto quiero decir que el mode_2xscale si funciona... no entiendo como no le puede funcionar... por otro lado, lo que decis el fpg es correcto, tiene que setear file con el identificador del fpg cargado... pero eso no tiene nada que ver con el modo_2xscale... el mode_2xscale funciona...
pruebo los codigos que has puesto y te comento, pero antes te digo que en windows xp de un ultraportatil que me acabo de comprar, no rula el bennu, no se si me falta algo pero no me vá en el notepad++
puede que sea por el xp home edition, puede que sea porque me faltase un diretx o algo asi...
no creo... podrias ser mas explicito cuando decis "no rula"? podrias poner una captura? gracias
en cualquier videjuego (mode_window por supuesto...) a la hora de cargar el juego no pasa de la pantalla negra del comienzo, osea que no carga ni el graph...
¿tiene quer ver algo que es un xp home edition???
Ah, eso es otra cosa... "no rula" es decir "no arranca, no hace nada"... poner la pantalla en negro es hacer algo, esta seteando el modo de video al menos...
no, claro que no tiene que ver con xp...
seguro tiene que ver con lo que puso DCelso arriba... o que no tengas el archivo o que tengas un error en el nombre de lo que intentas cargar...
quietorl, al bajarme el videojuego del tema no5, furula a la perfecion (funciona todo correcto ^^U)
eso debe ser de algunos archivos corruptos o algo de eso...
te voy a ajogar de karma por la ayuda desinteresada, splinter
por otro lado, y aunque parezca absurdo, al crear un fpg nuevo y ponerlo en el .prg ya no funciona...
es gracioso
Hombre no estarás creando fpg's de 32 bits ? Tienes que poner el modo 32 sino te vas a quedar a oscuras tal como relatas ;D
jeje, claro que es gracioso... pon un codigo de ejemplo...
vamos a ver, segun mas pruebas si creo un fpg con tres graficos na mas no me lo coje, guardo el sonic.fpg con otro nombre tampoco me lo coge, sin embargo si lo guardo con el otro nombre con el .fpg si me lo coge, pero si guardo el primer fpg con el .fpg no me cuadra de nuevo... esto es desesperante y,o paradogico, je je je
voy a probar quitando todos los graficos al sonic.fpg y dejandole tres solo como el primero...
de todas formas usaré el archivo de sonic.fpg con todas sus imagenes
por favor, pone un ejemplo completo, codigo + graficos...
no hace falta ya, usaré un fpg existente y a correr...
cambiando de tema, me interesa crear un proceso a traves de un for pero me deja inmovil el otro processo
exactamente donde vá el for, dentro del loop fuera??
ejemplillo:
[code language="bennu"]
//EJEMPLO 1 ¿correcto?
process prota()
begin
x=100;
y=100;
graph=1;
loop
if(x>=320) x++; end
if(x<=1) x--; end
for (tal=1;tal=5;tal++)
enemigo();
frame(100);
end
frame;
end
end
//EJEMPLO 2 ¿o este es el correcto?
process prota()
begin
x=100;
y=100;
graph=1;
loop
if(x>=320) x++; end
if(x<=1) x--; end
frame;
end
for (tal=1;tal=5;tal++)
enemigo();
frame(100);
end
end
[/code]
Hasta un caracol te va ultrapasar ese for ;D
Cambialos por este:
for (tal=1; tal<=5; tal++)
"tal=5" no es una comparacion, es una asignacion...
"tal==5" es la comparacion
Joño que fallo mas tonto, por eso se pillaba...
je jej e actualizo y cuento
vá como la seda, aunque eso no es lo que quiero ;D ;D ;D
me interesa mas que en un movimiento de un proceso cree otro en la misma posicion (por lo menos x)
del primer proceso creo que es algo de signal ¿no?
gracias coleguis
si un proceso crea a otro, en el segundo creado podes usar father.x para que "imite" al proceso que lo creo.
Es mas simple que signals... ademas creo que las signasl para pasar datos no sirven..
seguiré intentando, pero lo que pasa que al ser otro proceso en un import a parte igual no sirve, por lo menos a mí no me sirve, provaré en el mismo .prg
acias
edito: lo de pather.x funciona a la perfescion, creia que habia que solicitar un indicador de posicion...
yo lo que quiero ahora es que cualquier grafico apunte a cualquier punto, como por ejemplo al cursor del raton, como en el juego de la lata de sardinas que pedia en el otro hilo (http://"http://forum.bennugd.org/index.php?topic=681.0"), que no sé donde está la clave...
¿hay una forma de simplificar esto con un switch o algo de eso?
[code language="bennu"]
if(tal == 1 and cual==1) pasa algo; end
if(tal == 1 and cual==2) pasa algo; end
if(tal == 2 and cual==1) pasa algo; end
...
[/code]
Quote from: Futublog on April 16, 2010, 08:36:35 PM
yo lo que quiero ahora es que cualquier grafico apunte a cualquier punto, como por ejemplo al cursor del raton, como en el juego de la lata de sardinas que pedia en el otro hilo (http://"http://forum.bennugd.org/index.php?topic=681.0"), que no sé donde está la clave...
Mira a ver si te sirve GET_ANGLE o FGET_ANGLE, sólo debes obtener las coordenadas del (proceso) destino (variables locales predefinidas powa) y en el segundo caso, las del (proceso) origen.
Quote from: Futublog on April 18, 2010, 09:33:43 AM
¿hay una forma de simplificar esto con un switch o algo de eso?
[code language="bennu"]
if(tal == 1 and cual==1) pasa algo; end
if(tal == 1 and cual==2) pasa algo; end
if(tal == 2 and cual==1) pasa algo; end
...
[/code]
Tal cual lo has puesto, no, no hay ninguna si los "pasa algo" son todos distintos. Si son iguales bastaría con:
if ( (tal==1 or tal==2) and (cual==1 or cual==2) ) pasa algo; end
vale, es un trabajo duro, ya que es para una cuadricula y asignarle cada uno un valor; de toas formas tengo que usar un array o vector para que cada cuadrito signifique algo...
ya lo vereis
otra forma es asignarle a cada cuadrito un numero, siempre que cada cuadrito sea independiente...
a ver si me comprendes
otra cosa:
cuando hago un rand para situar en una casilla un proceso y siempre me aparece en el mismo sitio, el rand es [code language="bennu"]if (key(_space)) horizontal = rand(1,8); vertical = rand(1,5); end[/code]
y los numeros que me aparece siempre es horizontal 2 y vertical 3...
que curioso...
Cuando eso me pasaba a mi se debía a:
-Había puesto unos valores fijos para debug y después no los quité.
-No entraba nunca en el if porque no se cumplía la condición (aquí los SAY son de mucha ayuda).
-Tenía esa mala suerte (muy raro) (aqui puedes cambiar la semilla y arreglarlo).
1.- ¿como se cambia la semilla?
2.- ¿como hago que un pequeño grafico aparezca en una parte de la pantalla? iran apareciendo mas como el en determinadas partes, pero que careceran de valor, osea que solo representan una casilla ocupada.
la verdad que no lo he intentado con put_screen porque creo que es para la pantalla de fondo ¿no?
1.- Mira la función RAND_SEED.
2.- Puedes usar un proceso congelado, o consultar las funciones PUT, MAP_PUT, MAP_XPUT, MAP_XPUTNP, etc, hay una completa familia para eso.
yo usaría procesos, aunque el map sea de un solo pixel, ya se habló de que muchos procesos no bajan el rendimiento final, además dá la posibilidad de que en un futuro puedas usar otra cosa que no sea um pixel e incluso usar colisiones :D.
el problema de usar procesos es que la rejilla que uso es de 8 x 5, cuarenta procesos + los del juego, unos diez o doce, igual sobrecarga el problema...
a menos que use el mismo proceso repetido 40 veces pero que solo muestre un graph distinto, solamente, igual no consume tanto ¿no?
bueno de todas formas voy a cambiar la rejilla a una mas pequeña + ''arrayzar'' la rejilla...
pues si, lo del proceso con distingos grapfs pinta bien pero si es un pixel de un color pues pásale como parámetro el color al proceso y luego creas un map de 1x1 y le haces un clear_map con ese color y ya tienes tu proceso de un color personalizado, por ejemplo.
ahora necesito lo que yo quiero lamarle ''motor de despazamiento'' si lo puedo llamar así...
voy a mover a un personaje en la rejilla, y me hace falta un detector de colisiones con los cuadros ocupados...
para ello podria usar una funcion para aprender a usarlas, algo que me devuelva un valor si el siguiente cuadro está ocupado o nó independientemente de la direccion que lleve
parece un poco lioso e igual no hace falta una fucion, o sí... a investigar!!!
¿40 procesos te parecen muchos? Haz números: 320x240, usando tiles de 16x16 ¿cuantos procesos salen? Eso la GP2X más o menos va, pero en la WIZ sobra ;)
Emmm.. Y en la GP32 va también. No recuerdo fps, pero eran bien altos! :D
ok, aunque seguro que reduciré el numero de cuadriculas, limitaré mi juego a cuarente procesos que pa la wiz no consumen ná de ná...
el tema de los arrays, para darle 0 en todos sus valores, ¿se declara? o ya bennu lo hace por defecto... ?_?
Los arrays normales sí los pone a cero, pero yo no me acostumbraría a ello, que luego vienen los "errores inexplicables".
Pixel: ¿hay bennu para GP32? XD
Quote from: Drumpi on April 25, 2010, 11:49:07 AM
Pixel: ¿hay bennu para GP32? XD
Bué, hay algo parecido... xD
Si ese "algo parecido" es lo que pienso, olvídalo, ya la GP2X no puede con FL, y ese tiene 240 procesos tiles por ahi si usaba el motor 2 de tiles (menos de la mitad con el tercero, pero no iba) ;D
pues otra cosa que me pasa es que al ponerle en un proceso un if, me comprueba todas las casillas de una vez, ahí es donde creo que deberia poner una funcion, pero no sé ni declararla ni comprobarla ni nada, asi que por ''sublenguaje'' pondré mi proposito:
[code language="bennu"]
process tal y tal...
...
...
if (click de raton en tal posicion)
pregunta a la funcion el numero designado a la casilla correspondiente
devuelve 0 = vacia, 1 = objetivo, 2 = casilla usada;
end
...
...
[/code]
¿se puede hacer una cosa de estas?
pd: en el manual de osk no encuentro ná de ná
con mouse.x ,mouse.y y mouse.left puedes conseguir eso, si necesitas saber en qué regilla has hecho click, solo tienes que dividir mouse.x por el ancho de la regilla y mouse.y por el alto de la regilla.
http://wiki.bennugd.org/index.php?title=Mouse
no, no te rayes que pa eso estoy yo; segun la posicion del cursor del raton me dá en una variable horizontal y otra vertical, un par de numeros; sería como en los barquitos de undir la flota...
que a su vez asigna un valor determinado de un array (¿demasiado complicado?)
al clickar sobre los valores correspondientes he de comprobar solamente el dato del array para mostrar un graph u otro...
si lo hago con if(lo que sea) me comprueba uno por uno toooooodos los cuadros, yo quiero saber si de alguna manera puedo usar una funcion...
necesito una lista de instrucciones que se ejecute mas lento que los taitantos frames por segundo que hace el programa
mexplico:
quiero que al activar algo (cualquier variable a true) pase:
hacer 1 cosa;
hacer otra;
contador a cero;
variable tal a tanto;
etc;
pero entre una cosa y otra tarde un tiempo, no me lo haga en el acto, como me lo hace...
¿hay que poner frame(); detras de cada cosa para que actue de relantizador?
Hombre, para hacer pausas tienes la instrucción frame, al que le puedes añadir un porcentaje de "frames" que quiere que se ejecute (con 50 seguirá hasta sumar un 100%, con 200% se ejecutará cada dos frames, etc).
Pero mientras el proceso no hará nada.
Actuaría como lo haría "delay" en C, pero el tiempo depende del número de frames que quiere que ejecute y de los fps.
si, vale, he estado probando y ''va benne'' es justo lo que queria porque lo de fps no lo utilizo; todavia ni sé para que es, será para juegos grandes y eso...
No, fps significa "frames por segundo" e indica cuantas imágenes se ven por cada segundo. En términos de programación indica cuantas veces van a llegar los procesos y las funciones a la instrucción frame y mostrar todo lo que han hecho en un segundo. La velocidad, dicho a groso modo.
Y se usa una función tan simple como set_fps.
Y esto es de programación básica. En serio, futublog, esto está en los primeros manuales de bennu, deberías leértelos si no lo has hecho.
Dicho de paso, Bennu por defecto creo que arranca a 24fps y el estandar en la industria son (o eran) 60 fps.
Es curioso que se vieran más juegos a 60fps en las 8bits que en las consolas modernas ;D
Curioso no, normal: ten en cuenta que el estandar de la TV es de 50Hz en territorios PAL y 60Hz en SECAM y NTSC. A eso súmale que los programadores tenían pocos recursos que controlar y podían exprimirlos, y que la programación 2D no es muy compleja (además, lei que por ejemplo la NES tiene un HW para realizar scrolls, por eso se ven tan suaves).
Hoy día, tienen que sacar juegos en complejas 3D en 1/3 de tiempo que antes, programando sobre una capa sobre una capa sobre otra capa y otra capa más de soft (librerías propias sobre lenguaje Nintendo/Sony/microsoft, sobre estandar de normalización para gráficos, sobre librerías gráficas, sobre C, sobre SO, sobre asm...), con 3 CPUs, 5 GPUs, controladoras varias...
Bueno, vale: los programadores de hoy día son unos chapuzas comparados con los de antaño ;D
Solo estaba ironizando :D, esta claro que hoy en dia es mucho más barato no optimizar y tirar de 30 fps, o conseguir resultados graficos más potentes a esa velocidad.
Afortunadamente los 50hz ya son cosa del pasado, excepto en la Wii, no entiendo muy bien porque lo mencionas, solo a partir de Dreamcast se puso la selección de 50hz/60hz, en los 16bits aumentaban la dificultad del juego en la conversión PAL para suplir el descenso de frames (menos vidas), en los 32bits mantenian la velocidad a costa de perdida de fluidez pero siempre hubo adaptación a 50hz.
Estoy contigo en que el proceso actual parece mucho menos optimo y más laborioso, pero que yo sepa las consolas no han dificultado la programación sino todo lo contrario, con lenguajes estandar, motores graficos / fisicos listos para funcionar, hardware existente de pc..
drumpi, si me he leido los tutos, pero no le veo utilidad actualmente, quizas para un tiempo de respuesta a la hora de pulsar un boton o cliclar en alguna parte de la pantalla...
SI, Bomber, tienes razón, ha sido una ida de olla.
Es que me estoy estresando mucho últimamente con la placa y ya no se lo que digo. Supongo que me vino a la cabeza cierto libro que tengo sobre la mesa sobre cómo compilar codecs para el DSP que decía cosas como: coge el fuente, comprueba que sigue el estandar del codec, luego lo pasas con el programa para que lo valide, luego lo vuelves a compilar con tal programa para estandarizarlo, luego lo testeas con tal otro para comprobar que tiene las funciones de llamadas correctas, y después le pasas otro compilador para empaquetarlo... Juer, con veinte capas por debajo no me extraña que fallen los programas, que se pierda rendimiento y que no se aproveche el HW.
Es que veo cómo sufre la N64 para mover PD, los magníficos juegos de luces del DK64 salidos de la nada, los enormes mundos del Zelda OoT/MM, y luego aprovechan los mandos de wii para... manejar miis -.-U
O peor aun: cuando vi el Uncharted y la gente flipaba con los gráficos... Creo haber visto juegos de Wii, y puede que de GC, con la misma carga poligonal usando 1/3 o 1/6 de la capacidad de proceso de ¿era 360 o PS3?
O incluso mucho peor aun: los enormes mapeados de juegos como Terranigma, Secret of Evermore o Chrono Trigger en tan solo 4MB y con 600MB no llegan ni a la décima parte, o con 4GB por mucho 3D que usen.
Necesito salir urgentemente ^^U
bueno chavales, quiero hacer un protector de pantalla, quiero reducir el fade a (33,33,33,vel.) cuando pase un minuto (por ejemplo, sino un contador ¬¬) sin tocar una tecla o mover el raton (mejor al hacer click, ¿no?) y que se recupere al hacer click...
mientras escribo me viene a la cabeza lo de
!key(_cualsea)
Pero que vicio con los fps... Si el ojo humano sólo puede ver 25 ;D
Futublog: pues bien fácil es, puedes usar un contador, puedes usar un timer... pero para lo de detectar la pulsación quizás te convenga más scan_code y mouse.left/right/middle...
Free: el ojo detecta movimiento con 25, creo que era así. Pero puedo decir que al menos yo puedo distinguir si un monitor muestra 35 o 45 imágenes (¿tendrá algo que ver con trabajar con corrientes eléctricas a 50Hz? ;D). Entre 50 y 60 sí que sería hilar fino, ni te cuento con los 600Hz de las nuevas teles 3D :D :D :D
las nuevas teles 3d son una mierda...
end of offtopic
je je
jorobi, tengo ahora un polema con font editor, a la hora de ejecutar el juego con la fuente en cuestion no me reconoce los numeros negativos, osea que no me pone el signo menos...
sera de la fuente??¿?¿?
¿Será que no has añadido los caracteres especiales al crear la fuente?
Si no, en teoría, con add_glyph o algo así puedes añadir nuevos caracteres a las fuentes desde mapas... o al menos, eso parece (aun tengo que probarlo).
Aunque sí, hay fuentes que no traen algunos caracteres "básicos".
se ha solucionado de la forma mas tonta...
ahora a supervisar lo de scan_code a ver como rula