[英]Java game: shooting bullets in a simple game
我是 java.im 的新手,试图编写一个简单的游戏,它有一个玩家和敌人,当你按下“空格”之类的一些键时,玩家最多会朝正确的方向发射子弹,但我不知道如何在游戏中渲染子弹。 实际上它不会出现,也不会在游戏中移动。
射击系统
package com.company;
import javax.swing.*;
import java.awt.*;
public class Bullet {
GamePanel panel;//Game panel
Rectangle hitBox;//Bullet
public int x,y,width,height;
boolean Shoot;
public Bullet(int x , int y ,GamePanel panel)
{
this.panel = panel;
this.x=x;
this.y=y;
height=15;
width=15;
hitBox = new Rectangle(x,y,width,height);
}
public void set()
{
if(Shoot) // where I have problem which Bullet doesn't move or doesn't appear
move();
}
public void move()
{
x=x+10;
}
public void draw(Graphics2D gtd)
{
gtd.setColor(Color.RED);
gtd.fillRect(x,y,width,height);
}
}
设置游戏对象的游戏面板
package com.company;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
public class GamePanel extends JPanel implements ActionListener {
Player player;
Timer gameTimer;
Bullet bullet;
public GamePanel(){
player = new Player(400,300,this);
bullet = new Bullet(player.x, player.y, this);
gameTimer = new Timer();
gameTimer.schedule(new TimerTask() {
@Override
public void run() {
player.set();
bullet.move();
repaint();
}
},100,15);
}
public void paint(Graphics g){
super.paint(g);
Graphics2D gtd = (Graphics2D) g;
player.draw(gtd);
bullet.draw(gtd);
}
void keyPressed(KeyEvent e)
{
if(e.getKeyChar()=='w')
player.keyUp=true;
if(e.getKeyChar()=='a')
player.keyLeft=true;
if(e.getKeyChar()=='s')
player.keyDown=true;
if(e.getKeyChar()=='d')
player.keyRight=true;
if(e.getKeyChar()=='t')
bullet.Shoot=true;
}
void keyReleased(KeyEvent e)
{
if(e.getKeyChar()=='w')
player.keyUp=false;
if(e.getKeyChar()=='a')
player.keyLeft=false;
if(e.getKeyChar()=='s')
player.keyDown=false;
if(e.getKeyChar()=='d')
player.keyRight=false;
if(e.getKeyChar()=='t')
bullet.Shoot=false;
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
我认为问题在于您正在调用bullet.move();
在您的GamePanel
类的 Timer 中连续。 除此之外,我不完全确定您如何获取键盘输入。 您的GamePanel
类包含KeyListener
通常会使用的方法,但该类没有实现KeyListener
,而是实现了ActionListener
,它没有在您的代码中使用。
所以你应该做的是:
keyPressed
和keyReleased
函数是否在按下键盘按钮时被实际调用,如果没有,您应该在GamePanel
类中实现KeyListener
而不是ActionListener
bullet.move();
只在应该调用的时候被调用,因为它当前在你的计时器的每次迭代中被调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.