2013-05-14 141 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()); 

}