Java游戏开发编写源码
本文来源公众号:千问千知(qwqz1000),更多游戏开发源码可关注公众号获取。
关注千问千知,获取Java项目视频。
线程,让游戏拥有了动态变化的能力。
java的图形界面,在启动的时候,就开始了一个线程。
这个线程负责处理:JFrame、JPanel等的绘制、事件处理。
它是由操作系统调用的,在程序启动时开启,程序关闭时消亡。
这个线程里执行的逻辑,支撑着图形框架的基础逻辑,我们无法控制它。
想一下,游戏里那些动画效果、呼啸而出的子弹、飘来飘去的云朵。
这些行为都不是我们用按键和鼠标来控制的,是随着时间自己在动的。
它们在动,说明它们的坐标发生了变化,那么谁来控制这些坐标变化的呢?
答案是:另一个线程!
先看一段线程的代码吧:
package game5;
public class GameThread extends Thread{private GamePanel panel;public GameThread(GamePanel panel){this.panel = panel;}public void run() {while(true){try {//程序运行暂停 0.01秒Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}//循环逻辑的执行panel.logic();//页面刷新panel.repaint();}}}
这就是我们定义的、用来控制游戏动态逻辑的、每隔0.01秒就运行一次的线程!
可以把它想成一个定时器,每隔一段时间,就运行一次某个动作。
运行什么动作呢? 游戏的动态逻辑、游戏界面的刷新!
再贴出剩下的两块代码,如下:
package game5;import java.awt.Color;
import java.awt.Graphics;import javax.swing.JPanel;public class GamePanel extends JPanel{/** 屏幕的宽和高 */private int width,height;public GamePanel(int width, int height) {this.width = width;this.height = height;this.setSize(width, height);//设置当前画布可以获得焦点。this.setFocusable(true);}/**方块的位置*/private int fk_x = 60;private int fk_y = 60;/*** 画布的绘制*/public void paintComponent(Graphics g) {super.paintComponent(g);//画绿色背景g.setColor(new Color(0x9391d6));g.fillRect(0, 0, width, height);//绘制方块g.setColor(Color.red);g.fillRect(fk_x, fk_y, 80, 80);}/*** 游戏逻辑,处理方块的运动,每次横纵坐标都移动1个像素*/public void logic()
{if(fk_x < 260){fk_x = fk_x + 1;}else{fk_x = 60;}if(fk_y < 260){fk_y = fk_y + 1;}else{fk_y = 60;}}}
package game5;import javax.swing.JFrame;public class GameFrame extends JFrame{private int width = 600, height = 400;public GameFrame() {//设置窗体标题this.setTitle("java千锋教育");//创建一个画布GamePanel panel = new GamePanel(width, height);//把画布加入到窗体中getContentPane().add(panel, "Center");//设置窗体大小this.setSize(width, height);//设置能否调整窗体大小this.setResizable(false);//这句会使得在屏幕上居中显示this.setLocationRelativeTo(null);//当关闭窗体的时候退出程序this.setDefaultCloseOperation(EXIT_ON_CLOSE);//把窗体显示出来this.setVisible(true);//开始游戏线程的循环GameThread gt = new GameThread(panel);gt.start();}/*** 主方法*/public static void main(String[] args) {GameFrame frame = new GameFrame();}
}
在游戏界面创建时,我们就创建了游戏线程。游戏界面显示后,游戏线程也随之启动了,然后就不断的调用游戏逻辑、刷新游戏界面。
我们就可以在逻辑方法里进行物体的坐标修改、动画的帧数切换、人物的行为变化、地图的移动等等,游戏线程里这一刻运行的逻辑,影响着下一刻游戏界面上的变化。
上面的三段代码,执行后出现的是,一个方块从屏幕左上角往右下角运动,运动一段后再回到左上角。
最好的学习方法,是实践! 眼过千遍,不如手过一遍!
老老实实的把代码放进Eclipse,执行一遍,看看效果。改改代码,再看看执行效果。
用手写,用眼看,用脑想,缺一不可。
★Java项目实战视频
领取方式:
关注公众号“千问千知”(qwqz1000)
关键词回复:Java项目视频
Java游戏开发编写源码相关推荐
- 雨松MOMO《Unity 3D游戏开发》源码公布
原创文章如需转载请注明:转载自雨松MOMO程序研究院 本文链接地址:雨松MOMO<Unity 3D游戏开发>源码公布 下载源码时,首先大家请登陆图灵社区找到<Unity 3D游戏开发 ...
- 企业级开发的JAVA代码生成器-java快速开发平台源码版
企业级JAVA快速开发平台, 内置代码生成器 -JavaFast官网 项目地址: http://www.javafast.cn JavaFast是一款基于代码生成器的智能快速开发平台,可以帮助解决ja ...
- 超级马力 超级玛丽游戏开发 入门级源码
[实例简介] 我停止这个项目有三个原因; 我必须把精力集中在我的主要项目上.这只是一个有趣的副业. 2)我不愿意为非个人用途而滥用受版权保护的材料,你也不应该. 这次参赛的比赛结束了. 我发布这个项目 ...
- android java代码打印系统日志_Java快速开发平台源码
Java快速开发平台源码 用户权限管理系统源码 一个轻量级的Java快速开发平台,能快速开发项目并交付[接私活利器] 友好的代码结构及注释,便于阅读及二次开发 实现前后端分离,通过token进行数据交 ...
- 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目
课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...
- Java游戏开发《超级玛丽》附课件+源码+资料
<超级玛丽>这款游戏想必大家都玩过,在市面上五花八门的游戏我们眼花缭乱,但是都无法与童年的记忆相比较,经典版的超级玛丽小编觉得是我们00后的童年回忆. 在你的童年记忆里,是否有一个会蹦跳, ...
- 【Java游戏开发】坦克大战(附源码+课件+资料)
本课程讲解了一个坦克大战游戏的详细编写流程,即使你是刚入门java的新手,只要你简单掌握了该游戏所需要的javase基础知识,便可以跟随教程视频完成属于你自己的坦克大战游戏!同时还可以加深和巩固你对面 ...
- 计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...
- 计算机毕业设计Java校园便利店信息系统开发(源码+系统+mysql数据库+Lw文档)
计算机毕业设计Java校园便利店信息系统开发(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java校园便利店信息系统开发(源码+系统+mysql数据库+Lw文档) 开发语言:Java语言 ...
最新文章
- 你写的接口都测试吗?测什么?怎么测?
- TiXml使用详解(转)
- Linux下ps查找进程用kill终止命令
- [POJ2342]Anniversary party(树dp)
- 常见激活函数及其求导相关知识
- php怎么设置网站的字符编码,php如何设置字符编码
- 问一个AddDevice和设备符号链的问题??
- mysql 存储过程 错误码_mysql存储过程中的错误处理_mysql
- 内联函数与宏定义的区别
- javascript函数定义和声明
- 《Python 编程从入门到实践》 ———— Python学习笔记完结篇
- 空气阻力对乒乓球运动轨迹的影响
- 通过Excel对各个商品的销售分析
- 阿里企业邮箱怎么样?
- 制作docker容器镜像
- 使用python实现mysql测试数据的准备(大批量导入数据)
- uniapp微信小程序获取屏幕宽高
- php和mhp,移动蜜罐MHP 的设计和实现
- LINUX学习之了解系统目录结构(一)
- 常用电子元器件简介(转)
热门文章
- Bootstrap的container和container-fluid
- opencv中如何调整图像亮度和对比度,以及亮度和对比度调整的原理
- HTML表单(form)
- 【MQTT基础篇(十)】QoS 服务质量等级
- 企业电子招投标采购系统源码之功能模块功能描述
- cetus权限连接主从mysql_cetus/cetus-rw.md at master · javadoge/cetus · GitHub
- 关于sfdisk分区命令不支持的问题
- 整型数据究竟占多少字节
- Slf4j之MDC应用
- Oracle Spacial(空间数据库)数据模型