【问题标题】:Collision Detection in OpenGL ES on the iPhoneiPhone 上 OpenGL ES 中的碰撞检测
【发布时间】:2010-07-07 01:01:54
【问题描述】:

我正在开发的 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 中构建这个游戏。

任何对此问题的见解将不胜感激!

【问题讨论】:

  • [player getPosition] 给你什么分数?左上方?中心? p.position呢?
  • 他们都给出了中心点。

标签: iphone collision-detection


【解决方案1】:

要检查的一件事是确保播放器没有真正通过平台。平台有多高?如果平台高度不是很高,那么玩家可能在平台上方(在一帧中),然后在下一帧(player.y + playerVelocity.y)中超过平台的一半。这意味着它永远不会“击中”平台,即使它在视觉上看起来确实如此。

您可以做的一件事是使用 NSLog() 打印出这些值。这样,当您遗漏时,您可以查看日志以查看遗漏的数据值。

有很多方法可以处理“登陆平台”。一种是确保角色已达到足够高的高度以“高于”平台,然后如果它穿过,则将其位置重置为在平台上。

【讨论】:

    【解决方案2】:

    如果您要制作平台游戏,那么您将不得不处理很多这样的问题。省去一些麻烦,并阅读有关平台游戏物理的 MetaNet 教程:N tutorials。您提到的问题以及您可能会遇到的其他几个问题都得到了特别解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多