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;
}
Проблема начинается с блока столкновения. Похоже, что он постоянно «внутри» зоны столкновения, и он меняет направление шарика на отрицательное все время, вместо этого выполняя его только тогда, когда мяч ограничивает «шаги» в границах блока.
Все предложения приветствуются!
Большое вам спасибо за помощь!