android box2d运行小例子,配置eclipse【转】

转载 2012年03月25日 21:59:17
本文是一篇在android上使用2D物理引擎的入门教程。 
2D物理引擎能增强游戏世界中物体如多边形(箱子,三角形,多边形)的动作的真实感从而提高游戏质量。这个引擎通过用户设定的参数如重力,密度,摩擦,弹性等参数计算碰撞,角度,力和动力等。 
          
引擎 
有很多开源的2d物理引擎,其中最著名的有Box2DChipmunk。这里我们将用Box2D,因为他有更好的性能。很幸运,我们有java版的Box2D库叫做JBox2DJBox2Dprocessing库来处理图像显示,而我们不会在android上用。 
          
文档和导引 


·        
·                Box2D 用户手册 描述了怎样入手这个物理库,解析了基本的原理还包括一些示例源码(强烈建议阅读)
·                Box2D 类参考 
·                JBox2D Wiki 说明了java版和c++版的区别。 




   导入库文件
        让我们把jar文件导入到Eclipse中的当前project
        1.         下载 jbox2d-2.0.1-library-only.jar把它另存为jbox2d.jar 
        2.         Eclipse中新建一个文件夹/lib/ 
        3.         右键单击/lib, 选择Import 
        4.         选择General / File System 
        5.         选择jbox2d.jar的目录
        6.         jbox2d.jar导入进来
        7.         右键单击该工程选择“Properties” 
        8.         点击“Java Build Path” 选择“Libraries” 标签
        9.         点击“Add JARs…” 选择jbox2d.jar 
android box2d运行小例子,配置eclipse【转】 - 逍遥十四少 - 逍遥十四少 
行了,现在我们就可以使用Box2D了,我们还可以引用库文件,如上图所示。
        物理Hello World
        让我们依据Box2D用户手册快速写一个hello world程序,做一下几件事情:
        初始化一个世界(world
        添加一个地面(ground box 
        创建几个动态物体(球)
        模拟这个世界。
        这段代码还没有在屏幕上画任何东西,他只是计算了物理行为打印了一些关于最近添加的元素的日志信息(位置和角度)。
        以下代码只是一个管理物理世界的类,它可以被任何activity实现,update()函数必须被阶段性的调用。
复制代码
  1.  import org.jbox2d.collision.AABB; 
    import org.jbox2d.collision.CircleDef; 
    import org.jbox2d.collision.PolygonDef; 
    import org.jbox2d.common.Vec2; 
    import org.jbox2d.dynamics.Body; 
    import org.jbox2d.dynamics.BodyDef; 
    import org.jbox2d.dynamics.World; 
      
    import android.util.Log; 
      
    public class PhysicsWorld { 
        public int targetFPS = 40; 
        public int timeStep = (1000 / targetFPS); 
        public int iterations = 5; 
      
        private Body[] bodies; 
        private int count = 0; 
      
        private AABB worldAABB; 
        private World world; 
        private BodyDef groundBodyDef; 
        private PolygonDef groundShapeDef; 
      
        public void create() { 
            // Step 1: Create Physics World Boundaries 
            worldAABB = new AABB(); 
            worldAABB.lowerBound.set(new Vec2((float) -100.0, (float) -100.0)); 
            worldAABB.upperBound.set(new Vec2((float) 100.0, (float) 100.0)); 
      
            // Step 2: Create Physics World with Gravity 
            Vec2 gravity = new Vec2((float) 0.0, (float) -10.0); 
            boolean doSleep = true; 
            world = new World(worldAABB, gravity, doSleep); 
      
            // Step 3: Create Ground Box 
            groundBodyDef = new BodyDef(); 
            groundBodyDef.position.set(new Vec2((float) 0.0, (float) -10.0)); 
            Body groundBody = world.createBody(groundBodyDef); 
            groundShapeDef = new PolygonDef(); 
            groundShapeDef.setAsBox((float) 50.0, (float) 10.0); 
            groundBody.createShape(groundShapeDef); 
        } 
      
        public void addBall() { 
            // Create Dynamic Body 
            BodyDef bodyDef = new BodyDef(); 
            bodyDef.position.set((float) 6.0+count, (float) 24.0); 
            bodies[count] = world.createBody(bodyDef); 
      
            // Create Shape with Properties 
            CircleDef circle = new CircleDef(); 
            circle.radius = (float) 1.8; 
            circle.density = (float) 1.0; 
      
            // Assign shape to Body 
            bodies[count].createShape(circle); 
            bodies[count].setMassFromShapes(); 
      
            // Increase Counter 
            count += 1; 
        } 
      
        public void update() { 
            // Update Physics World 
            world.step(timeStep, iterations); 
      
            // Print info of latest body 
            if (count > 0) { 
                Vec2 position = bodies[count].getPosition(); 
                float angle = bodies[count].getAngle(); 
                Log.v("Physics Test", "Pos: (" + position.x + ", " + position.y + "), Angle: " + angle); 
            } 
        } 

    在一个Activity中应用它 
    在一个Activity中实现一个PhysicsWorld类是非常容易的事情,如下所示: 
    [CODE=java] import android.app.Activity; 
    import android.os.Bundle; 
    import android.os.Handler; 
      
    public class Physics extends Activity { 
        PhysicsWorld mWorld; 
        private Handler mHandler; 
      
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            mWorld = new PhysicsWorld(); 
            mWorld.create() 
      
            // Add 50 Balls 
            for (int i=0; i<50; i++) { 
                mWorld.addBall(); 
            } 
      
            // Start Regular Update 
            mHandler = new Handler(); 
            mHandler.post(update)); 
        } 
      
        @Override 
        protected void onPause() { 
            super.onPause(); 
            mHandler.removeCallbacks(update); 
        } 
      
        private Runnable update = new Runnable() { 
            public void run() { 
                mWorld.update(); 
                mHandler.postDelayed(update, (long) (mWorld.timeStep*1000)); 
            } 
        }; 

Box2D例子——弹球

一、直接切入主题,经过上篇的HelloBox2D,大家应该有点概念了。在Box2D的世界里,无非要干以下几件事情: 首先创建一个body定义结构体,用以指定body的初始属性,比如位置或者速度。...
  • linmy1211
  • linmy1211
  • 2014年09月08日 19:19
  • 855

Android 游戏引擎libgdx之Box2D 案例实践——打砖块(一)

参考子龙山人系列博客:http://www.cnblogs.com/zilongshanren/tag/cocos2d/ 此作者都是基于IOS的cocos2D开发,本人参考并且转化为libgdx的c...
  • dyllove98
  • dyllove98
  • 2013年04月18日 20:20
  • 4333

Android 开发环境配置及第一次运行配置 图文教程(jdk+eclipse+android sdk)

原文:http://blog.csdn.net/webrobot/article/details/7304831 一 相关下载 (1) java JDK下载: 进入该网页: http...
  • GeneralYY0
  • GeneralYY0
  • 2013年03月11日 18:22
  • 3173

基于Eclipse平台的Android OpenCV开发环境搭建

基于Eclipse平台的Android OpenCV开发环境搭建 作者:雨水, 日期:2016-1-31,CSDN博客:http://blog.csdn.net/gobitan 摘要:本文主要记录...
  • gobitan
  • gobitan
  • 2016年02月02日 12:49
  • 2327

eclipse里Hibernate配置+最简单小例子

配置没啥好说的,就是添加jar包。       直接上例子吧:     使用工具: Eclipse for JEE版 , SQLServer2000.       Ecl...
  • LanSeTianKong12
  • LanSeTianKong12
  • 2015年06月04日 11:44
  • 1809

eclipse转成Android studio过程中遇到的问题

Android studio使用过程中遇到的问题 问题汇总: 现在最新的Android Studio对以前的基于Eclipse ADT的项目的支持已经很好了,一般情况只需要通过File-> Imp...
  • u011506413
  • u011506413
  • 2016年06月28日 17:30
  • 2453

Box2D例子——打砖块

一个永远反弹的球 这次我们以一个打砖块小游戏展开学习。首先,在上篇的基础上我们做出调整。 world = new World(new Vector2(0, 0f), true); ...
  • linmy1211
  • linmy1211
  • 2014年09月08日 19:15
  • 1059

Android Studio 使用7-Eclipse项目转移到AS项目中

当你开发一个旧的项目时,要将它迁移到AS中是很简单的,比较复杂的部分可能有jar,so,依赖工程等,本文章会以百度地图sdk(Eclipse版)依次进行讲解。 1.下载百度SDK,并导入ecli...
  • sinat_30474567
  • sinat_30474567
  • 2016年08月11日 23:03
  • 651

Android如何运行真机在eclipse上调试应用

主要通过以下几个步骤: 1、手机通过数据线连接在电脑上 2、设置android手机为USB调试模式。步骤: menu—> 设置 —> 应用程序 —> 开发 , 选择【USB调试】 ...
  • chen825919148
  • chen825919148
  • 2013年04月18日 09:45
  • 5306

eclipse运行javaEE工程详细配置过程

所有软件我们都已包含,请选择与自己电脑位数匹配的软件进行安装。 一、安装jdk 1.    双击jdk,一路next 2.    配置环境变量。具体方法: 二、配置eclipse 1. ...
  • lihuozhiling
  • lihuozhiling
  • 2014年05月09日 18:38
  • 2658
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android box2d运行小例子,配置eclipse【转】
举报原因:
原因补充:

(最多只允许输入30个字)