好的,所以這可能是一個業餘程序員試圖通過實驗來體驗Android圖形的基本使用的一個愚蠢的問題,但在這裏。有條件的時候不會觸發75:android
爲了讓自己熟悉2D Android圖形來幫助我的一位朋友,他希望我將他的想法用於他的遊戲,我決定嘗試製作一個簡單的pong版本。 (簡單的意思我還沒還送兩個撥片尚未移動)
去關Android API guides,我圍繞着一個定製的視圖對象(PongView
),有3個ShapeDrawable
對象(rectangles
)的試驗應用。兩個槳(我稱它們爲支桿)和球。我在視圖中實現了一個MotionEventListener
,並使左邊的棍子隨之移動(我想出了一些東西:)。
之後,我通過使用在主要活動中創建的延遲Runnable
移動球來移動自定義視圖中的更新方法。在更新方法中,我製作了一個碰撞處理程序,當撞擊屏幕的兩側或槳的任何一側時,該碰撞處理程序會反轉球的矢量(在特定的軸上)。
但玩過它後,我看到我的一個碰撞情況沒有發射。球會穿過棒的底部和右側,當它碰到左側或頂部時彈起。
下面是碰撞條件:
//collisions
if ((bx + bside == getMeasuredWidth() || bx == 0) || //hit right or left of screen
((bx + bside == lx || bx == lx + width) && (by < ly + height && by > ly)) || //hit left stick
((bx + bside == rx || rx + width == bx) && (by < ry + height && by > ry))) { //hit right stick
bVectorX = -bVectorX;
System.out.println("bounce x");
}
if ((by + bside == getMeasuredHeight() || by == 0) ||
((by + bside == ly || by == ly + height) && (bx < lx + width && bx > lx)) ||
((by + bside == ry || by == ry + height) && (bx < rx + width && bx > rx))) {
bVectorY = -bVectorY;
System.out.println("bounce y");
}
- bside:球正方形的邊長(像素)
- 寬度:槳葉的寬度
- 高度:槳的高度
- bVectorX :在x軸上每更新一次的座標(像素)變化
- bx:球的x座標
- 由:球的y座標
- LX:左槳
試圖縮小問題區域的x座標,我註釋掉了所有除這種說法,因爲這說法是給我的麻煩(至少在x軸):
bx == lx + width
我意識到,因爲lx
運行期間從未改變,我可以在原始值(75)進行測試插頭,看看是否導致該條件觸發。它沒有。所以我決定試試76,並猜測它是什麼,它的工作!我不知道爲什麼,但它工作。球在該像素線上反彈。所以我試圖把變量放回去,嘗試:
bx == lx + width + 1
bx == lx + width - 1
他們都工作!然而,當我拿走一個+/- 1的時候,它會直接穿過槳並從另一側彈出。 (因爲我所做的只是反轉矢量)。我想要它做的是擊中槳的右側,並扭轉向量。
我不知道爲什麼發生這種情況,在此先感謝您的幫助:)
編輯:所以我測試的條件,發現這兩個代碼返回件真。
if (75 == 75) {
int i = 75;
if (i == 75) {
但是,這仍然永遠不會返回true。
if (bx == 75) {
再次感謝您的支持。 :)
+1的詳細信息。我曾嘗試編碼碰撞,但那太過懶散了。要繼續前進,並支持這個帖子,而不是提高它。乾杯! –
@int j非常感謝upvote和edit,我希望這可以解決。我可以用我最新的條件測試添加編輯。 – BAT23
繼續前進。您可以提供的相關詳細信息越好。 –