对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模型: 在我 ...
随机推荐
- Jquery中attr 和 prop的区别和联系
昨天在选择借款方类型的时候总是会出现选择要点两次的现象,比如点击公司,第一次点击选择公司,没有选中,必须在次点击才可以选中,总感觉是有点延迟加载的意思,后来审查元素, 发现是redio元素,这样的话就 ...
- 关于 ElesticSearch 安装
ElesticSearch windows 下安装步骤 1. 配置 JAVA_HOME 环境变量,因为作者是一个java开发人员,这是基本配置,就不多做赘述 2. 安装ElasticSearch 从官 ...
- Python 之 hello world
写好的内容不小心关机都没了...奈何..重写一遍吧... 本机环境 : windows7 sp1 64位 企业版,python3.6 一:安装与配置 1:首先大胆的下载python,新入门的建议下载3 ...
- .net core 同时实现网站管理员后台、会员、WebApi登录及权限控制
我们在开网站信息系统时,常常有这样几个角色,如后台的管理员,前台的会员,以及我们各种应用的WebAPI 都需要进行登录操作及权限控制,那么在.net core如何进行设计呢. 首先我使用的是.net ...
- C# 处理Word自动生成报告 一、概述
经常遇到这样的需求, 生成Word格式的报告, 而不是单纯的一张表格的报表. 就像体检报告一样. 数据来源部分决定采用一个存储过程返回Dataset的方式, 整张报告的数据来源于此Dataset的多 ...
- canvas图表(3) - 饼图
原文地址:canvas图表(3) - 饼图 这几天把canvas图表都优化了下,动画效果更加出色了,可以说很逼近echart了.刚刚写完的饼图,非常好的实现了既定的功能,交互的动画效果也是很棒的. 效 ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记02
day2课程目录: 操作系统的历史 二进制运算 字符编码与计算机容量 编程语言介绍 开发语言分类 演讲能力锻炼 day2课程内容梳理: 操作系统发展史: Unix系统 极其稳定 现在很多银行还在用 L ...
- Java日志框架那些事儿
文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...
- 后台工作者HangFire与ABP框架Abp.Hangfire及扩展
HangFire与Quartz.NET相比主要是HangFire的内置提供集成化的控制台,方便后台查看及监控,对于大家来说,比较方便. HangFire是什么 Hangfire是一个开源框架(.NET ...
- 常用的redis命令
常用的redis命令 http://www.runoob.com/redis/redis-tutorial.html 菜鸟教程 Cmd连接有密码的redis:$ redis-cli -h ho ...