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);
}
}