0

私は問題を抱えています。私はビリヤードゲームを作成しています。ヒットをシミュレートするときにバロスが反応する必要があります。プログラムは次のように機能します。ラベルが作成される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);


    }
4

1 に答える 1