1 回答

TA貢獻1842條經驗 獲得超13個贊
您需要先檢查碰撞。如果檢測到碰撞-檢查InvulnerabilityActive。如果是true- 將其重置為false并返回 false。在下一次碰撞InvulnerabilityActive將是假的,碰撞將被檢測到。
public boolean collides(Wizard wizard) {
if (Intersector.overlaps(wizard.getBoundingRectangle(), barUp)
|| Intersector.overlaps(wizard.getBoundingRectangle(), barDown)) {
if (GameRenderer.InvulnerabilityActive) {
GameRenderer.InvulnerabilityActive=false;
return false;
} else {
return true;
}
} else {
return false;
}
}
可能會出現“向導飛過障礙物并不斷檢測到碰撞”之類的問題。在這種情況下:將額外的字段添加bool InvulnerabilityActivePending到GameRenderer. GameRenderer.InvulnerabilityActivePending = true;旁邊添加GameRenderer.InvulnerabilityActive = true;。并使用此代碼:
public boolean collides(Wizard wizard) {
if (Intersector.overlaps(wizard.getBoundingRectangle(), barUp)
|| Intersector.overlaps(wizard.getBoundingRectangle(), barDown)) {
if (GameRenderer.InvulnerabilityActive) {
GameRenderer.InvulnerabilityActivePending=false;
return false;
} else {
return true;
}
} else {
GameRenderer.InvulnerabilityActive=GameRenderer.InvulnerabilityActivePending;
return false;
}
}
我們不是InvulnerabilityActive在碰撞開始時重置,而是在碰撞結束時重置它。
添加回答
舉報