Box2D官网 ----> 传送门 http://box2d.org/

Box2D v2.1.0用户手册翻译 ----> 传送门 http://blog.csdn.net/complex_ok/article/category/871440

Libgdx使用jni封装了box2d的c++版本,使得其运行效率比其他同级的物理引擎如jbox2d快不少。

今后我们讨论都是在Libgdx中的Box2D。

一、基础类

Body

A rigid body. These are created via World.CreateBody.

这是一个很坚硬的物体,不要妄想去改变它的形状,我们只能通过World.CreateBody方法来创建它。

BodyDef 

A body definition holds all the data needed to construct a rigid body. You can safely re-use body definitions. Shapes are added to a body after construction.

定义Body所需要的所有数据都由它负责,我们可以重复使用。Shape与Body的绑定必须在它之后完成。

Box2DDebugRenderer

用于测试Box2D的图形显示,会把图形的形状通过不同颜色绘制出来。

ChainShape、CircleShape 、EdgeShape 、PolygonShape 

他们都继承于Shap,是最基本的图形

Fixture

将形状绑定到物体之上, 并有一定的材质属性, 比如密度(density)等。必须由Body.createFixture生成。

FixtureDef

Fixture的属性申明,可重复使用。

World

The world class manages all physics entities, dynamic simulation, and asynchronous queries. The world also contains efficient memory management facilities.

管理所有物理实体,动态模拟,异步查询。还包含高效的内存管理机制。

二、Hello Box2D

我们用到一个Game一个Stage,下面是一个简单的初始化例子。

public class Box2DTestActivity extends AndroidApplication {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initialize(new DemoGame(), true);}public class DemoGame extends Game {HelloBox2D demo1;@Overridepublic void create() {demo1 = new HelloBox2D();}@Overridepublic void render() {demo1.draw();}@Overridepublic void dispose() {demo1.dispose();super.dispose();}}
}

我们主要看Stage是怎么实现的,我们先来定义测试绘制器和一个物理世界

    private Box2DDebugRenderer renderer; // 测试用绘制器private World world;

初始化Stage,为什么是48和80?Box2D的世界中单位都是米,一米大概控制在30像素左右,过大的世界会影响其模拟的准确度。

    public HelloBox2D() {super(48f, 80f, true);......}    

继续初始化变量,设置world参数,9.8是重力加速度,true代表不去模拟已经停止失效的物体。

        renderer = new Box2DDebugRenderer();world = new World(new Vector2(0, -9.8f), true);

再来设计一个会下落的图形——圆,我们把它设为动态物体(动态物体与静态物体在最后显示时颜色是不同的)。

        CircleShape circleShape = new CircleShape();// 创建一个圆circleShape.setRadius(3f); // 设置半径addShape(circleShape, new Vector2(16, 70), BodyType.DynamicBody);

再来设计一个图形——线,设为静态物体。因为我们确定了2点,所以再去设置它的位置就无效了。

        EdgeShape edgeShape = new EdgeShape();// 创建一个边edgeShape.set(new Vector2(5, 35), new Vector2(30, 20));// 设置2点addShape(edgeShape, new Vector2(1, 0), BodyType.StaticBody);

加入到物理世界的方法,body,shape,fixture是相辅相成的。

    public void addShape(Shape shap, Vector2 pos, BodyType type) {BodyDef bd = new BodyDef();bd.position.set(pos.x, pos.y);bd.type = type;Body b = world.createBody(bd);b.createFixture(shap, 1f);}

最后我们需要绘制图像,不断去刷新world,6和2分别为速度、位置模拟的迭代计数。

将世界与相机传入到绘制器中即可。

    @Overridepublic void draw() {Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);world.step(Gdx.app.getGraphics().getDeltaTime(), 6, 2);renderer.render(world, camera.combined);super.draw();}

三、程序截图

四、源代码下载

https://github.com/dwintercode/Box2D.git

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

Android 游戏引擎libgdx之Box2D Hello Box2D相关推荐

  1. android 游戏引擎libgdx demo cuboc分析

    开始学习android游戏开发也有一段时间了,挑选libgdx这个游戏引擎来进行学习和开发.Libgdx是一款支持2D与3D游戏开发的游戏类库,并且它是夸平台的.例如你可以在windos下开发,同样的 ...

  2. libgdx和android界面结合,Android游戏引擎libgdx使用教程5:常用UI类与舞台

    像按钮.下拉框.列表.标签.图片.复选框.编辑框.分割面板.滑动面板.滑动条等都是比较常用的UI类,它们都属于Actor,可以很方便的纳入到舞台的管理中,而且都包含在com.badlogic.gdx. ...

  3. android游戏加载,Android 游戏引擎libgdx 资源加载进度百分比显示案例分析

    因为案例比较简单,所以简单用AndroidApplication -> Game -> Stage 搭建框架 一.主入口,无特殊 public class App extends Andr ...

  4. libgdx和android界面结合,Android游戏引擎libgdx使用教程11:Skin和UI配置文件

    ibgdx的UI改进很大,原来各种稀奇古怪的问题都已经解决了,而且UI的类型也基本上完全了.推荐大家下载最近的版本使用. UI的使用我觉得唯一复杂的就是各种样式的制定,比如TextButton: pu ...

  5. 技术转载:八款开源 Android 游戏引擎 (巨好的资源)

    作者: iamsheldon 链接:http://software.intel.com/zh-cn/blogs/2012/01/13/android-4/ 初学Android游戏开发的朋友,往往会显得 ...

  6. 八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  7. 八款开源Android游戏引擎

    导读:很多初学Android游戏开发的朋友,往往会羡慕iPhone下有诸如Cocos2d-iphone之类的免费游戏引擎可供使用,事实上,Android也有相当数量的游戏引擎存在.下面我罗列出八款常见 ...

  8. Android 游戏引擎汇总

    Android 游戏引擎汇总 1.AndEngine 简介:AndEngine 基于libGDX框架开发,使用OpenGL ES进行图形绘制.同时继承了BOX2D物理引擎,因此能实现一些较为复杂的物理 ...

  9. 八款开源Android 游戏引擎介绍

    http://software.intel.com/zh-cn/blogs/2012/01/13/android-4/?cid=sw:prccsdn2138 初学Android游戏开发的朋友,往往会显 ...

最新文章

  1. php 通过exec 创建git分支失败
  2. 阿里开源了一项自研核心技术 Pouch!
  3. 论文阅读--PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection
  4. 编程之美3.2 电话号码对应英语字母
  5. MOXy的对象图和动态JAXB
  6. centos7下载安装mysql步骤_Linux-centos7安装mysql步骤
  7. Reactor模型和Proactor模型:同步IO与异步IO
  8. 计算机英语微课,【计算机英语论文】大学计算机基础微课设计研究
  9. 小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响...
  10. 什么叫pin脚的pad_超详细的 摄像头PIN脚功能作用
  11. Rendezvous机制完成数据交互。Rendezvous是一个基于—_者一__者模型设计的抽象类。
  12. shell脚本使用两个横杠接收外部参数
  13. (uniapp-快速入门)运行到小程序模拟器微信开发工具
  14. 使用uEdit时,在线管理图片功能不可用
  15. 2GB Turbo Memory(迅盘)开启Dashboard(自定义程序加速)的方法
  16. 【飞秋教程】群聊天/群共享/群日志
  17. NG-ZORRO(0.6.x)的Pagination分页功能
  18. js验证不完全收录(非空,中英逗号,字数限制,特殊字符,密码,用户名,手机号)
  19. SpringBoot之:SpringBoot中使用HATEOAS
  20. Firewalld防火墙基础

热门文章

  1. Java实现对PDF文件添加水印
  2. 我要拿走你的蜡烛 1004
  3. 软件开发环境SDK安装及注意事项
  4. json生成shp_shp与json互转(转载)
  5. python字母表顺序函数_python获取字母在字母表对应位置的几种方法及性能对比较...
  6. 微信小程序请求java后台 springmvc 获取json
  7. java 将json转成utf 8_C# JSON转换以及编码转换
  8. 【Json转换为实体类】
  9. python栈是什么意思_Python实现的栈(Stack)
  10. 高速公路ETC卡签之我见4-卡签结构说明