Java课设总结(个人版)
1.小组博客地址
(https://www.cnblogs.com/fanfaniscute/p/12173375.html)
2.本组课题/本人任务
- 使用物理引擎JBox2D完成游戏关卡的各个物理状态模拟
- 根据物理引擎设计Bird,Pig,Brick等游戏中出现的可运动刚体类
- 建立JBox2d的工具类以实现
本人对这次课设的看法与吐槽
课设内容的脑洞是我在看完17级学长的游戏课设之后想出的
当时还没学java网络编程的内容,误以为java课设只能做游戏(然后一路头铁到底)
在前期准备的时候参考的基础代码和郑老师博客中的参考资料南洋理工Java Game Programming
前者的代码仅使用了碰撞检测,无法对物体的实际运动状态进行模拟
后者使用物理公式模拟了运动轨迹,利用圆的各向性质相同实现了圆形的碰撞后反向运动,而愤怒的小鸟游戏中各向性质相同的物体并不存在
于是当时在前期调查报告中加了这句话
天真的认为物理引擎是简单物理公式/数学公式进行编写碰撞,旋转等操作的代码
下载了一个JBox2D的jar包,找不到文档,就先扔着了(并不知道将要面对什么)
直到发现JBox2D的示例代码也基本没有时,到github下载了源码,才发现自己工作量远超想象
3.物理引擎JBox2D简介/分析
JBox2D是开源的物理引擎Box2D的Java版本
该引擎能够根据开发人员设定的参数,如重力、密度、摩擦系数和弹性系数等,对2D刚体物理运动的全方位模拟
安卓版的愤怒的小鸟也是依赖JBox2D引擎
3.1 JBox2D引擎的主要类
Vec2类 二维矢量
World类 世界
Body类 刚体
BodyDef类 刚体描述
Fixture 夹具
FixtureDef 夹具描述
CircleShape 圆形
PolygonShape 多边形
包含关系
4.JBox2D在本项目的使用
对物理引擎的调用架构参考(CSDN博客)[https://blog.csdn.net/cre2017/article/details/81268995]
该博客使用的JBox2D版本已过时,大部分对物理引擎的调用方法已失效,已通过阅读新版源码的方式修正这些方法
只有球类的自由落体演示,并且作者对Jbox2d方面的内容不再更新
刚体绘制无法进行旋转,自行研究了如何进行刚体随实际运动
但是作为唯一的一份找到的帮助我理解JBox2D引擎的代码,对作者还是十分感谢
Conf类:配置参数
存储构建世界/画布时使用的常量
抽象类MyFrame 继承自JFrame
属性:
AABB aabb //规定世界范围
World world //模拟的物理世界
ArrayList
MyBody类
DrawThread类 继承自Thread
绘制线程,同步启动鼠标监听器
Gview 类 继承自JPanel
设置背景,启动绘制线程
Box2dUtil类
根据JBox2d引擎进行Body的组装
MymouseListener类
根据鼠标点击创建并发射bird类
MyBrickBody类
矩形刚体及绘制方法
MyCircleBody类
圆形刚体及绘制方法
Bird类 继承自MyCircleBody
设置图片与hp
Pig类 继承自MyCircleBody
Wall类 继承自MyBrickBody类
Brick类 继承自MyBrickBody类
5.存在的问题
对物理引擎的理解仍然不够深入,部分操作短时间内不能实现
存在无法无法解决的bug,github上已经开源的代码与依赖jar包版本不匹配,对问题发生处朔源失败
课设时间(一周)实在太短,只完成了勉强能动的游戏内容