认识Box2D世界
前两天,emanueleferonato在它的博客6周岁之际,发布了自己的Top文章,其中有7篇是关于Box2D的,由此可见Box2D的市场需求是很大的。
作为专业的AS3游戏业余爱好者,我义不容辞的开始学习Box2D,希望能跟大家共同进步。
其实Box2D的教程已经很多了,不过对于我这个菜鸟来说,看着看着就困了,还是按照我菜鸟思路来吧。
首先认识一下Box2D世界——b2world。
b2world是Box2D系统模拟物理世界的核心,可以想象成我们的地球。
地球上有各种不同的物理环境,如水中漂浮的小船,太空中失重的宇航员等等。同样在Box2D世界中也要有一个环境,这在Box2D中用b2AABB类表示,如下:
var b2AB:b2AABB = new b2AABB();
PS:在《Advanced game design with flash》中说过AABB是指Axis-Align-Bounding-Boxes.
现实中的世界是无穷无尽的,但是我们看到的是有限的,所以Box2D中也要限制一下环境的大小,因为我们看到的是有限的嘛!我猜你可能跟我一样,提到到大小想到的是肯定width和height,而Box2D中的大小是通过设置两个对角顶点upperBound和lowerBound实现的,如下图:
代码如下:
b2AB.lowerBound.Set( -100, -100); b2AB.upperBound.Set( 100, 100);
环境设置好了,重力也是少不了的,否则我们就都飘在空中了。同样,Box2D世界中也少不了:
var gravity:b2Vec2 = new b2Vec2(0, 10);
Box2D毕竟只是个物理引擎,我们也要考虑到效率问题,所以对于静止不懂的对象,最好是不要进行模拟计算,节省CPU开支,这种静止的对象在Box2D中叫做”睡着了”哈哈。
var doSleep:Boolean = true;
这样,环境变量设置好后,就可以new出一个Box2D世界了。
var world:b2World = new b2World(b2AB,gravity, doSleep);
但是舞台上还是什么都没有啊!别着急。牛顿不也是因为有苹果在发现的万有引力嘛!我们什么对象都没添加,肯定没有效果啦!
下一节,我们将学习苹果的制作方法!
联系作者
大叔==!你用的Box2d是哪个版本。。。我得去下一个,要跟你的版本一致啊~
PS:要是直接提供个压缩包或者下载链接就更好了~
这篇教程时2.0.1的,后面陆续就换成2.1a了,2.0.1的源码可以在这里下载,http://vdisk.weibo.com/s/6q7_L,后面的教程就都带源码下载了!
我勒个去,你第一章倒是把SDK放出来啊,光告诉new一个word出来了,我去哪new啊少年!
对于我这样一个超级小白来说sdk跟api才是王道啊!
-bylanzhipeng
==!你怎么也来了
哈哈,都来吧,大家一起来学习吧!
已经上传了,其实其他文章里都有上传源码的!
拉登大帝跟着你学学 辛苦了哈
请问所谓AABB即Axis-Align-Bounding-Boxes,怎么翻译成中文
var gravity:b2Vec2 = new b2Vec2(0, 10);里面的参数0 在函数b2World是什么意思?
在现实中重力加速度不是只有一个值吗?
b2Vec2是一个向量,向量是有方向的,现实中的重力是向下的一个值,也是有方向的
拉登兄,为什么是这个
b2AB.lowerBound.Set( -100, -100);
b2AB.upperBound.Set( 100, 100);
而不是这样?
b2AB.lowerBound.Set(0, 0); //左上角
b2AB.upperBound.Set(stage.stageWidth, stage.height); //右下角
请教?
写错了b2AB.upperBound.Set(stage.stageWidth, stage.stageHeight); //这样就没问题了
这么一解释,两个参数的含义就完全明白了。
谢谢你的支持!我的教程已经整理成书并出版,希望你大力支持!谢谢。具体详见链接http://www.ladeng6666.com/blog/2014/11/06/foundation-of-physic-game-design-via-box2d/