我不想在这里发布整个程序,因为那会太多,但我会发布它的片段并详细说明它们来自哪里,所以你有一个想法。
问题:对于我的班级项目,我正在制作一个典型的太空入侵者游戏。当导弹击中一艘船时,会播放爆炸gif。 gif只循环一次(不连续)。当导弹击中外星飞船时,gif对第一艘宇宙飞船起到了不错的作用。但是,当我在第二或第三等地射击导弹时,gif不会再发射。我相信它只是从我研究的内容中播放gif的最后一帧。有没有办法在每次导弹击中时重新加载gif图像,还是有其他方法可以做到这一点?
以下是图片的链接:http://postimg.org/image/v2lljr7cb/
以下是一些代码:
我有一个名为Boom的课程,爆炸正在发生。这是该类中的代码:
public void draw(Graphics2D g2d) {
g2d.drawImage(getEnemyImg(), x, y, null);
}
public Image getEnemyImg() {
ImageIcon ic = new ImageIcon("src/Boom.gif");
return ic.getImage();
}
然后我有另一个名为GameFrame的类,其中一切都发生了。在其中,有这些代码专门用于爆炸。以下是此类的代码:
static ArrayList<Boom> booms = new ArrayList<Boom>();
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
ImageIcon ic = new ImageIcon("src/BackGround.jpg");
g2d.drawImage(ic.getImage(), 0, 0, null);
player.draw(g2d);
for (int i = 0; i < booms.size(); i++) {
Boom bm = booms.get(i);
bm.draw(g2d);
}
Enemy e = new Enemy(200, 400);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
player.update();
for (int i = 0; i < booms.size(); i++) {
Boom bm = booms.get(i);
bm.update();
}
checkEnd();
repaint();
}
public static void addBoom(Boom bm){
booms.add(bm);
}
public static void removeBoom(Boom bm) {
booms.remove(bm);
}
public static ArrayList<Boom> getBoomList() {
return booms;
}
最后,这里是添加爆炸的地方。当导弹击中外星飞船时会发生这种情况。这发生在敌人类中。这是代码:
public void checkCollisions() {
for (int i = 0; i < GameFrame.getMissileList().size(); i++) {
Missile m = GameFrame.getMissileList().get(i);
if (getBounds().intersects(m.getBounds())) {
GameFrame.removeEnemy(this);
GameFrame.removeMissile(m);
GameFrame.addBoom(new Boom(m.getX() -40, m.getY()- 60));
for(int j = 0; i <GameFrame.getBoomList().size(); i++){
Boom bm = GameFrame.getBoomList().get(j);
}
}
}
}
我为文字墙道歉。我的教授不确定如何做到这一点,所以我希望从这里得到一些帮助。
如果您有空余时间,您的想法会有所帮助。谢谢。