Java 导弹don';t火

Java 导弹don';t火,java,applet,Java,Applet,我被导弹部分卡住了。当按下键时,如何在Player类中添加方法fire()(来自employee.java)。一旦我按下空格键,导弹就会发射并添加到导弹对象的数组列表中。但这并没有发生 private ArrayList<Missilies> missilies; public Player (MainClass mc){ url = mc.getDocumentBase(); player = mc.getImage(url,"spaceship1.png");

我被导弹部分卡住了。当按下
键时,如何在
Player
类中添加方法
fire()
(来自
employee.java
)。一旦我按下空格键,导弹就会发射并添加到导弹对象的数组列表中。但这并没有发生

private  ArrayList<Missilies> missilies;

public Player (MainClass mc){
    url = mc.getDocumentBase();
    player = mc.getImage(url,"spaceship1.png");

}

public void paint(Graphics g, MainClass mc){
    g.drawImage(player, x, y, mc);
}

@Override
public void keyPressed(KeyEvent e) {
    switch (e.getKeyCode()){
    case KeyEvent.VK_SPACE:{
        // fire a missile;

        missilies.add(new Missilies(x, y));
        ArrayList ms = (Missilies).
        missilies.add(new Missilies(getX(), getY()));
        break;
        }

欢迎来到堆栈溢出

对你的问题提出一些建议-请务必清理你发布的代码,只发布相关部分,阅读像这样凌乱的代码是非常困难的。正如Marc B所说,很难说出你的真实要求,所以请在你的问题中说清楚,告诉我们你已经尝试了什么

据我所知,从按键事件处理程序调用Missilies.fire(sic)方法时遇到问题。我们来分析一下,因为您需要做3件事:

  • 制造导弹。在创建Missilies类的实例之前,其他任何操作都不会起作用。打Missilies.fire是行不通的,因为这就像告诉工程师发射导弹蓝图,而不是实际发射导弹<代码>导弹新导弹=新导弹(x,y)
  • 发射导弹。现在,您可以对已创建的实例调用
    fire
    newfilms.fire(this)
  • 最后,您可以将已创建的导弹添加到数组中:
    misslies.add(new飞弹)
  • 再说一次,阅读你的代码真的很难,所以对我的建议持保留态度。请务必把问题弄清楚


    编辑:根据您在上面对NullPointerException的评论说明,问题更清楚:您没有初始化missilies ArrayList!您应该确保在使用之前初始化所有对象。您需要一行,如
    missilies=newarraylist()在您的
    公共播放器(MainClass mc)
    功能中。我不打算通读您的所有代码,但您应该通读并检查您是否已经初始化了所有其他对象。

    发生了什么事?导弹的事没有发生?它会启动但不会添加到您的列表中?它偏离目标并用核武器攻击你的狗?你的导弹一定有技术问题??)欢迎来到SO。请阅读。并没有人会费力地通过代码墙来调试它。是的,它不会被添加到列表中。它在missilies.add(新missilies(x,y)),给了我NullPointerException;谢谢回复!我会处理我的代码,并且一定会把它清理干净。根据你的NullPointerException注释,我已经在我的答案中添加了一个编辑。见上面。谢谢!现在一切都好了。
    public class Missilies {
    
     //  New missile object  ////////
    
     public Missilies(int x, int y){
    
        this.x=x;
        this.y=y;
    
         visible=true;
    
     }
    
     //  Moving missiles ////////
    
     public void update(MainClass mc, Player p){
         x +=missile_speed;
         if (x>mc.getWidth())
             visible = false;
     }
    
     //  Painting  ////////
    
     public void paint(Graphics g, MainClass mc, Player p) {
    
            for (int i = 0; i < missilies.size(); i++ ) {
    
                Missilies m = (Missilies) missilies.get(i);
                g.drawImage(missile, p.getX(), p.getY(), mc);
            }
    
    
        }
    
     // Firing new missile  ///////////
    
     public  void fire(Player p){
         missilies.add(new Missilies(p.getX(), p.getY()));
     }
    
     // Action performed //////////
    
     public void action(MainClass mc, Player p){
    
         for (int i = 0; i < missilies.size(); i++) {
             Missilies m = (Missilies) missilies.get(i);
             if (visible == true) 
                 update(mc, p);
             else missilies.remove(i);
         }
     }
    
    public void init()
    {
        setSize(800, 600);
        p = new Player(this);
        e = new Enemy(this);
    } 
    
    {
        while(running)
        {
            repaint();
            p.update(this);
            e.update(this, p);
    
            try
            {
                Thread.sleep(20);
            }
    
            catch(InterruptedException e)
            {
                System.out.println("Error has occured");
            }
    
        }
    
    
    
    }
    
    public void update(Graphics g){
        dbImage = createImage(800,600);
        dbg = dbImage.getGraphics();
        paint(dbg);
        g.drawImage(dbImage, 0, 0, this);
    
    }
    
    public void paint(Graphics g){
        //g.setColor(Color.BLACK);
        p.paint(g, this);
        e.paint(g, this);
    }
    
    }