2017-06-06 21 views
0

我想讓熊貓(用戶通過左右箭頭鍵移動)與從屏幕左上角落下的糖果圖像碰撞。當兩張圖像相撞時,屏幕和控制檯會顯示「您接觸到了糖果」。但是當熊貓和糖果碰觸時,沒有任何反應。處理 - 如何使2個運動圖像碰撞?

下面是代碼:

PImage candy, panda; 


int pandaX = 800; 
int pandaY = 790; 
int candySpeed = 20; 
int yDirCandy = 1; 
int yPosCandy = 10; 
int xPosCandy = 20; 

void setup() { 
candy = loadImage("goodCandy1.png"); 
panda = loadImage("panda.png"); 
} 
void loadStuff() { 
    image(panda, pandaX, pandaY, 80, 112); 
    text("Lives: " + lives, 1400, 70); 
    image(candy, xPosCandy, yPosCandy, 187, 121); 
    yPosCandy = yPosCandy + (candySpeed * yDirCandy); 
    touchCandy(pandaX, pandaY, yPosCandy, xPosCandy); 
} 
void keyPressed() { 
    if (key==CODED) { 
    if (keyCode==LEFT) { 
     pandaX = pandaX-20; 
    } 
    if (keyCode==RIGHT) { 
     pandaX = pandaX+20; 
    } 
    if (pandaX<=10) { 
     pandaX=10; 
     lives = lives -1; 
    } 
    if (pandaX>=1500) { 
     pandaX=1500; 
    } 
    } 

} 

void touchCandy(int xPosCandy, int yPosCandy, int pandaX, int pandaY) { 
    if (pandaX==xPosCandy && pandaY==yPosCandy) { 
    text("YOU TOUCHED THE CANDY!", width/2, height/2); 
    print("YOU TOUCHED THE CANDY!"); 
    } 

} 

我試着做if (pandaX==xPosCandy && pandaY==yPosCandy)但沒有奏效。我也嘗試過if (pandaX>xPosCandy && pandaY<yPosCandy),但它說你很快就接觸了糖果。

任何幫助將不勝感激,讓我知道如果你需要更多的代碼。謝謝!

回答

0

看這句話:

if (pandaX==xPosCandy && pandaY==yPosCandy) 

如果熊貓和糖果,是在完全相同的位置這隻會是真實的。這是不太可能的。

同樣,看看這行:

if (pandaX>xPosCandy && pandaY<yPosCandy) 

如果熊貓的權利和糖果上面,這是不是你想要的這隻會是真實的。

相反,您需要檢查它們是否重疊。你會通過檢查每一側,這樣做:

if(rectOneRight > rectTwoLeft && rectOneLeft < rectTwoRight && rectOneBottom > rectTwoTop && rectOneTop < rectTwoBottom){ 
    //collision 
} 

無恥的自我宣傳:我已經寫在處理碰撞檢測教程(包括矩形,矩形碰撞)提供here

+0

謝謝,我試着測試它們是否像你所建議的那樣重疊。我還爲高度和寬度創建了變量,以便更容易理解。這是我做過什麼 如果(candyX + candyW> pandaX && candyX 潘迪&& candyY <潘迪+潘達){ 文本( 「您觸摸糖果!」,寬度/ 2 ,身高/ 2);我不確定如果我的數學計算頂部和底部是錯誤的,但它仍然不起作用。有什麼建議麼? – Brianna

+0

我真的回去了我的代碼,發現當我調用touchCandy()方法時,它並沒有按照正確的順序調用參數。它現在可以工作,非常感謝您的幫助! – Brianna