嗨,我有一个子弹对象数组。我将子弹对象 isAlive var 设置为 false。如果我在不单击空格按钮(触发子弹)的情况下运行代码并打印出数组对象 isAlive var 并将它们全部打印为假(应该如此)。
如果我在项目符号出现在屏幕上并正确移动时单击空格按钮,但是当我打印出显示 isAlive var 的项目符号数组时,它们都设置为 true,具有相同的 x/y 位置。如果我单击空格按钮两次 2 个项目符号出现并正常移动,但是当我打印数组时,它再次显示前十个元素是活动的,具有相同的 x/y 位置(屏幕上的第一个项目符号),接下来的十个元素也具有相同的 x/y 位置(屏幕上的第二个项目符号)
再按空格键不会添加新的项目符号。这里;是 fireButton() 的代码
public void fireBullet(){
if(currentBullet > BULLETS -1){
currentBullet = 0;
}
if(bullet[currentBullet].isAlive()==false){
bullet[currentBullet].setAlive(true);
bullet[currentBullet].setxPos(ship.getxPos());
bullet[currentBullet].setyPos(ship.getyPos());
}
currentBullet ++;
}
这是它在 KeyPressedMethod 中的调用
case KeyEvent.VK_SPACE:
fireBullet();
break;
谁能看到我哪里出错了?现在一直在搞乱代码,这让我很头疼:)
编辑:如果可以的话,我会回答所有问题 :) 1)currentBullet 是一个私有类成员,首先初始化为 0,然后在 fireBullet() 方法中为每个发射的子弹递增到 20 和然后重置为 0。
2)当我初始化子弹数组时,我为每个元素分配一个新的 Bullet()。每个子弹构造函数都将 isAlive 设置为 false
3)当它离开屏幕时,子弹变量 isAlive 被设置回 false 4)这是完整的 keypressed 方法
public void keyPressed(KeyEvent k) {
int keyCode = k.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_A:
//move ship left
if(ship.getxPos()<20){
ship.setxPos(20);
}else
ship.setxPos(ship.getxPos()-1);
break;
case KeyEvent.VK_D:
if(ship.getxPos()>1260){
ship.setxPos(1260);
}else
ship.setxPos(ship.getxPos()+1);
break;
case KeyEvent.VK_SPACE:
fireBullet();
break;
}
}//end keypressed event
我认为渲染没问题,因为它正在绘制子弹,但将其中的 10 或 20 个彼此重叠绘制,因此当运行代码时,您只会看到两个子弹在屏幕上移动,
问题是每次按下空格键应该只有 1 个活的子弹,但是一旦所有 20 个子弹都被设置为活的,就按下它!
第二次编辑:我在游戏循环结束时打印出当前的子弹,它似乎正在正确递增,这表明每次按下空格键都会调用 fireBullet() 方法,似乎每次按下时都会用活子弹填充数组