本文来源公众号:千问千知(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游戏开发编写源码相关推荐

  1. 雨松MOMO《Unity 3D游戏开发》源码公布

    原创文章如需转载请注明:转载自雨松MOMO程序研究院 本文链接地址:雨松MOMO<Unity 3D游戏开发>源码公布 下载源码时,首先大家请登陆图灵社区找到<Unity 3D游戏开发 ...

  2. 企业级开发的JAVA代码生成器-java快速开发平台源码版

    企业级JAVA快速开发平台, 内置代码生成器 -JavaFast官网 项目地址: http://www.javafast.cn JavaFast是一款基于代码生成器的智能快速开发平台,可以帮助解决ja ...

  3. 超级马力 超级玛丽游戏开发 入门级源码

    [实例简介] 我停止这个项目有三个原因; 我必须把精力集中在我的主要项目上.这只是一个有趣的副业. 2)我不愿意为非个人用途而滥用受版权保护的材料,你也不应该. 这次参赛的比赛结束了. 我发布这个项目 ...

  4. android java代码打印系统日志_Java快速开发平台源码

    Java快速开发平台源码 用户权限管理系统源码 一个轻量级的Java快速开发平台,能快速开发项目并交付[接私活利器] 友好的代码结构及注释,便于阅读及二次开发 实现前后端分离,通过token进行数据交 ...

  5. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

  6. Java游戏开发《超级玛丽》附课件+源码+资料

    <超级玛丽>这款游戏想必大家都玩过,在市面上五花八门的游戏我们眼花缭乱,但是都无法与童年的记忆相比较,经典版的超级玛丽小编觉得是我们00后的童年回忆. 在你的童年记忆里,是否有一个会蹦跳, ...

  7. 【Java游戏开发】坦克大战(附源码+课件+资料)

    本课程讲解了一个坦克大战游戏的详细编写流程,即使你是刚入门java的新手,只要你简单掌握了该游戏所需要的javase基础知识,便可以跟随教程视频完成属于你自己的坦克大战游戏!同时还可以加深和巩固你对面 ...

  8. 计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  9. 计算机毕业设计Java校园便利店信息系统开发(源码+系统+mysql数据库+Lw文档)

    计算机毕业设计Java校园便利店信息系统开发(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java校园便利店信息系统开发(源码+系统+mysql数据库+Lw文档) 开发语言:Java语言 ...

最新文章

  1. 你写的接口都测试吗?测什么?怎么测?
  2. TiXml使用详解(转)
  3. Linux下ps查找进程用kill终止命令
  4. [POJ2342]Anniversary party(树dp)
  5. 常见激活函数及其求导相关知识
  6. php怎么设置网站的字符编码,php如何设置字符编码
  7. 问一个AddDevice和设备符号链的问题??
  8. mysql 存储过程 错误码_mysql存储过程中的错误处理_mysql
  9. 内联函数与宏定义的区别
  10. javascript函数定义和声明
  11. 《Python 编程从入门到实践》 ———— Python学习笔记完结篇
  12. 空气阻力对乒乓球运动轨迹的影响
  13. 通过Excel对各个商品的销售分析
  14. 阿里企业邮箱怎么样?
  15. 制作docker容器镜像
  16. 使用python实现mysql测试数据的准备(大批量导入数据)
  17. uniapp微信小程序获取屏幕宽高
  18. php和mhp,移动蜜罐MHP 的设计和实现
  19. LINUX学习之了解系统目录结构(一)
  20. 常用电子元器件简介(转)

热门文章

  1. Bootstrap的container和container-fluid
  2. opencv中如何调整图像亮度和对比度,以及亮度和对比度调整的原理
  3. HTML表单(form)
  4. 【MQTT基础篇(十)】QoS 服务质量等级
  5. 企业电子招投标采购系统源码之功能模块功能描述
  6. cetus权限连接主从mysql_cetus/cetus-rw.md at master · javadoge/cetus · GitHub
  7. 关于sfdisk分区命令不支持的问题
  8. 整型数据究竟占多少字节
  9. Slf4j之MDC应用
  10. Oracle Spacial(空间数据库)数据模型