2013-05-14 179 views
1

過去幾天我一直在嘗試將簡單的碰撞加入到我的簡單遊戲中。我在互聯網上看過很多地方,但我沒有發現任何有用的東西。我只是使用包圍盒,我想讓玩家盒子在四個方面中的任何一個碰到方塊時停止(並且不會卡住或反彈方塊)。聽起來不難,但我發現它非常困難。我真的只是想知道我需要放在if語句的括號中的代碼,我已經閱讀並聽到了我可以採用的所有理論。如果可以的話請幫忙。如何在檢測到碰撞後處理碰撞

if(bb_collide(player,block)){ //detection works just fine, 
             //just not sure what to do afterwards 


    } 
    else{ 
     player.setX((player.getX() + velx)); 
     player.setY((player.getY() - vely)); 
     player.set_coll(player.getX(),player.getY(),player.getWidth(),player.getHeight()); 
     block.set_coll(block.getX(),block.getY(),block.getWidth(),block.getHeight()); 

    } 

其實我想通了,我只是有一對夫婦的壞日子,對不起,如果我有像一個態度不好或者什麼,但我得到它做什麼,我想它。如果有人感興趣,我會怎麼做,因爲它適用於一個運動物體(動子)撞到另一個靜止物體(保姆)。它發現碰撞的兩側之間的距離,並將速度設置爲該距離減去幾個因此它不重疊。我有邊界框渲染,所以我可以看到它們重疊。感謝您的回覆!

public void Fix_Vel(Player mover, Terrain sitter){ 

    if(sitter.coll_box.contains(mover.getX() + mover.getHeight() + mover.getVelX(), mover.getY()) || 
      sitter.coll_box.contains(mover.getX() + mover.getHeight() + mover.getVelX(), mover.getY() + mover.getHeight())){  //mover top right and bottom right coords right collision testing 

     mover.setVelX(sitter.getX() - (mover.getX() + mover.getWidth()) - 2); 

    } 

    if(sitter.coll_box.contains(mover.getX() + mover.getVelX(), mover.getY()) || 
      sitter.coll_box.contains(mover.getX() + mover.getVelX(), mover.getY() + mover.getHeight())){        //mover top left + bottom left coords left collision testing 

     mover.setVelX((sitter.getX() + sitter.getWidth()) - mover.getX() + 2); 

    } 

    if(sitter.coll_box.contains(mover.getX(), mover.getY() + mover.getVelY()) || 
      sitter.coll_box.contains(mover.getX() + mover.getWidth(), mover.getY() + mover.getVelY())){         //mover top left + top right coords top collision testing 

     mover.setVelY((sitter.getY() + sitter.getHeight()) - mover.getY() + 2); 


    } 

    if(sitter.coll_box.contains(mover.getX(), mover.getY() + mover.getHeight() + mover.getVelY()) ||        //mover bottom left and bottom right coords bottom collision testing 
      sitter.coll_box.contains(mover.getX() + mover.getWidth(), mover.getY() + mover.getHeight() + mover.getVelY())){ 

     mover.setVelY(sitter.getY() - (mover.getY() + mover.getHeight()) - 2); 
     jumping = false; 

     if(mover.getVelY() < 0) 
      mover.setVelY(0); 

    } 
} 
+0

所以你想要一個物品堅持碰撞的元素? – 2013-05-14 11:39:41

回答

0

你不說每個盒子是如何控制的,所以我不確定你想要什麼。如果檢測工作正常,只要不引起碰撞就不允許物體移動。

PS:I really just wanna know the code that i need to put in the if statement's brackets, I've read and heard all the theory I can take.說實話,用這種態度,你不會走得太遠,你總是需要人們的幫助。遊戲編程需要大量的數學直覺。三角函數,微積分和線性代數是必不可少的。

0

也許你想要做這樣的事情?

if(bb_collide(player,block)){ 
    velx = 0; 
    vely = 0; 
} 
else{ 
    player.setX((player.getX() + velx)); 
    player.setY((player.getY() - vely)); 
    player.set_coll(player.getX(),player.getY(),player.getWidth(),player.getHeight()); 
    block.set_coll(block.getX(),block.getY(),block.getWidth(),block.getHeight()); 

}