Обнаружение столкновений в OpenGL ES на iPhone - PullRequest
0 голосов
/ 07 июля 2010

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

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)];

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

Любое понимание этого вопроса будет оценено!

Ответы [ 2 ]

1 голос
/ 12 июля 2010

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

1 голос
/ 07 июля 2010

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

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

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

...