每次调用方法时,尝试在不同的位置显示一个新对象(JavaFX)

时间:2017-05-09 00:59:23

标签: java javafx

我可能错过了一些显而易见的东西,但我是一个极端的初学者,老实说,我不知道该为此做些什么。如果这没有意义,请致歉。

我正在尝试创建一个程序,这样每次运行'fireRight()'时,它都会生成一个新的'fireballRight'(Sprite对象),并设置相对于x和y值的位置(该位置)他们被“解雇”的另一个精灵。)

基本上,每次运行'fireRight()'时,我都希望程序创建一个新的fireballRight,它使用相同的动画,但是从不同的起点开始,而之前创建的所有fireballRight都会继续存在并生成动画。现在,我按空格键运行'fireRight()'。每次我点击空格键,而不是制作一个新的火球权,它只是加速了第一个制作的,并且似乎没有添加新的。

我错过了什么?

以下是我的代码中与我正在尝试的内容相关的部分:

double rightx = x + 180;
double righty = y + 50;


private int fireballs = 50;


Sprite[] fireballRight = new Sprite[50];

public void init(){

for (int i = 0; i < 50; i++) {

    fireballRight[i] = new Sprite();
}

}

private int i0 = 0;


public void fireRight(){
i0 += 1;
System.out.println(i0);

new AnimationTimer()
    {



public void handle(long currentNanoTime)

        {      

            fireballRight[i0].setImage("puercosloco/fireballright.png");                                          
            rightx++;      
            fireballRight[i0].setPosition(rightx, righty);
            fireballRight[i0].render(gc, 80, 55);           
        }
    }.start();     
}  

如果我没有提供足够的信息,或者这太模糊,请告诉我。

1 个答案:

答案 0 :(得分:1)

你不应该使用i0作为你的动画,因为这样你可以产生50 AnimationTimer个但它们都指向同一个精灵。

public void fireRight() {
    i0 += 1;
    int localI = i0;
    System.out.println(i0);

    new AnimationTimer() {
        public void handle(long currentNanoTime) {      
            fireballRight[localI].setImage("puercosloco/fireballright.png");                                          
            rightx++;      
            fireballRight[localI].setPosition(rightx, righty);
            fireballRight[localI].render(gc, 80, 55);           
        }
    }.start();     
}

我不确定其他东西是否正确。