繁体   English   中英

iPhone上的OpenGL ES中的碰撞检测

[英]Collision Detection in OpenGL ES on the iPhone

我正在研究的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.y + playerVelocity.y)超过平台另一半。 这意味着即使它看起来在外观上也不会“击中”该平台。

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

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

如果您要创建平台游戏,则必须解决很多类似问题。 不必为自己烦恼,并阅读有关平台物理学的MetaNet教程: N个教程 您提到的问题以及其他可能会遇到的其他问题都得到了特别的解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM