对jbox2d引擎的一些回顾与思考(swing实现demo)
JBox2d回顾与思考
jbox2d 是 box2d 的java移植,感觉国内网络上针对jbox2d的教程还比较少(通常是box2d)。回顾一下这几天的学习历程顺便写下博主的所思所想。
swing实现的demo
关于jbox2d,网上大部分都是android的实现,这里提供一个博主写的基于swing的实现,下面是github地址
大概是下面这个样子。点屏幕创建自由下落的小球

使用jbox2d的基本步骤:
- 创建世界(同时设置重力)
- 创建刚体
- 开始模拟
创建世界
World world = new World(new Vec2(0f,-10f));
Vec2(0f,-10f) 是重力,jbox2d里面的二元属性通常使用向量Vec2表示
需要注意的是-10,负号表示向下,这里可以看出jbox2d的坐标系跟数学物理坐标系是一致的
所以,坐标(0,0)在坐标(0,10)的正下方10米处
我用到了米这个单位,是因为在jbox2d里基本单位为:米,千克,秒
创建刚体
步骤如下:
- 定义刚体
质点属性(位置,状态) - 通过世界和步骤1的定义创建一个刚体
- 为刚体添加
内部属性(摩擦力,密度,弹性等)
定义刚体质点属性(位置,状态)
BodyDef bd = new BodyDef();
//设置bd属性...
BodyDef 代表刚体的质点属性,质点,是因为在牛顿力学里,为了研究方便,大多数物体都可以用一个点和它的质量来表示.jobx2d作为一个物理引擎,引用物理学的定义是必然的.所以刚学的时候可能会觉得步骤太过繁琐,可是我们应该理解它为什么要这样做.
BodyDef 内含常用的属性有:
position 位置
angle 角度
type 类型(static,dinamic,kinematic)
通过世界和步骤1的定义创建一个刚体
Body ball = world.createBody(bd)
先保留一个ball的引用,因为后面需要设置内部属性
设置刚体内部属性
FixtureDef fd = new FixtureDef();//创建一个夹具,代表刚体的内部属性
//设置夹具属性...
ball.createFixture(fd);//将夹具与ball挂钩
夹具FixtureDef的常用属性有:
shape 形状
density 密度
friction 摩擦系数
restitution 恢复系数
开始模拟
world.step(1f/30f,6,6);
为什么通过设置timeStep可以实现慢放快放呢?
关于第一个参数timeStep,我的理解是,每次调用step,模拟box2d世界中的1/30秒
假设程序每秒30帧,每一帧调用一次step,一秒也就是30帧过后,box2d的物理世界也刚好过了1/3030 == 一秒。
那么,如果我改成1f/60f,会怎么样呢?
一秒三十帧后,调用了30次step,而jbx2d物理世界里只过了1/6030 == 0.5秒.也就是说原本可以走10米的一个小球,可现在只走了5米,在我们看来就产生了慢放镜头。
以上就是我对jbox2d的一些理解
对jbox2d引擎的一些回顾与思考(swing实现demo)的更多相关文章
- JAVA SE回顾及思考(3)——排序算法
排序的算法是很多公司的笔试和面试题,个人感觉Java中其实无需使用这些排序方法,因为Java中已经为我们提供了很方便效率很高的sort()方法.但是不使用不能代表不需要学习这些算法,也不是仅仅为了面试 ...
- JAVA SE回顾及思考(1)——面向对象的特点
学习Java已经三年了,现在开始做Android开发,虽说还在用Java语言但本人现在才真真的意识到无论学什么基础才是最重要的,可能一些刚接触Java或者Android的朋友现在还体会不到基础的重要性 ...
- JAVA SE回顾及思考(2)——数组的复制与动态扩展
我们知道在Java中数组是非基本类型既数组是对象(Object)的子类,所以用下面的这种方式是不能复制该对象的 public static void main(String[] args) { int ...
- Unity5.1 新的网络引擎UNET(二) UNET 官方推荐Demo案例
http://blog.csdn.net/u010019717/article/details/46873153 视频 http://www.iqiyi.com/playlist391685502.h ...
- 从0开发3D引擎(十):使用领域驱动设计,从最小3D程序中提炼引擎(上)
目录 上一篇博文 下一篇博文 前置知识 回顾上文 最小3D程序完整代码地址 通用语言 将会在本文解决的不足之处 本文流程 解释本文使用的领域驱动设计的一些概念 本文的领域驱动设计选型 设计 引擎名 识 ...
- 如何一步一步用DDD设计一个电商网站(十四)—— 回顾与总结
本系列所有文章 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念 如何一步一步用DDD设计一个电商网站(二)—— 项目架构 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域 如 ...
- 自制window下core animation引擎 - demo第二弹 - 仿QQ电脑管家加速小火箭
一年前想写一个像cocoa那样,可以方便层动画开发的引擎,写着写着又逆向它的QuartzCore.framework,也就是CoreAnimation的底层,已经大半年没有搞windows这个引擎.大 ...
- windows下自制动画层引擎 - 放两个demo
一年前想写一个像cocoa那样,可以方便层动画开发的引擎,写着写着又逆向它的QuartzCore.framework,也就是CoreAnimation的底层,已经大半年没有搞windows这个引擎.大 ...
- MySQL数据分析-(15)表补充:存储引擎
大家好,我是jacky,很高兴继续跟大家分享<MySQL数据分析实战>,今天跟大家分享的主题是表补充之存储引擎: 我们之前学了跟表结构相关的一些操作,那我们看一下创建表的SQL模型: 在我 ...
随机推荐
- Dijkstra算法(Swift版)
原理 我们知道,使用Breadth-first search算法能够找到到达某个目标的最短路径,但这个算法没考虑weight,因此我们再为每个edge添加了权重后,我们就需要使用Dijkstra算法来 ...
- 很考验人的java内存加载面试题
源代码如下,求结果 public class MemoryAnalyse { public static int k = 0; public static MemoryAnalyse t1 = new ...
- .net core2.0下使用Identity改用dapper存储数据
前言. 已经好多天没写博客了,鉴于空闲无聊之时又兴起想写写博客,也当是给自己做个笔记.过了这么些天,我的文笔还是依然那么烂就请多多谅解了.今天主要是分享一下在使用.net core2.0下的实际遇到的 ...
- 前端使用d3.js调用地图api 进行数据可视化
前段时间自己研究了demo就是把某个区域的某个位置通过经纬度在地图上可视化.其实就是使用了第三方插件,比现在比较火的可视化插件d3.js echart.js.大致思路就是,把要用到的位置的geojso ...
- Ambari Auto Start(进程自动拉起)
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/7886850.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...
- Spring4 IOC详解
Spring4 IOC详解 上一章对Spring做一个快速入门的教程,其中只是简单的提到了IOC的特性.本章便对Spring的IOC进行一个详解.主要从三个方面开始:基于xml文件的Bean配置,基于 ...
- 记录项目版本升级angular4 ~ angular5
前言: 在上一篇ng4文章<angular4--实际项目搭建总结>中说过,等到ng5正式发布,并且蚂蚁的NG ZORRO兼容ng5之后,我会对ng4项目进行升级.这篇文章就是大概说下升级的 ...
- Jersy、Jetty和Servlet
1.Jersy框架 Jersey RESTful WebService框架是一个开源的.产品级别的JAVA框架,是JAX-RS的参考实现.Jersey提供自己的API,其API继承自JAX-RS,提供 ...
- Yahoo网站性能优化的34条军规
1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容,这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数,这是提高网页速 ...
- tp的秘密
入口文件index.php define('APP_DEBUG',True); 改为false* memory_get_usage 获取本套系统目前内存* tp框架中ThinkPHP\Library\ ...