Autor Tema: ayuda con durezas  (Leído 2956 veces)

chuflun

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
Re: ayuda con durezas
« Respuesta #15 en: Julio 28, 2010, 12:36:02 am »
vale gracias por las respuestas
voy a trabajar en ello y ya os contare

gecko

  • Hero Member
  • *****
  • Mensajes: 809
  • Karma: 47
    • Torres Baldi Studio
Re: ayuda con durezas
« Respuesta #16 en: Julio 28, 2010, 02:28:27 am »
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

  • Sr. Member
  • ****
  • Mensajes: 492
  • Karma: 24
Re: ayuda con durezas
« Respuesta #17 en: Julio 28, 2010, 11:36:54 am »
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

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
Re: ayuda con durezas
« Respuesta #18 en: Julio 28, 2010, 09:16:17 pm »
puede que funciones un poco mejor pero aun asi me hce cosas raras, creo que es porque las durezas son muy pequeñas

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
Re: ayuda con durezas
« Respuesta #19 en: Julio 28, 2010, 10:04:20 pm »
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
« última modificación: Julio 28, 2010, 10:22:11 pm por Prg »
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

chuflun

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
Re: ayuda con durezas
« Respuesta #20 en: Julio 29, 2010, 11:25:41 am »
si señor, muchas gracias, funciona de lujo
en serio, muchas gracias y hasta otra