![](/img/trans.png)
[英]using iPhone OpenGl ES effectively for 2d (and collision detection)
[英]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.