Java学习进程12
线程游戏的实现 2关于缓冲区经过线程游戏的初步设计直接在窗口分层绘制图像时画面频繁闪烁是因为分层绘图按代码顺序逐次刷新清屏与重绘交替出现形成视觉频闪因此引入图像缓冲区所有图层预先绘制至缓冲画布整帧绘制完毕后一次性输出至窗口解决闪烁问题。1.缓冲初始化所有画面元素都调用 buffG.xxx() 绘制不要用窗口原始画笔g// 创建缓冲图片尺寸与游戏窗口一致BufferedImagebufferedImagenewBufferedImage(800,800,BufferedImage.TYPE_INT_BGR);// 获取缓冲画布画笔所有绘图统一使用 buffGGraphicsbuffGbufferedImage.getGraphics();2.最终统一刷新每一帧末尾// 整帧统一绘制完毕将缓冲图片贴到窗口g.drawImage(bufferedImage,0,0,null);实现背景图片的滚动效果准备两张相同的背景图一张放在可视窗口一张紧贴在第一张图片正上方两张同步向下移动当任意一张图片完全滑出屏幕底部立刻将它挪到另一张图片的头顶循环往复实现无限向下滚动1.设置滚动成员变量// 两张背景图相同publicImageback;publicImageback2;// 背景纵向偏移publicintbgY0;// 滚动速度数值越大滚动越快publicintbgSpeed2;// 窗口宽高和画布一致publicfinalintWIN_HEIGHT800;2.构造器加载背景backnewImageIcon(resources\\Starrysky.JPG).getImage();back2newImageIcon(resources\\Starrysky.JPG).getImage();3.坐标更新// 若暂停游戏不更新角色、子弹位置仍绘制当前画面if(!listener.isPause){bgYbgSpeed;// 图片滑出屏幕底部坐标归零循环if(bgYWIN_HEIGHT){bgY0;}}4.两张图片的拼接// 第一张正常下移buffG.drawImage(back,0,bgY,null);// 第二张紧贴第一张正上方无缝衔接buffG.drawImage(back2,0,bgY-WIN_HEIGHT,null);资源根导入照片项目文件夹 └── src ├── com/xxx/各类Java代码包GameThread、GameUI等 └── resources 【必须新建resources文件夹放在src同级】 └── Starrysky.JPG代码不用写电脑C盘/D盘完整路径使用资源相对根路径publicGameThread(Graphicsg,MPlanemp,ArrayListBulletbullets,GameListenerlistener){this.gg;this.mpmp;this.bulletsbullets;this.listenerlistener;backnewImageIcon(resources\\Starrysky.JPG).getImage();back2newImageIcon(resources\\Starrysky.JPG).getImage();//第二张初始放在第一张正上方bgY0;}实现图片按钮依靠缓冲画布绘制按钮图片配合鼠标监听坐标判断点击区域实现游戏内嵌图片按钮用于开始界面切换游戏画面1.设置按钮相关成员变量// 开始按钮图片对象publicImageIconstartImage;// 按钮绘制范围常量与绘图坐标匹配privatefinalintbtnX200;privatefinalintbtnY600;privatefinalintbtnW200;privatefinalintbtnH100;2.构造器加载按钮图片startImagenewImageIcon(resources\\Start Game Button.PNG);3.画布绘制按钮图片// 在缓冲画布绘制按钮图片确定按钮显示位置与大小buffG.drawImage(startImage.getImage(),200,600,200,100,null);4.鼠标点击坐标判定逻辑// 获取鼠标点击坐标判断是否落在按钮矩形范围内intmxe.getX();intmye.getY();booleanhitBtnmxbtnXmxbtnXbtnWmybtnYmybtnYbtnH;// 仅在开始界面、未创建玩家时点击生效切换游戏画面if(hitBtngt.startmpnull){mpnewMPlane(350,600);gt.setMp(mp);gt.isStart(false);}5.窗口绑定全套鼠标监听// 绑定鼠标移动监听、鼠标点击监听gamePanel.addMouseMotionListener(listener);gamePanel.addMouseListener(listener);添加背景音乐Java原生音频类 Clip 仅支持 .wav 无损音频文件通过自定义音频工具类实现多首音乐自由切换、游戏暂停同步控音功能1.音频资源准备完成后在游戏主线程、窗口类中创建音频对象// 1. 定义背景音乐路径数组String[]musicList{resources/bg1.wav,resources/bg2.wav,resources/bg3.wav};// 2. 创建音频工具对象AudioMusicaudionewAudioMusic(musicList);// 3. 加载并播放第一首audio.loadMusic(audio.currentIndex);audio.playLoop();2.控制音乐切换1键盘按键切换OverridepublicvoidkeyPressed(KeyEvente){// F1切换下一首if(e.getKeyCode()KeyEvent.VK_F1){audio.nextMusic();}}2画面图片按钮切换绘制按钮图片记录按钮坐标范围鼠标点击监听中判断坐标命中则执行切换OverridepublicvoidmouseClicked(MouseEvente){intxe.getX();intye.getY();// 判断是否点击音乐切换按钮区域if(x10x110y10y60){audio.nextMusic();}}3.游戏暂停/继续同步控制音乐if(isPause){audio.stopMusic();// 暂停游戏停止音乐}else{audio.playLoop();// 恢复游戏继续播放音乐}4.在画布绘制文字提示当前播放音乐// g为缓冲画笔buffGg.setColor(Color.WHITE);g.setFont(newFont(黑体,Font.BOLD,30));g.drawString(当前背景音乐第(audio.currentIndex1)首,20,60);

相关新闻

解决 VSCode 插件 Codex 报错:Couldn‘t set up admin sandbox 时把 config.toml 改到 TaoToken

解决 VSCode 插件 Codex 报错:Couldn‘t set up admin sandbox 时把 config.toml 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 2:23:32 阅读更多 →
[已解决]Vscode插件Keil Assistant连接Keil后头文件路径无法寻找:把c_cpp_properties.json改到TaoToken

[已解决]Vscode插件Keil Assistant连接Keil后头文件路径无法寻找:把c_cpp_properties.json改到TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 2:23:32 阅读更多 →
Web框架性能对比:真实业务场景下谁才是最优解?

Web框架性能对比:真实业务场景下谁才是最优解?

1. 对决之前,先把测试环境拉平聊Web框架性能,最容易出现的争议不是某个框架快不快,而是“你测的和别人测的压根不是一回事”。有的人用Hello World压测得出百万级QPS,有的人在完整业务链路里压出几千QPS,结论南辕北辙。…

2026/10/9 2:23:32 阅读更多 →

最新新闻

Java共享自习室系统实战:Spring Boot、MyBatis与座位并发管理

Java共享自习室系统实战:Spring Boot、MyBatis与座位并发管理

简介:基于Java的共享自习室系统是一份面向高校学生和Java初学者的毕业设计完整项目,聚焦自习室预约与资源管理,从用户注册登录、自习室信息维护、预约规则设计到提醒通知均有实现,覆盖需求分析、数据库设计、接口开发、前端交互和…

2026/10/9 3:01:51 阅读更多 →
IP改编剧本生成:深度思考模型提示词工程实战指南

IP改编剧本生成:深度思考模型提示词工程实战指南

简介:本资源是一份面向影视编剧、AI内容创作者及IP开发从业者的专业指南,聚焦深度思考模型(如DeepSeek)在文学、动漫、游戏等IP改编场景中的提示词工程实践。文档系统梳理了提示词设计原则、优化策略、自动化脚本开发、与剧本写作…

2026/10/9 3:01:51 阅读更多 →
Hermes Agent vs OpenClaw 深度对比:架构、记忆、安全与生态选型指南(TaoToken 视角)

Hermes Agent vs OpenClaw 深度对比:架构、记忆、安全与生态选型指南(TaoToken 视角)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 3:01:51 阅读更多 →
Zed 编辑器:当你的光标会「读心术」,还养了一只猫当 UI 设计师——用 TaoToken 统一 Key 打通 Cursor 与 Zed 的 AI 补全

Zed 编辑器:当你的光标会「读心术」,还养了一只猫当 UI 设计师——用 TaoToken 统一 Key 打通 Cursor 与 Zed 的 AI 补全

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 3:01:51 阅读更多 →
starrtc-web私有云部署:WebRTC信令与媒体链路实践

starrtc-web私有云部署:WebRTC信令与媒体链路实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 3:01:51 阅读更多 →
DeepSeek+Coze AI获客智能体实战:从意图识别到工作流编排

DeepSeek+Coze AI获客智能体实战:从意图识别到工作流编排

简介:这份资源围绕DeepSeek与Coze组合,系统讲解从0到1搭建AI获客智能体的完整流程,面向传统行业中小老板、创业者与个人IP、销售运营人员,帮助解决短视频创作与获客难题。内容涵盖智能体定位与目标、业务流程梳理与痛点分析、场景…

2026/10/9 3:00:51 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →