【小白提问JavaEE】在写仿雷霆战机小游戏时出现的问题

octopus_yan 2018-06-17 11:37:07
我写的是一个仿雷霆战机小游戏,在运行让飞机随着鼠标移动的方法时出现了一点问题。

有大佬帮我看一下如何调用action方法比较好或者我该用什么思路去写界面切换会比较容易些么?

以下是主界面以及游戏界面代码
由于卡在了选择飞机之后如何运行飞机随鼠标移动的方法,所以没有继续往下写..


package src;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class AirplaneGame {
static String music;
static String sound;
//初始化游戏界面
static GameStart gs;
static int Gamestate;
public static void main(String[] args) throws IOException {
PlayMusic p = new PlayMusic();
Gamestate = 1;
music = "lib/5481.wav";
sound = "lib/click1.wav";
//创建面板
JFrame f=new JFrame("雷霆战机");
//设置面板大小
f.setSize(500, 732);
//面板可关闭
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//面板居中
f.setLocationRelativeTo(null);
//禁止更改面板大小
f.setFocusable(false);
//初始化开始界面
GameBegin gb = new GameBegin();
//初始化开始按钮
JLabel ks = new JLabel(new ImageIcon("lib/load1.gif"));
ks.setBounds(300, 500, 185, 185);
f.add(ks);//添加按钮
f.add(gb);//添加界面
//面板可见
f.setVisible(true);
//播放音乐
p.play(music);
//鼠标监听切换游戏状态
MouseAdapter m = new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
PlayMusic p1 = new PlayMusic();
//进入按钮音效
p1.play(sound);
}
@Override
public void mouseClicked(MouseEvent e) {
//第一次点击,选择飞机界面
if(Gamestate==1) {
p.stop();
f.remove(gb);
f.remove(ks);
music = "lib/5528.wav";
try {
gs = new GameStart();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
f.add(gs);
f.setVisible(false);
f.setVisible(true);
p.play(music);
f.addMouseListener(gs.m1);
Gamestate = 2;
}else if(Gamestate==2) {//第二次点击,选择飞机并开始游戏
int fjx = e.getX();
int fjy = e.getY();
if(fjx>gs.getWidth()/20&&fjx<gs.getWidth()/20+gs.ap.ap_w&&fjy<gs.getHeight()&&fjy>gs.getHeight()-gs.ap.ap_h) {
Gamestate = 2;
gs.Gamestate = 2;
gs.fj = 0;
gs.repaint();
try {
gs.action();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else if(fjx>gs.getWidth()/15*8&&fjx<gs.getWidth()/15*8+gs.ap.ap_w&&fjy<gs.getHeight()&&fjy>gs.getHeight()-gs.ap.ap_h) {
Gamestate = 2;
gs.Gamestate = 2;
gs.fj = 1;
gs.repaint();
try {
gs.action();//就是在这里运行方法会出现卡死现象,但我也不知道该怎么改
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
};
ks.addMouseListener(m);
}
}



package src;

import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class GameStart extends JPanel{
BufferedImage background;
BufferedImage ap3;
int Gamestate;
Airplane ap;
int fj;
MouseAdapter m1;
public GameStart() throws IOException {
background = ImageIO.read(new File("lib/bj04.jpg"));
ap = new Airplane();
Gamestate=1;
}
@Override
public void paint(Graphics g) {
if(Gamestate==1) {
//画背景
g.drawImage(background, 0, 0, this.getWidth(), this.getHeight(), null);
//画飞机
g.drawImage(ap.ap[0], this.getWidth()/20, this.getHeight()-ap.ap_h, ap.ap_h, ap.ap_w, null);
g.drawImage(ap.ap[1], this.getWidth()/15*8, this.getHeight()-ap.ap_h, ap.ap_h, ap.ap_w, null);
}else if(Gamestate==2) {
//画背景
g.drawImage(background, 0, 0, this.getWidth(), this.getHeight(), null);
//画飞机
g.drawImage(ap.ap[fj], ap.ap_x, ap.ap_y, ap.ap_h, ap.ap_w, null);
}
}
//飞机随鼠标移动
public void action() throws InterruptedException {
MouseAdapter m2 = new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
int jx = e.getX();
int jy = e.getY();
ap.moveTo(jx, jy);
System.out.println(jx+","+jy);
}
};
//将鼠标监听器添加到面板
addMouseListener(m2);
addMouseMotionListener(m2);
while(true){
Thread.sleep(100);
repaint();
}
}
}


...全文
526 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
stacksoverflow 2018-06-18
  • 打赏
  • 举报
回复
gs.action();//就是在这里运行方法会出现卡死现象,但我也不知道该怎么改 上面代码开一个线程来执行试试
octopus_yan 2018-06-18
  • 打赏
  • 举报
回复
引用 1 楼 stacksoverflow 的回复:
gs.action();//就是在这里运行方法会出现卡死现象,但我也不知道该怎么改 上面代码开一个线程来执行试试
谢谢,我按照您的方法稍微改了下,问题已经解决了。感谢!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧