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