2013-03-27 4 views
1

Im пытается создать простое отражение шарика на блоке. Я использую фреймворк libgdx.Странное столкновение в LibGDX

У меня есть проблемы с блоком столкновения:

public class World { 

public Ball ball; 
public Bar bar; 
public Block block; 
public BoundingBox boundsBlock,boundsBall; 

public World(){ 
    initialize(); 
} 

public void initialize(){ 
    ball = new Ball(10/2, 6); 
    bar = new Bar(4,1); 
    block = new Block(4,7); 
    boundsBlock = new BoundingBox(new Vector3(block.position.x,block.position.y,0),new Vector3(block.position.x+2,block.position.y+1,0)); 
    boundsBall = new BoundingBox(new Vector3(ball.position.x,ball.position.y,0),new Vector3(ball.position.x+1,ball.position.y+1,0)); 
} 

public void update(float delta){ 
    ball.position.add(ball.direction.x*delta,ball.direction.y * delta,0); 

    //Right Collision 
    if(ball.position.x + 0.25f >9.65f){ 
     ball.position.x = 9.65f - 0.25f; 
     ball.direction.x = -ball.VELOCITY; 
    } 


    //Top Collision 
    if (ball.position.y + 0.25f > 14.65f){ 
     ball.position.y = 14.65f - 0.25f; 
     ball.direction.y = -ball.VELOCITY; 
    } 

    //Left Collision 
    if(ball.position.x - 0.25f < 0.35f){ 
     ball.position.x = 0.35f + 0.25f; 
     ball.direction.x = ball.VELOCITY; 
    } 

    //Bar collision 
    if(ball.position.y < 1+0.1f){ 
     if(ball.position.x > bar.position.x && ball.position.x < bar.position.x + 2){ 
      ball.position.y = 1+ 0.25f; 
      ball.direction.y = ball.VELOCITY; 
     } 

    } 

    //Block Collision 
    if(boundsBlock.contains(boundsBall)){ 

     ball.direction.x = -ball.VELOCITY; 
     ball.direction.y = -ball.VELOCITY; 


    } 

Проблема начинается с блока столкновения. Похоже, что он постоянно «внутри» зоны столкновения, и он меняет направление шарика на отрицательное все время, вместо этого выполняя его только тогда, когда мяч ограничивает «шаги» в границах блока.

Все предложения приветствуются!

Большое вам спасибо за помощь!

ответ

0

Проблема в том, что вы не обновляете boundsBall после ее инициализации, поэтому всегда думает, что она встроена в boundsBlock.

Смежные вопросы