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

octopus_yan octopus_yan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我写的是一个仿雷霆战机小游戏,在运行让飞机随着鼠标移动的方法时出现了一点问题。

有大佬帮我看一下如何调用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();
}
}
}


...全文

相关推荐

LightningBoard(雷霆论坛) v0.3.7

霆论坛是用J2EE技术开发的功能强大、扩展性强、易于定制,并且开放源代码的论坛软件。很不错的JSP论坛,速度非常快!

chenxh

JSP 论坛源码下载

一个简易的JSP 论坛。。值得下载共同研究学习

harryailixue

通信行业基于MongoDB的安全合规与性能优化:5G时序数据处理、可查询加密及窗口函数应用

内容概要:本文围绕MongoDB在通信行业的深度应用,系统讲解了可查询加密、时间序列集合、窗口函数与性能诊断四大核心技术。通过详实的代码案例,展示了如何利用可查询加密实现敏感数据合规存储与查询,使用时序集合高效处理5G网络KPI等高频写入场景,借助窗口函数进行经营指标的趋势分析,并结合explain()与查询分析器完成性能调优。文章还涵盖分片一致性检查、索引优化等运维实践,全面覆盖通信系统对安全、性能与扩展性的严苛要求。; 适合人群:具备一定数据库基础,从事通信行业研发、架构或运维工作1-3年的技术人员,尤其是参与5G网络监控、客户数据管理或大数据平台建设的相关人员。; 使用场景及目标:① 实现用户手机号、身份证等敏感信息的加密存储与等值查询,满足安全合规要求;② 构建高吞吐、低延迟的5G基站KPI时序数据存储与分析系统;③ 在数据库层直接完成滑动平均、累计求和等经营分析,减少应用层计算负担;④ 诊断慢查询、验证索引有效性,保障系统高性能运行。; 阅读建议:此资源强调理论与实战结合,建议读者在本地或测试环境部署MongoDB 7.0+版本,动手复现文中代码,重点关注schemaMap配置、时序集合参数选择与窗口函数语法细节,并结合explain执行计划理解底层优化机制,从而真正掌握通信级数据架构的设计精髓。

数智顾问

国央企创新负责人如何借助平台实现技术成果的高价值转化与资源精准配置?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

产业园区运营负责人如何在平台建设中科学配置创新资源,提升园区内技术对接效率?.docx

产业园区运营负责人如何在平台建设中科学配置创新资源,提升园区内技术对接效率?

BIZKEEN
评论 2
收藏 已收藏
分享
返回顶部
octopus_yan
Java SE 62,620 成员 307,251 内容