Hola Splinter, me he bajado el código completo que hay actualmente en SVN, he compilado con tu script build-std-unix.
Y he probado este código y me da errores en las colisiones.
Global
profundidad = 16;
FPSteoriocos = 60;
ancho = 480;
alto = 272;
duracion_maxima = 80000;
tiempo_ini, tiempo_actual;
duracion_restante;
int ganar = 0;
function keyjoy(int id)
begin
if (key(id))
return 1;
end
return 0;
end
Begin
set_mode(ancho,alto,profundidad);
set_fps(FPSteoriocos,0);
tiempo_ini = get_timer() + duracion_maxima;
<b> globos(140,150,RGb(255,0,0));</b>
globos(200,150,RGb(255,255,0));
globos(260,150,RGb(0,0,255));
cohete(ancho/2,alto - alto/5);
write_var(0,ancho/2,5,0,duracion_restante);
while (!keyjoy(_esc))
duracion_restante = (tiempo_ini- get_timer())/1000;
if (duracion_restante <= 0)
write(0,100,100,0,"se acabó el tiempo");
while (!keyjoy(_enter)) frame; end;
break;
end
if (ganar)
write(0,100,100,0,"Has cazado el anillo");
write(0,80,140,0,"Pulsa enter para terminar");
while (!keyjoy(_enter)) frame; end;
break;
end
if (keyjoy(_f))
full_screen = !full_screen;
set_mode(ancho,alto,profundidad);
end
frame;
end
let_me_alone();
end
process cohete(x,y)
private
horizonte ;
id_colision;
colision_x;
colision_y;
begin
horizonte = alto - alto/5;
graph = new_map(50,50,profundidad);
map_clear(0,graph,RGB(255,0,0));
while (!keyjoy(_esc) )
if (ganar)
while (!keyjoy(_enter)) frame; end;
break;
end
if (keyjoy(_left))
x--;
end
if (keyjoy(_right))
x++;
end
if (keyjoy(_down))
y++;
end
if (keyjoy(_up))
y--;
end
id_colision = collision(type globos);
if (id_colision)
ganar = 0;
colision_x = x - id_colision.x;
colision_y = y - id_colision.y;
if ( colision_x > -4 and colision_x < 3 )
if ( colision_y > 46 and colision_y < 51 )
ganar = 1;
end
end
end
Frame;
end
unload_map(0,graph);
end
process globos(x,y, color)
private
int direccion = 1;
begin
graph = new_map(30,30,profundidad);
map_clear(0,graph,color);
while (!keyjoy(_esc) )
if (ganar)
while (!keyjoy(_enter)) frame; end;
break;
end
Frame(100);
end
unload_map(0,graph);
end
Si colisionamos con el cuadrado azul o amarillo, nos da segmentation fault.
Si colisionamos con el cuadrado rojo, nos da:ERROR: Runtime error in COHETE(65543) - Process 65537 not active (curiosamente es el primer proceso globo definido siempre)
Si bajamos los fps teóricos de 60, a 30, nos da el segmentatión fault justo al mover el personaje principal cuadrado rojo grande.
, el Segmentation fault lo he logrado quitar cambiando la línea 466 de instance.c por esta
if ( brother && LOCDWORD( r, BIGBRO ) )
(esto ya te lo comenté en otro post, pero pasaste un poco de mí)
El error de process 65537 not active no logro saber como arreglarlo, supongo que no se metió en la tabla de hashs ids bien o get_instance me dió un proceso equivocado, pero no logro solventar el problema.
Prueba tu el código adjunto a ver si también te pasa a ti en tu versión local de bennu, o es que estoy compilando yo algo mal :'(.
umn, :o el mismo código en fenix, no falla.
no se, se me ocurre downgradear bennu, para ver qué cambio produjo este error.
el cambio que has puesto no tiene sentido...
una pregunta, me da la sensacion que no queda claro el uso de LOCDWORD (o cualquier otra del grupo), cierto?
a verg...
id es una variable reservadas, que el motor usa para asignar un identificador unico a cada proceso, y se apoya en esta variable para hacer cosas como busquedas de procesos, asignacion de variable, colisiones, y un sin fin de operaciones... si vos usas esa variable dentro de un proceso para asignarle un valor, entonces estas en un serio problema...
reemplaza la funcion keyjoy, por esta
function keyjoy(int key_id)
begin
if (key(key_id))
return 1;
end
return 0;
end
ahi vas a dejar de tener cuelgues, saludos...
PD: en fenix andara de casualidad, en algunos casos en concreto, pero si haces eso, no dudes que tarde o temprano va a reventar todo por los aires.
:o, asias Master.
jo, que malo soy, me suena que esto ya me pasó antes, caí dos veces ya. :'(, ayudaría si diera un warning al compilar :D.
na problem... :D
Quote from: DCelso on January 31, 2011, 01:35:17 AM
jo, que malo soy, me suena que esto ya me pasó antes, caí dos veces ya. :'(, ayudaría si diera un warning al compilar :D.
el core no sabe que variables son solo de escritura o de lectura o ambos, si supiera eso, directamente no seria necesario un warning.
no se puede poner un warning por cada vez que alguien quiere usar una variable definida en un modulo, porque muchas veces son validos... la cosa es que el usuario debe saber que variables tocar y que no... las variables que actualiza solo el sistema no deben ser tocadas.
Por cierto... ¿dónde se descargan los fuentes de Bennu?, pues fallan los enlaces a estos que hay en http://www.bennugd.org/node/2...
Necesito documentación de ciertas funciones así como novedades del lenguaje y me temo que ésta es la más explicativa :-)
Saludos.
Hombre MythomizeR tu por aki, en sourceforge
Qué pasa DCelso? por aquí ando de nuevo de cuando en cuando desde hace un tiempo :-P
Por Sourceforge ando pero la cosa es que he encontrado los fuentes pero sin empaquetar, y no en un .tar o algo así para bajarlos de una :-)
Pero miraré mejor a ver...
ATENCIÓN: EDICIÓN...
Asociando tu respuesta con un post de un hilo que he ledio antes donde alguien cuenta que sourceforge anda caida porque no sé que está haciendo, deduzco que eso mismo, que está caida la página y no voy a poder descargar de momento... ¿me equivoco? :-)
pues parece que tienes razón, habrá que esperar un poco.
el svn por linea de comandos funciona... o por lo menos a mi no me da error.
Por lo que he leído, han cerrado el servidor que se encargaba de la visualización por web del repositorio, pero los creo qeu el servidor de SVN como tal está funcional, sólo sigue las instrucciones que te vienen en la página del proyecto en SF.
Ok, gracias a todos.
De todas formas ayer, viendo el panorama, ya me estuve bajando uno a uno los fuentes de los módulos que me interesaban :-)
¡Saludos!