ayuda con durezas

Started by chuflun, July 26, 2010, 09:01:27 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

chuflun

vale gracias por las respuestas
voy a trabajar en ello y ya os contare

gecko

no se si con el advance funcionará, pero si son coordenadas comunes, lo que podes hacer es comprobarlas de a 1 en 1 dentro de un bucle, for por ejemplo, y luego avanzar todas juntas hasta donde se haya comprobado.

No se si se entiende, pero seria como:
Si queres avanzar 5, pregunta primero si podes avanzar 1, despues 2... y asi hasta el 5, y recien ahi avanza los 5 o lo que puedas.
Torres Baldi Studio
http://torresbaldi.com

DjSonyk

El tema de las durezas siempres es peliagudo, he visto tu mapa de durezas y te recomendaria que en vez de la dureza fuera el contorno, lo hagas como un cuadrado tendras menos posibilidades que se te "cuele" el tanque,ya que asi corres el riesgo que te valla sorteando el tanque los pixeles correctos y te encuentres con el tanque encima del arbusto...no se si me explicado...

chuflun

puede que funciones un poco mejor pero aun asi me hce cosas raras, creo que es porque las durezas son muy pequeñas

Prg

#19
mm, cuando usas durezas necesitas asegurarte que siempre se van a poder detectar. si las durezas son de un pixel, y usas un gr[afico de durezas 5 veces más pequeño que el scroll, entonces tienes que revisar cada 5 pixels de movimiento de scroll en tu mapa de durezas.

esto ya no debe darte problemas

[code language="bennu"]for (rd=radio-v;rd<radio;rd++)
          for (ang=0;ang<360000; ang+=30000)
                 if (map_get_pixel ( fpg_fondo , 7 , x+get_distx(ang,rd) , y+get_disty(ang,rd) ) == obstaculo )
                        x-=get_distx(ang,radio-rd); y-=get_disty(ang,radio-rd);
                      END
                    end
      end
[/code]

el protagonista te quedaría así:

[code language="bennu"]PROCESS protagonista()

PRIVATE
   int latencia=2;
   midolor;
   id_texto_mivida;
   freno=0;
   rato;
   radio=80;
   rd;
   ang;
   
PUBLIC
   
   
   vidaprota=1000;

BEGIN

   ctype = C_scroll;
   file = fpg_fondo;
   graph = 1;         
   size = 100;
   
   x=400;                  
   y = 400;               
   Z = -1;
   
   
   
   
   
   LOOP
                        
      latencia--;
      
      
      IF ( key ( _up ) )
         v = v + 0.1;
         IF ( v > 8 );
            v = 8;
         END
         freno=1;
      
      
         
      
      ELSEIF ( key ( _down ) and freno==1 )
         v = v - 0.2;
         IF ( v < 0 );
            v = 0;
            freno=0;
            rato=0;
         END
               
      ELSEIF ( key ( _down ) and freno==0 and rato > 10 )
         
            v = v - 0.1;
            IF ( v < -6 );
               v = -6;
            END         
         
               
      ELSE
      freno=0;
         IF ( v < 0 );
            v=v+0.1;
         END
         IF ( v > 0 );
            v=v-0.1;
            freno=1;
         END
         
      END
      rato++;
      advance(v);
      
      IF ( key ( _left ) )
         angle = angle + 3000;
      ELSEIF ( key ( _right ) )
         angle = angle - 3000;
      END
      
      
      

      //WHILE ( map_get_pixel ( fpg_fondo , 7 , x+radio , y ) == obstaculo ) x--; END
      //WHILE ( map_get_pixel ( fpg_fondo , 7 , x-radio , y ) == obstaculo ) x++; END
      //WHILE ( map_get_pixel ( fpg_fondo , 7 , x , y+radio ) == obstaculo ) y++; END
      //WHILE ( map_get_pixel ( fpg_fondo , 7 , x , y-radio ) == obstaculo ) y--; END

   
   


      
      
      //ponemos los limites para que el protagonista no salga de la pantalla   
      IF ( x > scroll
  • .x0 + C_RESOLUCIONX-10 )
             x = scroll[0].x0 + C_RESOLUCIONX-10;
          END
          
          IF (x < scroll[0].x0 + 10 )
             x = scroll[0].x0 + 10;
          END
          
          IF ( y > scroll
  • .y0 + C_RESOLUCIONY-10 )
             y = scroll[0].y0 + C_RESOLUCIONY-10;
          END
          
          IF (y < scroll[0].y0 + 10  )
             y = scroll[0].y0 + 10;
          END


          
                
             
          
          IF ( rand ( 1 , 50 ) == 1 )
             enemigo();
          END
       
       
       
          IF ( midolor = collision ( type disparomalo ) )
             vidaprota = vidaprota - 1;
             signal ( midolor , S_KILL );
          END
          
          
          id_texto_mivida = write ( 0 , x-scroll[0].x0 , ( y - scroll[0].y0 ) + 40 , 4 , "vida:" + vidaprota );
          
          
          for (rd=radio-v;rd<radio;rd++)
              for (ang=0;ang<360000; ang+=30000)
                     if (map_get_pixel ( fpg_fondo , 7 , x+get_distx(ang,rd) , y+get_disty(ang,rd) ) == obstaculo )
                            x-=get_distx(ang,radio-rd); y-=get_disty(ang,radio-rd);
                          END
                        end
          end

          FRAME;
          delete_text ( id_texto_mivida );
       END

    END
    [/code]

    solo que debes encoger el radio, que la verdad lo he probado acá (no se cuánto tienes de radio), pero no pasaba entre los arbustos. saludos
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

chuflun

si señor, muchas gracias, funciona de lujo
en serio, muchas gracias y hasta otra