最近一直没写东西,今天分享学习Box2D的学习吧。看的是官方上的用户手册

首先几个基本概念

world ,就是整个物理世界了,是下面所有东西的集合。

rigid body, they are hard like diamonds.也简称body,也就是实际的一个物体。

shape , shape have material properties of friction and restitution.很多物理上的性质都在shape中给予定义。

constraint ,物体之间的限制,joint is a kind of constraint.

joint 很重要,有很多种joint.

然后是一些小细节

Box2D中没有像素的概念,由C++那边移植过来的,默认的长度单位是meter,1meter = 30 pixel;

world要尽可能的大,大的比小的好,如果body到达了world的边界,就会被“冻结”并停止模拟。

Box2D是模拟真实的物理世界,如果质量设置为0,body就为static,碰撞就不会动。

Box2D不会保存shape或者body的定义,它把数据复制给b2Body结构。(就像bitmap和bitmapData)

Integrator simulate the physics equations at discrete points of time.越少的迭代,性能越好,准确性越差。

Body的建立主要是采用工厂模式,Factories do not retain references to the definition.

只介绍一些感觉比较重要的,详细的得看官网的用户手册,下面贴一下我在flex下做的Demo

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"creationComplete="demo()"width="1100"height="600"layout="absolute"><mx:Script><![CDATA[import mx.controls.Image;import mx.containers.Box;import mx.core.UIComponent;import flash.display.Sprite;import flash.events.Event;import flash.utils.Timer;import flash.events.TimerEvent;import Box2D.Dynamics.*;import Box2D.Collision.*;import Box2D.Collision.Shapes.*;import Box2D.Common.Math.*;private var ui:UIComponent=new UIComponent;public var the_world:b2World;private var time_count:Timer=new Timer(500);public function demo():void{//init b2AABBvar environment:b2AABB=new b2AABB();environment.lowerBound.Set(-100.0, -100.0);environment.upperBound.Set(100.0, 100.0);//gravityvar gravity:b2Vec2=new b2Vec2(0.0, 20.0);//init b2worldthe_world=new b2World(environment, gravity, true);the_world.DrawDebugData();var debug_draw:b2DebugDraw=new b2DebugDraw();var debug_sprite:Sprite=new Sprite();debug_sprite.x=50;this.addChild(ui);ui.addChild(debug_sprite);debug_draw.m_sprite=debug_sprite;debug_draw.m_drawScale=40;debug_draw.m_fillAlpha=0.3;debug_draw.m_lineThickness=1;debug_draw.m_drawFlags=b2DebugDraw.e_shapeBit;the_world.SetDebugDraw(debug_draw);var final_body:b2Body;var the_body:b2BodyDef; //bodyDefination,定义了位置the_body=new b2BodyDef();the_body.position.Set(13, 13); //original Positionvar the_box:b2PolygonDef; //shape,定义了形状、摩擦力、密度the_box=new b2PolygonDef();the_box.SetAsBox(8.5, 0.5); //half meterthe_box.friction=0.5;the_box.density=0; //static body ,mass == 0final_body=the_world.CreateBody(the_body);final_body.CreateShape(the_box);final_body.SetMassFromShapes(); //compute massaddEventListener(Event.ENTER_FRAME, on_enter_frame);time_count.addEventListener(TimerEvent.TIMER, on_time);time_count.start();}public function on_time(e:Event):void{var final_body:b2Body;var bodyDef:b2BodyDef;var shape:b2PolygonDef;bodyDef=new b2BodyDef();bodyDef.position.Set(Math.random() * 10 + 6, 0);//矩形shape=new b2PolygonDef();shape.SetAsBox(Math.random() + 0.1, Math.random() + 0.1);shape.friction=0.3;shape.density=1;shape.restitution=0.5;final_body=the_world.CreateBody(bodyDef);//圆形var circleShape:b2CircleDef=new b2CircleDef;circleShape.density=1;circleShape.friction=0.5;circleShape.restitution=0.5;circleShape.radius=Math.random() + 0.1;//三角var triangleShape:b2PolygonDef=new b2PolygonDef;triangleShape.vertexCount=3;triangleShape.density=1;triangleShape.friction=0.5;triangleShape.restitution=0.5;var aaa:Number=Math.random() + 0.1;triangleShape.vertices[0].Set(-aaa, 0.0);triangleShape.vertices[1].Set(aaa, 0.0);triangleShape.vertices[2].Set(0.0, 2 * aaa);var tempN:Number = Math.random();if(tempN <= 0.4){final_body.CreateShape(triangleShape);}else if(tempN >= 0.7){final_body.CreateShape(circleShape);}else{final_body.CreateShape(shape);}final_body.SetMassFromShapes();}public function on_enter_frame(e:Event):void{the_world.Step(1 / 30, 20);for (var bb:b2Body=the_world.m_bodyList; bb; bb=bb.m_next){//可以遍历world中的body}}]]></mx:Script>
</mx:Application>

【原创】Box2DFlash学习笔记相关推荐

  1. [原创]Saltstack学习笔记:命令参数详解以及配置文件说明

    很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...

  2. (原创)c#学习笔记05--变量的更多内容01--类型转换01--隐式转换

    第五章 变量的更多内容 本章内容: ●  如何在类型之间进行隐式和显式转换 ●  如何创建和使用枚举类型 ●  如何创建和使用结构类型 ●  如何创建和使用数组 ●  如何处理字符串值 首先要讨论的主 ...

  3. (原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员

    10.3  接口的实现 在继续前,先讨论一下如何定义和实现接口.第9章介绍了接口定义的方式与类相似,使用的代码如下: interface IMyInterface {// Interface memb ...

  4. 原创Kafka学习笔记,java如何用数组生成随机数

    前言 当你准备跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是两个字--凉凉!而在如今的市场,什么多线程.高并发.分布式.负载均衡.集群.微服 ...

  5. [原创] hadoop学习笔记:wordcout程序实践

    看了官网上的示例:但是给的不是很清楚,这里依托官网给出的示例,加上自己的实践,解析worcount程序的操作 1.首先你的确定你的集群正确安装,并且启动你的集群,应为这个是hadoop2.6.0,所以 ...

  6. (原创)c#学习笔记08--面向对象编程简介01--面向对象编程的含义03--对象的生命周期--构造函数和析构函数...

    8.1.3  对象的生命周期 每个对象都有一个明确定义的生命周期,除了"正在使用"的正常状态之外,还有两个重要的阶段: 构造阶段: 对象最初进行实例化的时期.这个初始化过程称为构造 ...

  7. (原创)c#学习笔记08--面向对象编程简介02--OOP技术05--运算符重载

    8.2.5  运算符重载 本书前面介绍了如何使用运算符处理简单的变量类型.有时也可以把运算符用于从类实例化而来的对象,因为类可以包含如何处理运算符的指令. 例如,给Animal添加一个新属性Weigh ...

  8. (原创)c#学习笔记06--函数02--变量的作用域01--其他结构中变量的作用域

    6.2  变量的作用域 在上一节中,读者可能想知道为什么需要利用函数交换数据.原因是C#中的变量仅能从代码的本地作用域访问.给定的变量有一个作用域,访问该变量要通过这个作用域来实现. 在上一节中,读者 ...

  9. (原创)c#学习笔记08--面向对象编程简介02--OOP技术02--继承

    8.2.2  继承 承是 OOP 最重要的特性之一.任何类都可以从另一个类中继承,这就是说,这个类拥有它继承的类的所有成员.在OOP 中,被继承(也称为派生)的类称为父类(也称为基类).注意,C#中的 ...

最新文章

  1. 从头开始写框架(一):浅谈JS模块化发展
  2. 关于0bug中一处读者质疑的回复
  3. 下拉框处理(select)
  4. GridView的Command命令集合
  5. 2013多校训练赛第三场 总结
  6. 判断泛型的值是否为default(T)
  7. lr_eval_string()使用
  8. go 连接服务器 并存放图片_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
  9. oracle10g rac升级到10.2.0.5
  10. 大数据学习笔记22:MR案例——双MR统计总利润并排序
  11. Atitit.js javascript的rpc框架选型
  12. 从零开始实现 AlphaGo(一)
  13. 【word】批量添加图片题注与批量更新图注
  14. Pollard Rho算法分解因数
  15. 010 editor如何复制16进制
  16. outlook服务器怎么访问文件夹路径,Outlook 2010更改OST存放位置及配置
  17. golang中关于读写锁、互斥锁的理解
  18. 服务器设备管理系统,用勤哲Excel服务器实现设备管理系统
  19. SAP ME架构官网文档学习总结
  20. 云队友丨张小龙最新公开课:不被看好的事情,才有戏

热门文章

  1. oppo37位置服务器,oppoa37如何切换存储位置
  2. costmap代价地图
  3. Java文件操作源码大全
  4. 淘宝商品价格计算实例
  5. 【RabbitMQ 的高可用性——三种模式】
  6. ValueError: Object arrays cannot be loaded...
  7. 基于java房屋出租计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  8. 保研准备经验贴——18届(2021年)中南计科推免到浙大工院
  9. JavaSwing+MySQL大学生比赛管理系统
  10. 英美主要报刊杂志网站大全