Столкновение проблемы с OSlib для psp в C ++ - PullRequest
0 голосов
/ 14 мая 2009

Я использую oslib с набором инструментов pspsdk, и по какой-то причине это не работает так, как я думаю

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;
   }
 }

Спрайт начинает двигаться в противоположном направлении от куста, когда я пытаюсь отодвинуться, но со временем освобождается

любые лучшие методы столкновения или предложения

Я даже попробовал это для каждой кнопки, но все равно не повезло

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();
  }
}

1 Ответ

1 голос
/ 14 мая 2009

Одна вещь, которую вы можете сделать, это вместо того, чтобы персонаж «двигался назад», когда он ударяет по кустарнику, вы можете изменить его положение.

То, что я имею в виду, выглядит примерно так: (Используется только для примера).

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

Таким образом, всякий раз, когда спрайт сталкивается, он просто устанавливает положение, вместо этого заставляя его двигаться назад.

Существуют и другие методы обнаружения столкновений, но я сейчас слишком устала, чтобы вывести умный, гораздо менее читабельный ответ прямо сейчас ... Поиск в Google может привести ко многим результатам.

...