Tengo esta sentencia
[code language="bennu"]if(y>=miniradar_altura_banda[jugador])
miniradar_vel_detect[jugador]=velocidad*10;
end[/code]
Y en otro proceso muy anterior tengo esta otra sentecia...
[code language="bennu"] from i=1 to jugadores
write(miniradar_fuente_ceros,pos_velocimetro
- +29,pos_velocimetro[1],5,"000");
write_var(miniradar_fuente_vel,pos_velocimetro- +29,pos_velocimetro[1],5,miniradar_vel_detect);
end[/code]
Se supone que las variables escritas tendrían que actualizarse cada vez que el if del primer código lo cambiase, pero solo se actualizan la primera vez, luego se quedan así y no se el porque. ¿Puede ser porque el proceso que hace el write_var muere? Creo que no, ya que lo he probado en otro proceso que no muere y el resultado es el mismo.
A continuación posteo el código de los dos procesos
[code language="bennu"]process crear_mapa()
private
int tile[1];
int pos[4][1]=0,0,200,150,
600,150,
200,450,
600,450;
int pos_velocimetro[4][1]=0,0,90,35,
490,35,
90,335,
490,335;
begin
tile[0]=map_clone(fpg_minijuego,2);
tile[1]=map_clone(fpg_minijuego,3);
graph=new_map(400,300,16);
from i=0 to 5
map_put(0,0,tile[rand(0,1)],200,50+(i*100));
map_put(0,0,tile[rand(0,1)],600,50+(i*100));
end
unload_map(0,tile[0]);
unload_map(0,tile[1]);
//El frame de cada jugador-----------------------------------------
//aqui esta creando el frame
tile[0]=map_clone(fpg_minijuego,6);
tile[1]=map_clone(fpg_minijuego,9);
map_put(0,graph,tile[0],50,150);
map_put(0,graph,tile[1],375,150);
unload_map(0,tile[0]);
unload_map(0,tile[1]);
tile[0]=map_clone(fpg_minijuego,7);
tile[1]=map_clone(fpg_minijuego,8);
from i=50 to 350;
map_put(0,graph,tile[0],i,0);
map_put(0,graph,tile[1],i,297);
end
unload_map(0,tile[0]);
unload_map(0,tile[1]);
//aqui lo coloca
from i=1 to jugadores
map_put(0,0,graph,pos- ,pos[1]);
end
graph=map_clone(fpg_minijuego,10);
from i=1 to jugadores
map_put(0,0,graph,pos_velocimetro- ,pos_velocimetro[1]);
end
from i=1 to jugadores
write(miniradar_fuente_ceros,pos_velocimetro- +29,pos_velocimetro[1],5,"000");
write_var(miniradar_fuente_vel,pos_velocimetro- +29,pos_velocimetro[1],5,miniradar_vel_detect);
end
//Regiones--------------------------------------
define_region(1,0,3,400,294);
define_region(2,400,3,400,294);
define_region(3,0,303,400,294);
define_region(4,400,303,400,294);
//---------------------------------------------------
end
Process vehiculo_miniradar(tipo,float velocidad,jugador);
Private
float avance;
fotos=1; //valor máximo 1
vel_G;
Begin
file=0;
region=jugador;
angle=-90000;
graph=map_clone(fpg_minijuego,1);
velocidad=velocidad/100;
vel_G=write_in_map(0,velocidad,4);
map_put(0,graph,vel_G,25,15);
unload_map(0,vel_G);
switch(jugador)
case 1: x=160; end
case 2: x=480; end
case 3: x=160; end
case 4: x=640; end
end
repeat
avance+=velocidad;
y=avance;
if(miniradar_flashing)
velocimetro_miniradar(y,velocidad,jugador);
end
if(y>=miniradar_altura_banda[jugador])
miniradar_vel_detect[jugador]=velocidad*10;
end
frame;
until(y<0);
//explosión de las naves o algo
End [/code]
¿cual puede ser el problema?
has comprobado que la linea miniradar_vel_detect[jugador] = velocidad*10 se ejecuta?
prueba a poner un say(jugador) justo debajo de esa línea y dinos que te da...
Estos son algunos de los valores
[code language="bennu"]35
43
107
105
173
22
25
67
54
120
198
115
79
172
96
198
154
187
5
35
140
92
91
105
23
100
173
177
152
25
54
144
183
191
54
179[/code]
Muy raros por cierto, ya que es una variable que se la van pasando de un proceso a otro sin alterarla, y el proceso que se la pasa a vehiculo las tiene bien, y dentro de vehículo lo mismo, es una variable necesaria para el funcionamiento.
He puesto que cada coche escriba su variable jugador y está bien, todos están entre 1 y 4. Esto es muy raro.
Como puedes ver, la variable jugador determina las coordenadas del coche, si valiera por encima de 4 el coche no aparecería, y también se aprecia que en ningún momento se le asigna ningún valor. Esto es algo un poquito raro.
Pues sí es raro, sí. Sin el código completo parece complicado adivinar que es.
¿De qué tipo es la variable?
¿Has comprobado que varía correctamente?
Prueba a pasar una de ellas a otra variable global y representar esa, por si fuera un problema del vector, aunque lo dudo.
He probado a que todos los coches le pasasen su variable jugador a una variable global que imprimo por pantalla y solo se actualiza con el nº del primer coche que pasa, luego se queda estática, igual que la otra. Tambien, a esta misma variable global probé a pasarle la variable velocidad y el resultado fué el mismo. Cosararamala. ¿posteo el código completo?
DEJADLO! PARAD! NO SIGAIS!! He encontrado el error y nadie debería seguir buscandolo. El error era que el proceso coche no moría nunca, aunque no apareciera en pantalla, y como supongo que tenía prioridad pues estaba contínuamente asignando su valor a la variable. No leais ni una línea mas de mi estúpido código.
venga, repitamos todos juntos: programar desde las 10 de la mañana hasta las cuatro de la mañana es maaalo, programar hasta las cuatro d ela mañana es maaalo.
PERDON.
Por cierto ¿alguien sabe si cosas que están en distintas regiones colisionan?
Danielo515 te doy un consejo, no te enfades, una forma de aprender como funcionan las cosas, es montarte pequeños programas de pruebas, en los cuales observas como reaccionan las diferentes funciones de fenix/bennu, de modo aisalado y sin la interferencia del restante codigo que acompaña el proyecto que estas realizando, de esta forma experimentas y aprendes de forma mas intuitiva. Pasar a programacion multihilo simulada cuando se viene de la programacion clasica monohilo, al principio cuesta, ademas lo digo por que los ultimos mensajes acabas encontrando tu solo los fallos, bueno espero que no te enfades es un consejo que te doy de buena fe.
Amigo kel ¿puedo llamarte kel? (jo jo jo, que de pelicula queda esto no?) Para nada me enfado, los consejos son bienvenidos, de hecho una de mis aficiones es hacer pequeños programas estúpidos que hagan algunas cosas inútiles para ver que pasa y como hacerlo, pero seguro que alguna vez te ha pasado que te pones con un proyecto y quieres sacarlo adelante, y te topas con un bug y te enciscas con el.... y hasta que no lo resuelves no duermes tranquilo. Muchas veces he posteado errores a las cuatro de la mañana y los he descubierto a la mañána siguiente, fresquito, pero a las 4 de la mañana estaba desesperado y me tiraba de los pelos y por eso los postee.
Aunque te doy toda la razón.
si le llamas kel le vas a confundir con el otro usuario que se llama kel :P
a mi también me pasaba eso que dices cuando empecé a programar con fénix, pero si que es cierto que a veces lo mejor es pasear un rato, ver la tele, o incluso dormir y retomarlo un rato más tarde y de repente dices: "coño, qué tontería".
Amén 8)
Desgraciadamenta algunas veces la única forma de poder seguir programando es, dejar de programar. ;D
Huy como se entere Kel que me llamas igual que el... ;D ;D ;D, jejejeje, bromas aparte, con solo me llames kim ya es suficiente.