• 对jbox2d引擎的一些回顾与思考(swing实现demo)


    JBox2d回顾与思考

    jbox2d 是 box2d 的java移植,感觉国内网络上针对jbox2d的教程还比较少(通常是box2d)。回顾一下这几天的学习历程顺便写下博主的所思所想。

    swing实现的demo

    关于jbox2d,网上大部分都是android的实现,这里提供一个博主写的基于swing的实现,下面是github地址

    点我

    大概是下面这个样子。点屏幕创建自由下落的小球

    jbox2demo

    使用jbox2d的基本步骤:

    1. 创建世界(同时设置重力)
    2. 创建刚体
    3. 开始模拟

    创建世界

    World world = new World(new Vec2(0f,-10f));
    

    Vec2(0f,-10f) 是重力,jbox2d里面的二元属性通常使用向量Vec2表示
    需要注意的是-10,负号表示向下,这里可以看出jbox2d的坐标系跟数学物理坐标系是一致的
    所以,坐标(0,0)在坐标(0,10)的正下方10米处
    我用到了米这个单位,是因为在jbox2d里基本单位为:,千克,

    创建刚体

    步骤如下:

    1. 定义刚体质点属性(位置,状态)
    2. 通过世界和步骤1的定义创建一个刚体
    3. 为刚体添加内部属性(摩擦力,密度,弹性等)
    定义刚体质点属性(位置,状态)
    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/60
    30 == 0.5秒.也就是说原本可以走10米的一个小球,可现在只走了5米,在我们看来就产生了慢放镜头。

    以上就是我对jbox2d的一些理解

  • 相关阅读:
    MyCat清单
    Nginx整合Tomcat
    Nginx安装与配置
    Spring清单
    Shiro清单
    Dubbo清单
    MyBatis清单
    查询数据库的编码
    myBatis
    面试
  • 原文地址:https://www.cnblogs.com/uturobako/p/jbox2d.html
Copyright © 2020-2023  润新知