我可能错过了一些显而易见的东西,但我是一个极端的初学者,老实说,我不知道该为此做些什么。如果这没有意义,请致歉。
我正在尝试创建一个程序,这样每次运行'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();
}
如果我没有提供足够的信息,或者这太模糊,请告诉我。
答案 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();
}
我不确定其他东西是否正确。