Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java小行星游戏如何在第一枪不消失的情况下发射多枪?_Java_Arrays_Game Physics - Fatal编程技术网

Java小行星游戏如何在第一枪不消失的情况下发射多枪?

Java小行星游戏如何在第一枪不消失的情况下发射多枪?,java,arrays,game-physics,Java,Arrays,Game Physics,因此,在我的Java课程的最后一节课上,我们正在制作一个小行星游戏(除了一个比官方版本更简单的版本,因为时间不够) 问题是,当我们的飞船发射一个镜头(空格键)时,我们添加了(镜头,x,y),但当我们再次单击空格键时,它只会拍摄该镜头并将其放回原始的x,y。所以现在我们只能在屏幕上一次发射一次。我们希望能够发射多个镜头,让它们都可见,等等 但我不知道该怎么做。欢迎任何帮助,谢谢 注:如果需要,我将添加我们的代码。 另外,很抱歉再次发布这篇文章,我想我可以稍后编辑这篇文章,这就是为什么我没有包含代码

因此,在我的Java课程的最后一节课上,我们正在制作一个小行星游戏(除了一个比官方版本更简单的版本,因为时间不够)

问题是,当我们的飞船发射一个镜头(空格键)时,我们添加了(镜头,x,y),但当我们再次单击空格键时,它只会拍摄该镜头并将其放回原始的x,y。所以现在我们只能在屏幕上一次发射一次。我们希望能够发射多个镜头,让它们都可见,等等

但我不知道该怎么做。欢迎任何帮助,谢谢

注:如果需要,我将添加我们的代码。 另外,很抱歉再次发布这篇文章,我想我可以稍后编辑这篇文章,这就是为什么我没有包含代码,但显然没有

package week7Homework;
import acm.program.GraphicsProgram;
import java.util.*;
import java.awt.event.*;


import acm.graphics.*;
import java.awt.Color;
import java.awt.Image;

public class space8bit extends GraphicsProgram
{
    /* Initialize everything that is needed */
      final int WIN_HEIGHT = 800;
      final int WIN_WIDTH = 1900;
      GImage space = new GImage("/College/IT219/Week7/src/week7Homework/outerspace.png");
      GImage ship = new GImage("/College/IT219/Week7/src/week7Homework/ship.png");
      GImage explosion = new GImage("/College/IT219/Week7/src/week7Homework/explosion.png");
      GImage [] ast = new GImage[6];
      Random rand = new Random();
      pewpew shots = new pewpew();
      int shipx;
      int shipy;



public void init()
{
      setSize(WIN_WIDTH, WIN_HEIGHT);
      add(space);
      ship.setLocation(50,330);
      ship.scale(.8);
      add(ship);
      addKeyListeners( );

      //scale explosion
      explosion.scale(.5);

}
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode( );
if (key == KeyEvent.VK_UP)
{ ship.move(0, -15); }
/*else if (key == KeyEvent.VK_SPACE)
{ xMove = MV_AMT; }*/
else if (key == KeyEvent.VK_DOWN)
{ ship.move(0, 15); }
else if (key == KeyEvent.VK_SPACE)
{shipx =  (int)ship.getX()+195;
shipy = (int)ship.getY() + 80;
    add(shots,shipx,shipy);
}

}
public void asteriods()
{
    GImage ast1 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1300,100);
    GImage ast2 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1750,250);
    GImage ast3 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1650,350);
    GImage ast4 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1550,650);
    GImage ast5 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1450,600);
    GImage ast6 = new GImage("/College/IT219/Week7/src/week7Homework/asteriod.png",1350,750);
    ast [0] =  ast1;
    ast [1] =  ast2;
    ast [2] =  ast3;
    ast [3] =  ast4;
    ast [4] =  ast5;
    ast [5] =  ast6;

    add(ast[0]);
    add(ast[1]);
    add(ast[2]);
    add(ast[3]);
    add(ast[4]);
    add(ast[5]);


}

public void run()
{
    asteriods();
    while(true)
    {
        pause(120);

        int random1x = rand.nextInt(-1+1+6)-9;
        int random2x = rand.nextInt(-1+1+6)-15;
        int random3x = rand.nextInt(-1+1+6)-25;
        int random4x = rand.nextInt(-1+1+6)-16;
        int random5x = rand.nextInt(-1+1+6)-8;
        int random6x = rand.nextInt(-1+1+6)-13;

        ast[0].move(random1x, 0);
        ast[1].move(random2x, 0);
        ast[2].move(random3x, 0);
        ast[3].move(random4x, 0);
        ast[4].move(random5x, 0);
        ast[5].move(random6x, 0);

        shots.move(50, 0);

        for (int i = 0; i < ast.length; i++)
        {
            //integer that gets bounds of all rectangles and ovals in the arrays. 
            GRectangle asteroidBounds = ast[i].getBounds();

            //check for collision with other objects
            if (shots.getBounds().intersects(asteroidBounds))
            {
                int shotX = (int)shots.getX();
                int shotY = (int)shots.getY();

                pause(10);
                remove(ast[i]);
                add(explosion, shotX-100, shotY - 50);
                remove(shots);
                pause(25);
                remove(explosion);


            }

            else if (ship.getY() <= 0)
            {
                ship.move(0, 15);
            }
            else if (ship.getY() >= WIN_HEIGHT - 168)
            {
                ship.move(0, -15);
            }
        }
    }
}

}

因为你在整个游戏中只有一颗子弹

if (bulletFired == true) {
    bullet.move(5, 0);
}
你在告诉那颗子弹回到(5,0)

每次按空格键时,您需要找到一些方法来创建新的项目符号对象:

if (key == KeyEvent.VK_SPACE) {
    int shipX = (int)ship.getX();
    int shipY = (int)ship.getY();

    Bullet firedBullet = new Bullet(/* params if any, x? y? */);

    add(firedBullet, shipX+50, shipY+25);
    bulletFired = true;
}
虽然这是我的愿景,我会做的事情,这可能不会与你的游戏(我不知道你有什么类,他们的角色等)。但希望你能看到我的意思,并加以调整


现在因为你有多发子弹,你还得照顾好它们的寿命。你在游戏开始时发射了1000发子弹,它们会从屏幕上消失。你不想在游戏剩下的时间里浪费时间画它们。因此,无论您使用什么列表/数组来跟踪要绘制的对象,您都必须定期查找并删除屏幕外的对象。

下面是一个示例代码,如果您按空格键几次,您将完全明白我的意思。如果您有信息要添加,请编辑您的原始帖子。对不起,我没有立即看到它,我在谷歌上搜索了它,但它说编辑帖子是一种特权(我想它也适用于您自己的帖子)对不起。现在我被阻止了,哈哈,甚至我还有更多的问题。fml。
if (key == KeyEvent.VK_SPACE) {
    int shipX = (int)ship.getX();
    int shipY = (int)ship.getY();

    Bullet firedBullet = new Bullet(/* params if any, x? y? */);

    add(firedBullet, shipX+50, shipY+25);
    bulletFired = true;
}