私は問題を抱えています。私はビリヤードゲームを作成しています。ヒットをシミュレートするときにバロスが反応する必要があります。プログラムは次のように機能します。ラベルが作成されるGUIクラスにあり、ボタンはメインクラスからパラメーターを受け取るメソッドを呼び出し、しばらくすると、パワーが0に減るまでボールのXとYを変更してから停止します、コードは動作していますが、ボールはしばらく停止するまで動きます。そのため、while が機能し、power int が 0 の場合、while が消え、新しい X、Y がペイントされます。
これはボタンが呼び出す関数で、ボタンはすべてのパラメータを送信します
public void golpe(int pbola, int pvelocidad, String pdireccion, JLabel[] listalabels) throws InterruptedException{
listabolas[pbola].setVelocidad(pvelocidad);
listabolas[pbola].setDireccion(pdireccion);
while (listabolas[pbola].getVelocidad() > 0) {
moverBola(pbola, listalabels);
//System.out.println(listabolas[pbola].getPosX());
//System.out.println(listabolas[pbola].getPosY());
Thread.sleep(500);
//This line is supposed to change the X and Y of the object over and over
//but only does it till the end
listalabels[pbola].setLocation(listabolas[pbola].getPosX(), listabolas[pbola].getPosY());
}
}
コードが大きく見えないように、「if」を 1 つだけコピーした関数 movebola() を次に示します。
private void moverBola(int pbola, JLabel[] listalabels) {
if (listabolas[pbola].getDireccion().equals("SE")) {
int pposX = listabolas[pbola].getPosX();
listabolas[pbola].setPosX(pposX + 1);
int pposY = listabolas[pbola].getPosY();
listabolas[pbola].setPosY(pposY + 1);
}