“如何拍摄”;子弹“;java中的swing动画游戏

“如何拍摄”;子弹“;java中的swing动画游戏,java,swing,animation,graphics,game-physics,Java,Swing,Animation,Graphics,Game Physics,我创建了一个简单的动画游戏,用户可以用箭头键移动一个圆。我画了一个正方形,它“跟随”圆的中心。我的目标是在圆的中心有无限多的正方形(子弹),可以在移动时使用asdf从左到右向下射击。我试图找出如何键入代码,将子弹从一次射击后的圆圈中分离出来。提前谢谢。我是一个初学者,所以我为代码混乱提前道歉:) 公共类游戏扩展JPanel实现ActionListener、KeyListener { 定时器t=新定时器(5,此); int x,y,velx,vely,movx,movy=0; int shootx

我创建了一个简单的动画游戏,用户可以用箭头键移动一个圆。我画了一个正方形,它“跟随”圆的中心。我的目标是在圆的中心有无限多的正方形(子弹),可以在移动时使用asdf从左到右向下射击。我试图找出如何键入代码,将子弹从一次射击后的圆圈中分离出来。提前谢谢。我是一个初学者,所以我为代码混乱提前道歉:)

公共类游戏扩展JPanel实现ActionListener、KeyListener
{
定时器t=新定时器(5,此);
int x,y,velx,vely,movx,movy=0;
int shootx,shooty;
int-xaim=0;
int-yaim=0;
int xpts[],ypts[];
int aim;
多边形子弹;
公共游戏(){
t、 start();
addKeyListener(此);
设置聚焦(真);
setFocusTraversalKeysEnabled(false);
}
公共组件(图形g){
Graphics2D g2d=(Graphics2D)g;
//背景
g2d.setColor(Color.BLUE);
g2d.fillRect(0,060600);
g2d.fillRect(x,y,30,30);
//边界
g2d.setColor(Color.GREEN);
g2d.fillRect(0,0,20600);
g2d.fillRect(0,0600,20);
g2d.fillRect(580,0,20600);
g2d.fillRect(0560600,20);
//玩家
g2d.setColor(Color.RED);
g2d.椭圆形(x,y,30,30);
//子弹头
g2d.setColor(Color.BLACK);
g2d.fillRect(xaim+28,yaim+28,15,15);
}
已执行的公共无效操作(操作事件e){
checkbounds();
x+=movx;
y+=movy;
xaim+=velx;
yaim+=0;
重新油漆();
}
按下公共无效键(按键事件e){
int code=e.getKeyCode();
if(code==KeyEvent.VK_UP)
{
up();
}
if(code==KeyEvent.VK_DOWN)
{
向下();
}
if(code==KeyEvent.VK_左)
{
左();
}
if(code==KeyEvent.VK_RIGHT)
{
对();
}
if(code==KeyEvent.VK_A)
{
//代码向左射击
}
if(code==KeyEvent.VK_W)
{
//发射代码
}
if(code==KeyEvent.VK\u D)
{
//正确射击的代码
}
if(code==KeyEvent.VK_S)
{
//击落的代码
}
}
公开作废{
movy=-1;
movx=0;
velx=0;
vely=-1;
}
公众假期{
movy=1;
movx=0;
velx=0;
fly=1;
}
公共无效权(){
movx=1;
movy=0;
velx=1;
f=0;
}
公共空间(左){
movx=-1;
movy=0;
velx=-1;
f=0;
}
公共void checkbounds(){
如果(x<20){
x=20;
}
如果(x>550){
x=550;
}
如果(y<20){
y=20;
}
如果(y>530){
y=530;
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
}

基本上,您要做的是为
Bullet
创建一个新类。此类将保存每个项目符号的数据值(x位置、y位置、x速度、y速度)。然后,在主类中创建项目符号列表。无论何时要添加项目符号,请将其添加到列表中。无论何时更新游戏,也要更新列表。是一个很好的游戏教程,可以帮助您入门。

您已经发布了要求和代码,但尚未提出具体的可回答问题。请浏览、和部分,了解此网站的工作原理,并帮助您改进当前和未来的问题,从而获得更好的答案。在进行任何自定义绘制之前,请致电
super.paintComponent
;使用密钥绑定API而不是
KeyListener
,有关更多详细信息,请参阅;不要依赖“魔法”数字进行计算,使用已知的数值(如
getWidth
getHeight
)如何射击子弹。从一个圆圈开始?更好@你的问题还是有点宽泛。我会遵循Kyranstar的建议,因为他的建议是合理的(他的答案是1+),但对你来说最重要的是,你应该尝试将你的大问题,即射击问题,分解为小问题步骤,然后尝试一次解决一个步骤,最好与主程序隔离。然后,如果你在任何一个步骤上遇到困难,你可以带着一个更具体、更负责的问题回到这里,从而能够得到更好、更具体的帮助。
public class Game extends JPanel implements ActionListener, KeyListener
{

    Timer t = new Timer(5, this);

    int x, y, velx, vely, movx, movy = 0; 

    int shootx, shooty;

    int xaim = 0;

    int yaim = 0;

    int xpts[], ypts[];

    int aim;

    Polygon bullet;

    public Game(){

        t.start();

        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);
    }
    public void paintComponent(Graphics g){

        Graphics2D g2d = (Graphics2D) g;
        //Background
        g2d.setColor(Color.BLUE);
        g2d.fillRect(0, 0, 600, 600);
        g2d.fillRect(x, y, 30, 30);
        //Borders
        g2d.setColor(Color.GREEN);
        g2d.fillRect(0, 0, 20, 600);
        g2d.fillRect(0, 0, 600, 20);
        g2d.fillRect(580, 0, 20, 600);
        g2d.fillRect(0,560,600,20);
        //Player
        g2d.setColor(Color.RED);
        g2d.fillOval(x, y, 30, 30);
        //Bullet
        g2d.setColor(Color.BLACK);
        g2d.fillRect(xaim+28,yaim+28,15,15);    
    }
    public void actionPerformed(ActionEvent e) {
          checkbounds();
          x += movx;
          y += movy;
          xaim += velx;
          yaim += vely;

        repaint();
    }
    public void keyPressed(KeyEvent e) {
          int code = e.getKeyCode();
          if (code == KeyEvent.VK_UP)
          {
              up();
          }
          if (code == KeyEvent.VK_DOWN)
          {
              down();
          }
          if (code == KeyEvent.VK_LEFT)
          {
              left();
          }
          if (code == KeyEvent.VK_RIGHT)
          {
              right();
          }
          if (code == KeyEvent.VK_A)
          {
             //code to shoot left
          }
          if (code == KeyEvent.VK_W)
          {
              //code to shoot up
          }
          if (code == KeyEvent.VK_D)
          {
              //code to shoot right
          }
          if (code == KeyEvent.VK_S)
          {
              //code to shoot down
          }

    }
    public void up(){
        movy = -1;
        movx = 0;
        velx = 0;
        vely = -1;
    }
    public void down(){
        movy = 1;
        movx = 0;
        velx = 0;
        vely = 1;

    }
    public void right(){
        movx = 1;
        movy = 0;
        velx = 1;
        vely= 0;

    }
    public void left(){
        movx = -1;
        movy = 0;
        velx = -1;
        vely = 0;
    }
    public void checkbounds(){
        if(x < 20){
            x = 20;
        }
        if(x > 550){
            x = 550;
        }
        if(y < 20){
            y=20;
        }
        if(y > 530){
            y = 530;
        }
    }
    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}

}