Pregunta

Im usando oslib con la cadena de herramientas pspsdk y por alguna razón esto no funciona de la manera que creo que sería

float spritewidth  = sprite->stretchX;
float spriteheight = sprite->stretchY;
float bushwidth  = bush->stretchX;
float bushheight = bush->stretchY;

//Basic border collision
if (sprite->x <= 0)
 sprite->x = 0;
if (sprite->y <= 0)
 sprite->y = 0;
if (sprite->x >= 455)
 sprite->x = 455;
if (sprite->y >= 237)
 sprite->y = 237;

 //Bush
if ( (sprite->x + spritewidth > bush->x) && 
    (sprite->x < bush->x + bushwidth) && 
    (sprite->y + spriteheight > bush->y) && 
    (sprite->y < bush->y + bushheight) ) 
{
  bushcol = 1;               
}
else
{
  bushcol = 0;      
}

 if (osl_keys->held.down)
 {
   if (bushcol == 0)
   {
     sprite->y += 4;
     sprite_position = DOWN;
     SpriteAnimate();
   }
   else
   { 
     sprite->y -= 6;
     bushcol = 0;
   }
 }

 if (osl_keys->held.up)    
 {
   if (bushcol == 0)
   {
     sprite->y -= 4;
     sprite_position = UP;
     SpriteAnimate();
   }
   else
   { 
     sprite->y += 6;
     bushcol = 0;
   }
 }

 if (osl_keys->held.right)
 {
   if (bushcol == 0)
   {
     sprite->x += 4;
     sprite_position = RIGHT;
     SpriteAnimate();
   }
   else
   { 
     sprite->x -= 6;
     bushcol = 0;
   }
 }

 if (osl_keys->held.left)
 {
   if (bushcol == 0)
   {
     sprite->x -= 4;
     sprite_position = LEFT;
     SpriteAnimate();
   }
   else
   { 
     sprite->x += 6;
     bushcol = 0;
   }
 }

El sprite comienza a moverse en la dirección opuesta a la de Bush cuando trato de alejarse, pero se cae con el tiempo libre

cualquier mejores métodos de colisión o sugerencia

incluso intenté esto para cada botón y sigue sin suerte

if (osl_keys->held.down)
{
  if ( (sprite->x + spritewidth > bush->x) &&
       (sprite->x < bush->x + bushwidth) && 
       (sprite->y + spriteheight > bush->y) &&
       (sprite->y < bush->y + bushheight) ) 
  {
    sprite->y -= 4; 
  }
  else
  {
    sprite->y += 2;
    sprite_position = DOWN;
    SpriteAnimate();
  }
}
¿Fue útil?

Solución

Una cosa que puede hacer, es en lugar de tener el carácter de "ir hacia atrás" cuando golpea el arbusto, que puede tener su cambio de posición.

Lo que quiero decir es algo como esto:. (Usando sólo para el ejemplo)

 if (osl_keys->held.up)    
 {
   if (bushcol == 0)
   {
     sprite->y -= 4;
     sprite_position = UP;
     SpriteAnimate();
   }
   else
   { 
     sprite->y = bush->y + 2;
     bushcol = 0;
   }
 }

De esta manera, cada vez que el sprite colisiona, sólo se establece la posición en vez conseguir que se mueva hacia atrás.

Existen otros métodos para hacer la detección de colisiones, pero estoy demasiado cansado ahora de lograr una inteligente, mucho menos fácil de leer, responder en este momento ... Una búsqueda en Google a su vez a muchos resultados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top