2009-05-13 15 views
0

Im использованием oslib с pspsdk набора инструментов и по какой-то причине этого не работает так, как я думаю, что это будетпроблемы столкновения с OSlib для PSP в C++

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

Для справок в будущем люди будут гораздо более охотно читать ваш образец кода, если он не является двойным интервалом, вы приложили немало усилий, чтобы не прокручивать их прямо, чтобы читать длинные строки, а стиль фигурной скобки и отступов последовательны. –

ответ

0

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

Что я имею в виду, это примерно так: (Только для примера).

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

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

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