Variables de write_var que no se actualizan.

Started by Danielo515, September 11, 2008, 01:31:31 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

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?

HaCkZJuaNN

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...

Danielo515

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.

Danielo515

#3
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.

fr0d0b0ls0n

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.
Follow the Moeko Principle

FAETON - En Progreso
15 Criaturas de ~28 |  18 Hechizos de ~41
25 Buffs de ~50      |  19 Enfrentamientos de ~80

Danielo515

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?

Danielo515

#6
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.

Danielo515

Por cierto ¿alguien sabe si cosas que están en distintas regiones colisionan?

kim-elet-o

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.
|/
|\im-elet-o el yayo programador.

Danielo515

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.

HaCkZJuaNN

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".

laghengar

!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Danielo515

Desgraciadamenta algunas veces la única forma de poder seguir programando es, dejar de programar.  ;D

kim-elet-o

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.

|/
|\im-elet-o el yayo programador.