2010-07-07 3 views
0

У меня, похоже, странная проблема с 2D-игрой, над которой я работаю. Чтобы определить, попадает ли мой игровой спрайт на платформу, я сначала делаю оператор if, проверяющий CGRectIntersectsRect, и как только я определил, что спрайт-плеватель и спрайт платформы пересекаются, я затем проверяю, чтобы точка центра (плюс половина высота игрока) выше платформы, если это так, я устанавливаю скорость игрока «y» на ноль.Обнаружение столкновений в OpenGL ES на iPhone

playerVelocity.x=5; 

playerVelocity.y+=gravity; 

if (CGRectIntersectsRect([turtle getBounds], [platform getBounds])) { 

if ([player getPosition].y>p.position.y+([player getBounds].size.height/2)) { 
    if (playerVelocity.y>0) { 
    playerVelocity.y=0; 
    inJump=NO; 
    } 

}else { 
    inJump=YES; 
} 
} 

[player setPosition:CGPointMake([player getPosition].x+playerVelocity.x, [player getPosition].y-playerVelocity.y)]; 

Большую часть времени этот код работает над игровой цикл, однако каждый сейчас и потом, то второй «если заявление» не принимается во внимание, и мой игрок спрайт проходит через платформу. Я создаю эту игру в OpenGL ES 1.1 с помощью специального класса спрайтов.

Любое понимание этой проблемы было бы оценено!

+0

Какая точка '' [player getPosition] 'дает вам? Верхний левый? Центр? Как насчет 'p.position'? –

+0

Они оба дают центр. – Scott

ответ

1

Необходимо проверить, действительно ли игрок не проходит через платформу. Насколько высока платформа? Если высота платформы невелика, игрок может находиться выше платформы (в одном кадре), а затем в следующем кадре (player.y + playerVelocity.y) более чем на полпути через платформу на другом. Это означало бы, что он никогда не «ударит» по платформе, хотя это кажется визуально таким, как оно.

Единственное, что вы можете сделать - это распечатать, используя NSLog() значения. таким образом, когда вы пропустите, вы можете проверить журналы, чтобы увидеть, какие значения данных были пропущены.

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

1

Если вы создаете платформер, есть много таких проблем, с которыми вам придется столкнуться. Сохраните некоторые головные боли и прочитайте руководства по MetaNet по физике платформы: N tutorials. В частности, вы упомянули проблему, а также несколько других проблем, с которыми вы, вероятно, столкнетесь.

+0

Это выглядит полезно. Благодаря! – Scott

Смежные вопросы