簡體   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