如何重新启动游戏?我的代码的问题是,当它重新启动时,它会使敌人加倍。所以有10个敌人,假设玩家比用户重启时死亡,现在有20个敌人,以此类推。。。。。
在开始方法中,我创建了10个敌人并存储在arraylist中
public void start()
{
for(int i = 0; i < 10; i++){
enemyObject = new Enemy(10*i,10);
enemyStore.add(enemyObject); //store in array
}
}
在这里,我让敌人移动,碰撞等,如果敌人死了,我会将其从阵列列表中移除
public void actionPerformed(ActionEvent e)
{
for(int i = 0; i < enemyStore.size(); i++){
enemyObject = (Enemy)enemyStore.get(i);
if(!enemyObject.getDead()){ //if enemy is not died
//make enemy move, collision etc... here
....
}
else{ //remove enemy and create another one
enemyStore.remove(i);
enemyObject = new Enemy(10*i, 10); //create enemy
enemyStore.add(enemyObject); //store in array
}
}
}
在油漆方法中,油漆敌人
public class Display extends JPanel
{
public void paintComponent(Graphics g){
super.paintComponent(g);
for(int i = 0; i < enemyStore.size(); i++){ //PAINT ENEMY
enemyObject = (Enemy)enemyStore.get(i);
enemyObject.paint(g);
}
}
}
在那里,如果玩家死亡,则移除arraylist中的所有敌人并重新启动
public void mouseClicked(MouseEvent e)
{
if(playerObject.getDead()){
if(e.getX() > bx && e.getX() < bx + bw) {
if(e.getY() > by && e.getY() < by + bh){
for(int i = 0; i < enemyStore2.size(); i++){
enemyStore2.remove(i);
}
start();
}
}
}
}
3条答案
按热度按时间ccrfmcuu1#
在添加之前移除所有敌人。
0tdrvxhp2#
进一步说明Rabbit所说的:每次调用
start()
方法时,都会创建新的敌人,并将其添加到enemyStore
集合中。现在,我不知道“enemyStore”使用的是哪种类型的集合(它不是简单的数组,这是肯定的-简单数组没有“add(…)”函数),但每个标准集合都实现了Collection接口,因此应该具有函数clear()
、remove(Object o)
和removeAll(Collection<?> c)
。如果您在添加新敌人之前使用其中一个来移除当前敌人,问题应该得到解决。zzwlnbp83#
这是因为在小程序停止后,无法再次初始化()。没有什么可以调用该方法。
为什么不创建一个reset()方法,为变量等提供默认值,并使其看起来像小程序已重新启动?