【原创】Box2DFlash学习笔记
最近一直没写东西,今天分享学习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学习笔记相关推荐
- [原创]Saltstack学习笔记:命令参数详解以及配置文件说明
很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...
- (原创)c#学习笔记05--变量的更多内容01--类型转换01--隐式转换
第五章 变量的更多内容 本章内容: ● 如何在类型之间进行隐式和显式转换 ● 如何创建和使用枚举类型 ● 如何创建和使用结构类型 ● 如何创建和使用数组 ● 如何处理字符串值 首先要讨论的主 ...
- (原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员
10.3 接口的实现 在继续前,先讨论一下如何定义和实现接口.第9章介绍了接口定义的方式与类相似,使用的代码如下: interface IMyInterface {// Interface memb ...
- 原创Kafka学习笔记,java如何用数组生成随机数
前言 当你准备跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是两个字--凉凉!而在如今的市场,什么多线程.高并发.分布式.负载均衡.集群.微服 ...
- [原创] hadoop学习笔记:wordcout程序实践
看了官网上的示例:但是给的不是很清楚,这里依托官网给出的示例,加上自己的实践,解析worcount程序的操作 1.首先你的确定你的集群正确安装,并且启动你的集群,应为这个是hadoop2.6.0,所以 ...
- (原创)c#学习笔记08--面向对象编程简介01--面向对象编程的含义03--对象的生命周期--构造函数和析构函数...
8.1.3 对象的生命周期 每个对象都有一个明确定义的生命周期,除了"正在使用"的正常状态之外,还有两个重要的阶段: 构造阶段: 对象最初进行实例化的时期.这个初始化过程称为构造 ...
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术05--运算符重载
8.2.5 运算符重载 本书前面介绍了如何使用运算符处理简单的变量类型.有时也可以把运算符用于从类实例化而来的对象,因为类可以包含如何处理运算符的指令. 例如,给Animal添加一个新属性Weigh ...
- (原创)c#学习笔记06--函数02--变量的作用域01--其他结构中变量的作用域
6.2 变量的作用域 在上一节中,读者可能想知道为什么需要利用函数交换数据.原因是C#中的变量仅能从代码的本地作用域访问.给定的变量有一个作用域,访问该变量要通过这个作用域来实现. 在上一节中,读者 ...
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术02--继承
8.2.2 继承 承是 OOP 最重要的特性之一.任何类都可以从另一个类中继承,这就是说,这个类拥有它继承的类的所有成员.在OOP 中,被继承(也称为派生)的类称为父类(也称为基类).注意,C#中的 ...
最新文章
- 从头开始写框架(一):浅谈JS模块化发展
- 关于0bug中一处读者质疑的回复
- 下拉框处理(select)
- GridView的Command命令集合
- 2013多校训练赛第三场 总结
- 判断泛型的值是否为default(T)
- lr_eval_string()使用
- go 连接服务器 并存放图片_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
- oracle10g rac升级到10.2.0.5
- 大数据学习笔记22:MR案例——双MR统计总利润并排序
- Atitit.js javascript的rpc框架选型
- 从零开始实现 AlphaGo(一)
- 【word】批量添加图片题注与批量更新图注
- Pollard Rho算法分解因数
- 010 editor如何复制16进制
- outlook服务器怎么访问文件夹路径,Outlook 2010更改OST存放位置及配置
- golang中关于读写锁、互斥锁的理解
- 服务器设备管理系统,用勤哲Excel服务器实现设备管理系统
- SAP ME架构官网文档学习总结
- 云队友丨张小龙最新公开课:不被看好的事情,才有戏
热门文章
- oppo37位置服务器,oppoa37如何切换存储位置
- costmap代价地图
- Java文件操作源码大全
- 淘宝商品价格计算实例
- 【RabbitMQ 的高可用性——三种模式】
- ValueError: Object arrays cannot be loaded...
- 基于java房屋出租计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
- 保研准备经验贴——18届(2021年)中南计科推免到浙大工院
- JavaSwing+MySQL大学生比赛管理系统
- 英美主要报刊杂志网站大全