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