обычно в такой игре доступно только движение по оси Y, но я решил сделать так, чтобы допускались также движения по оси X. игра работает отлично, ЕСЛИ я не двигаю весло по оси X, КОГДА мяч ударяется о весло (в этом случае оно проходит прямо через него.) Если я остановлю движение по оси X до того, как мяч ударится, шарик весла отскочит от него каждый раз.
Сначала я подумал, что это связано с пикселями, но я также попытался изменить столкновение весла несколькими способами без каких-либо положительных результатов. Мяч НИКОГДА не отскочит от весла, сколько бы раз я ни пытался.
код очень прост, и я перемещаю все на 1 пиксель за раз:
public void drawBall(Graphics g) { //ball speed, movement and collision
b.set(b.getX()+VX,b.getY()+VY); //velocity X and velocity Y both at 1px
g.setColor(Color.black);
b.draw(g);
if(b.getY()<0 || b.getY()>sizeY-b.getRadius()){ //top & bottom collision
VY = -VY;
}
if(b.getX()<0 || b.getX()>sizeX-b.getRadius()){ //left & right detection
b.center();
VX = -VX;
x = (int) (Math.random()*2+0);
if(x == 0)
VY = -VY;
}
if(b.getX() == p1.getX()+p1.width && b.getY()>p1.getY() && b.getY()<p1.getY()+p1.height){ // p1 paddle detection
VX = -VX;
}
if(b.getX()+b.getRadius()==p2.getX() && b.getY()>p2.getY() && b.getY()<p2.getY()+p2.height){ // p2 paddle detection
VX = -VX;
}
}
Для перемещения лопастей я использую простые флажки, которые устанавливают движение в определенном направлении «вкл» при нажатии клавиши и «выкл» при отпускании клавиши. Я запускаю это в бесконечном цикле, поэтому он выполняется постоянно.
Вот как выглядит метод run ():
public void run() {
while(true){
repaint();
try {
Thread.sleep(5);
playerMovement(); //moves players paddle on X and/or Y axis
playerLimits(); //limits movment of players to specific area
} catch (InterruptedException e){
}
}
}
Снова я попытался создать столкновение весла таким образом, чтобы оно не было привязано к пикселю с помощью команды «if (ball
Спасибо за любую помощь заранее, я очень ценю это.