7

好的,所以這可能是一個業餘程序員試圖通過實驗來體驗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

+1的詳細信息。我曾嘗試編碼碰撞,但那太過懶散了。要繼續前進,並支持這個帖子,而不是提高它。乾杯! –

+1

@int j非常感謝upvote和edit,我希望這可以解決。我可以用我最新的條件測試添加編輯。 – BAT23

+1

繼續前進。您可以提供的相關詳細信息越好。 –

回答

0

你不應該即if (bx == 75) {}爲這個條件來檢測碰撞檢查精確平等將得到滿足只有如果你的bVectorX有非常有限的值(即只加上或減去到/從bx整數將始終使其值爲75)。

只需使用<=>=,你應該沒問題。

這同樣適用於檢測與屏幕邊緣的碰撞。