`
1025250620
  • 浏览: 229803 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JBOX2D分析

 
阅读更多
近日在研究JBOX2D的游戏引擎,对于这个JBOX2D游戏本身的性能并不作为本文讨论的重点。本文纯属个人观点,非常希望能和一些志同道合的人探讨相同的问题。大家可以上网下JBOX2D的源代码~其实去看源代码~你会发现JBOX2D的源代码写的挺好,而且没有依赖于第三方的包,很多类都非常的原生,本质目的是为了提高jar在java项目中移植性。
首先先看一段代码:
AABB mAABB = null;
World mWorld = null;
Vec2 mGravity = new Vec2(0.0f, 10.0f);
private final static int RATE = 10;;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,WindowManager.LayoutParams. FLAG_FULLSCREEN);
        mAABB = new AABB();
        mAABB.upperBound.set(-100, -100);
        mAABB.lowerBound.set(100, 100);
        mWorld = new World(mAABB, mGravity, true);
    }

这个事基于Android开发的在BOX2D中对世界进行了抽象化,抽象成一个有边界和有重力的实体,为了避免在现实世界和虚拟世界中的单位不匹配,定义了比例尺:RATE 。
我们看看如何在Box2d中的世界中创建一个简单的实体。
一个物体在世界中存在在两个世界,一种在于它存在于这个物质世界,另外他也存在于我们的感官世界。对于整个世界来说物体相对于它只是一个质点,所以这个世界要关心的是它的质点,而对于我们的感官世界来说,物体是有形状,一个物体的形状大小基本可以决定他的质量,而质量相关的就是物体本身的密度属性。
BOX2D也采用了这种抽象:
首先定义这个物体的位置属性:
BodyDef bodyDef = new BodyDef();
    bodyDef.position.set(x/RATE, y/RATE);
这样我们就定义了这个物体在世界中质点属性,但是这个物体还未纳入一个世界的管理,BodyDef 是纯粹的javabean,职责非常本质。
接下来看看他的形状属性:
PolygonDef polygonDef = new PolygonDef();
polygonDef.density = 2.0f;
polygonDef.friction = 0.8f;//摩擦力系数
polygonDef.restitution = 0.3f;//回复力
可见我们探讨的两个物体的本质都有了定义。但是世界中管理的应该是两个物体的本质。为了将两个javabean组合在一起JBox2D中存在了Body这个类。
也就是Body将作为世界的管理的基本单元。
世界将调用Body createBody(BodyDef def)
将把这个body纳入世界队列的管理
返回的是一个没有任何形状的body。因此我们要为他指定一个形状,也就是我们上面定义的PolygonDef 多边形状然后。实际上在为你的body构造形状对象的时候,记录的并不是你的PolygonDef 本身。它被转换成一个
Shape s = Shape.create(def);的Shape对象。就被转换成为基本的图形元素
if (def.type == ShapeType.CIRCLE_SHAPE) {
            return new CircleShape(def);
        }
        else if (def.type == ShapeType.POLYGON_SHAPE) {
            return new PolygonShape(def);
  }
我们看一下PolygonShape这个类:
可以看到PolygonShape这个类里面存在有很多实用的方法
对于每一个形状都会有一个记录数,每创建一个形状都会让这个记录数+1。
Shape获得def传入的各种属性。对于多边形,它记录了多边形的各个点.
在shape中是纯粹的复制属性而不存在def的引用,这么做是有目的的,可以理解为shape是def的一个实例。
在Shape中将记录每个边的单位向量记录在m_normals[]数组中。在Shape中将做一层验证,保证图形是否有重复点,保证图形的逆时针。
并计算他的几何中心放入Vec2 m_centroid中。它主要是将多边形分成三角形计算每一个三角形的几何中心,然后将它们加在一起,然后除以它的总面积。
在shape中ahi用于计算它的边界存在于OBB这个对象中...OBB是计算这个形状的包围盒,因为采用OBB算法所以命名为OBB。以及计算它的边沿




分享到:
评论
1 楼 2006003845 2012-01-18  
请问知道  刚体之间怎么不碰撞嘛 ?相互穿插

相关推荐

    jbox2d 2.1.2 游戏世界实例 android

    《jBox2D 2.1.2:构建Android游戏世界的探索之旅》 jBox2D,一个基于Java实现的Box2D物理引擎的版本,是游戏开发领域中不可或缺的工具,尤其对于2D游戏来说,它能为游戏提供真实且动态的物理效果。在本文中,我们将...

    jbox2d完整例子

    《Jbox2d完整例子解析:游戏引擎与类设计思路》 ...通过学习和分析这个例子,开发者不仅能掌握Jbox2d的基本用法,还能理解游戏开发中的关键设计思想,这对于进一步开发自己的游戏项目具有重要的指导意义。

    Jbox2d齿轮传动源码.rar

    本文将深入探讨"Jbox2d齿轮传动源码"这一主题,分析其核心概念、工作原理以及实际应用。 首先,我们要了解Jbox2d引擎的基础。Jbox2d是基于Box2D的,后者由Erin Catto开发,是一款功能强大的2D物理模拟库,它能够...

    安卓Android源码——基于JBox2D的安卓Android游戏开发全源码.zip

    本资源是关于使用JBox2D库进行安卓Android游戏开发的完整源码,这为我们提供了一个深入理解安卓游戏编程的实践案例。JBox2D是一个基于Java的物理引擎,它是Box2D的Java版本,Box2D是广泛应用于2D物理模拟的开源库,...

    jbox2d 小结

    - 可以利用jbox2d提供的工具或者第三方工具来进行性能分析,例如查看每帧的计算时间、碰撞检测次数等数据。 2. **代码优化**: - 优化物理引擎相关的代码也是提升游戏性能的关键之一。这包括但不限于减少不必要的...

    Android应用源码之JBox2D-src_应用.zip

    总结,JBox2D-src的源码分析对于提升Android开发者在2D物理引擎领域的技能至关重要。通过深入研究源码,开发者不仅可以理解物理引擎的内部机制,还能更好地优化性能,创造出更丰富、更真实的移动应用体验。

    jbox2D源码及在android中的应用

    了解了这些基本概念后,我们转向jBox2D的源码分析。jBox2D的源码结构清晰,易于理解和扩展。主要分为几个模块:基础结构(如几何形状、数学运算)、物理世界、身体和关节、碰撞检测以及固定的更新循环。开发者可以...

    jbox2d愤怒的小鸟游戏源码

    《基于JBox2D的“愤怒的小鸟”游戏源码解析》 在IT行业中,游戏开发是一项富有挑战性和创新性的任务。"愤怒的小鸟"是一款全球知名的休闲游戏,以其独特的物理弹射玩法深受玩家喜爱。本篇将深入探讨一款基于JBox2D库...

    基于JBox2D的Android游戏开发全源码.zip

    本资源提供了一个基于JBox2D库的完整游戏源码,旨在帮助开发者深入理解和实践物理引擎在游戏开发中的应用。JBox2D是Java版本的Box2D物理引擎,它是一个广泛用于2D物理模拟的开源库,特别适合创建具有真实感的动态...

    jbox2d官方文档,包含源码。

    源码分析则能帮助我们理解JBox2D的内部工作原理,对于想要进行自定义扩展或者调试的人来说非常宝贵。你可以看到物理算法的实现,如碰撞检测和解决、积分方法等。 最后,提供的jar包可以直接在项目中引用,方便快速...

    类似与愤怒的小鸟的游戏源码案例-jbox2d

    通过分析和理解这个源码案例,开发者可以了解到如何在Android平台上利用JBox2D实现2D物理游戏。实践中,可以尝试调整参数,改变游戏的难度和趣味性;或者扩展功能,添加新的游戏元素和规则,提高游戏的可玩性。 ...

    Android应用源码之基于JBox2D的Android游戏开发全源码-IT计算机-毕业设计.zip

    - **分析关键代码**: 分析如何初始化JBox2D世界,创建和更新物理对象,以及处理碰撞和渲染。 - **调试与测试**: 运行源码,通过断点调试理解每一步操作的效果。 7. **毕业设计论文撰写** - **背景介绍**: 说明2D...

    JBox2D-src

    五、JBox2D源码分析 压缩包中的"src"文件夹包含了JBox2D的源代码,通过阅读源码,开发者可以深入了解其内部机制,学习如何优化性能、解决特定问题,甚至对库进行扩展和定制。 总结来说,JBox2D为Java开发者提供了一...

    Android 基于JBox2D的Android游戏开发全源码-IT计算机-毕业设计.zip

    《基于JBox2D的Android游戏开发全源码》是一个非常适合Android开发初学者以及毕业设计项目的实践案例。这个源码库包含了一款Android游戏的完整实现,它利用了JBox2D物理引擎来创建真实感的游戏环境。在这里,我们将...

    Android高级应用源码-基于JBox2D的Android游戏开发全源码.rar

    【标题】:“Android高级应用源码-基于JBox2D的Android游戏开发全源码” 这个标题揭示了我们要探讨的核心内容:一个高级Android应用程序的源码,特别的是,它涉及到了游戏开发,而且是基于JBox2D物理引擎。JBox2D是...

    基于JBox2D实现的“雷电”小游戏

    《基于JBox2D实现的“雷电”小游戏》是一个以物理引擎JBox2D为核心技术的游戏开发项目,旨在提供一个学习和实践游戏开发的平台。JBox2D是Java版本的Box2D物理引擎,它是一个广泛用于2D物理模拟的开源库,尤其在游戏...

    基于Java的实例源码-游戏引擎 JBox2D.zip

    本文将深入探讨一个基于Java的开源游戏引擎——JBox2D,通过对提供的源码实例进行分析,揭示其在游戏开发中的应用和原理。 JBox2D是一个Java版本的Box2D物理引擎,它源自C++的Box2D,旨在为2D游戏提供真实的物理...

    Android应用源码之基于JBox2D的Android游戏开发源代码.zip

    通过学习和分析这些源代码,开发者不仅可以掌握JBox2D的基本用法,还能了解到如何在Android环境中集成物理引擎,实现更复杂的游戏机制。此外,这个实例也展示了如何组织代码结构,使其易于维护和扩展。通过实际操作...

    应用源码之JBox2D-src.zip

    本篇将通过分析JBox2D的源码,探讨其核心概念和实现原理。 首先,JBox2D的核心在于其物理世界(World)的构建。在创建一个物理世界时,开发者需要指定重力向量,这是所有物体都将受到的作用力。通过调用`World`类的...

    安卓开发-基于JBox2D的Android游戏开发全源码.zip.zip

    本资源"安卓开发-基于JBox2D的Android游戏开发全源码.zip.zip"提供了一个完整的案例,它使用了JBox2D库来构建Android游戏。JBox2D是Box2D物理引擎的一个Java移植版,广泛用于2D物理模拟,特别适合游戏开发中的碰撞...

Global site tag (gtag.js) - Google Analytics