有谁知道战地4引擎用的物理引擎是什么

游戏开发中使用物理引擎box2d - 熊滔 - ITeye技术网站
博客分类:
本文基于JBox2d+canvas,后续提供NDK+openglEs版本;
本文的主要目的是给大家介绍如何使用创建一个物理世界,本文为基本入门教程.
一、主函数:
主函数包括了Box2D的基本流程
简单来说,一个Box2D程序的基本流程是由以下三个基本步骤构成的:
function box2dMain() {
setupWorld();
addBodys();
setInterval(step, 1000/60);
二、创建世界:
设定世界有效区域的大小:超过有效区域的物体将不参与计算。
定义重力:重力是一个二维矢量,矢量在Box2D中用b2Vec2来定义。
设定是否允许物体休眠:当物体静止下来,它就会被判定为休眠,如果打开这个开关,对于休眠的物体将停止模拟。直到它被其它物体解除,它才会醒来。
function setupWorld(){
worldAABB = new b2AABB();
worldAABB.minVertex.Set(-1000, -1000);
worldAABB.maxVertex.Set();
gravity = new b2Vec2(0, 300);
var doSleep = true;
var world = new b2World(worldAABB, gravity, doSleep);
三、创建物体:
形状定义:Box2D中有三种基本形状,圆形(Circle)、矩形(Box)、多边形(Poly)。每个形状可以单独定义摩擦力、弹性、密度、相对位置等参数。形状是组成物体的基本材料。(当物体的密度设定为0时,物体变为墙类物体,不可移动)
物体定义:物体可由多个形状组成。形状由其定义相对位置(localPosition)决定其在物体中的位置,形状添加到物体后,其相对位置始终保持不变。
物体:物体只有使用世界的CreateBody()来生成,物体是物体定义的实例。只有使用这个函数生成的物体,才会在世界中被模拟。
function addBodys(){
var Shape1 = new b2CircleDef();
Shape1.radius = 20;
Shape1.localPosition.Set(0, 0);
Shape1.density = 1.0;
Shape1.restitution = .3;
Shape1.friction = 1;
var Shape2 = new b2PolyDef();
Shape2.vertexCount = 3;
Shape2.vertices[0] = new b2Vec2(0,-20);
Shape2.vertices[1] = new b2Vec2(23.10,20);
Shape2.vertices[2] = new b2Vec2(-23.10,20);
Shape2.localPosition.Set(0, 30);
Shape2.density = 1.0;
Shape2.restitution = .3;
Shape2.friction = 1;
var BodyDef1 = new b2BodyDef();
BodyDef1.position.Set(100, 100);
BodyDef1.AddShape(Shape1);
BodyDef1.AddShape(Shape2);
Body = World.CreateBody(BodyDef1);
var Shape3 = new b2BoxDef();
Shape3.extents.Set(200, 5);
Shape2.density = 0;
Shape2.restitution = .3;
Shape2.friction = 1;
var BodyDef2 = new b2BodyDef();
BodyDef2.position.Set(220, 500);
BodyDef2.AddShape(Shape3);
Body2 = World.CreateBody(BodyDef2);
四、让世界运动起来:
step()函数的作用是计算某段时间后,世界中物体的位置和角度,并将其绘制到浏览器中。
计算机中的动画,是一帧一帧构成的,每一帧表现了动画中某一时刻的一个场景。所以我们使用定时器函数setInterval(step, 1000/60),来每1/60秒执行一次计算和重绘工作,也就是上述的step()函数。
step()中的dt参数,告诉了计算机要计算当前时间多少秒以后的世界,Box2D官方推荐为1/60秒,当然,如果你的计算机足够快,缩小这个时间间隔。另外dt应该与setInterval()函数中的第二个参数对应起来,这样才不会导致物体看起来运动的比你想像的要快或者慢。还有一点,dt不宜过大,否则模拟会不太精确,可能出现物体穿过另一个物体之类的bug。
step()中的iterations参数,是多个物体同时发生碰撞时的模拟精度,越高的值会使模拟越精确,但同时也会让运算速度大幅下降,推荐值为10。
step()中的World.step()函数是用来计算世界中物体的位置,执行后,物体的位置、角度、速度等信息更新。;
step()中的drawWorld()函数会将物体绘制在浏览器中。
function step(){
var dt = 1/60;
var iterations = 10;
World.step(dt,iterations);
drawWorld();
五、绘制世界:
一般情况下我们只利用box2d提供物理模拟,具体世界的绘制工作自己实现。具体绘制方式opengl,canvas,etc。
function drawWorld(){
context.clearRect(0, 0, canvasWidth, canvasHeight);
for (var b = World.m_bodyL b = b.m_next) {
for (var s = b.GetShapeList(); s != null; s = s.GetNext())
this.drawShape(s);
function drawShape(shape){
context.strokeStyle = '#000';
context.beginPath();
switch (shape.m_type) {
case b2Shape.e_circleShape:{
var circle =
var r = circle.m_
var pos = circle.m_
var pos2 = circle.m_R.col1.clone().scale(r).add(pos);
context.arc(pos.x, pos.y, r, 0, Math.PI * 2, false);
context.moveTo(pos.x, pos.y);
context.lineTo(pos2.x, pos2.y);
case b2Shape.e_polyShape:{
var poly =
var tV = b2Math.AddVV(poly.m_position,
b2Math.b2MulMV(poly.m_R, poly.m_vertices[0]));
context.moveTo(tV.x, tV.y);
for (var i = 0; i & poly.m_vertexC i++) {
var v = b2Math.AddVV(poly.m_position,
b2Math.b2MulMV(poly.m_R, poly.m_vertices[i]));
context.lineTo(v.x, v.y);
context.lineTo(tV.x, tV.y);
context.stroke();
熊滔爱孟涛静
浏览: 74841 次
来自: 深圳
楼主,你能否写一个 int类型的一维数组的结构体?
刚好找第二种,其他地方全是第一种。
我们是可以把不同分辨率的图片放到不同的图片文件夹中去,问题是: ...
学习了,Mark史上物理引擎最真实的游戏 | Geek笑点低小组 | 果壳网 科技有意思
1099733人加入此小组
我先暂停笑一下。。看完完全不懂在干什么。。但我快笑出腹肌啦有木有!!(友情提示:不要在喝水吃饭吃东西时看本视频)
+ 加入我的果篮
这是神马游戏?这么多bug?
引用 的话:这是神马游戏?这么多bug?Xbox的Skate3。。以bug多闻名于世。。。。于是这是个bug集锦。。。。。。。。。第三季。。。之前的可以从B站搜。。
引用 的话:Xbox的Skate3。。以bug多闻名于世。。。。于是这是个bug集锦。。。。。。。。。第三季。。。之前的可以从B站搜。。好吧~这游戏是让人捉bug玩的么?
资深美食达人
卧槽。。。。。。我已经笑晕过去了。。。。
引用 的话:卧槽。。。。。。我已经笑晕过去了。。。。这绝逼是疼讯的CF部门开发的
资深美食达人
引用 的话:这绝逼是疼讯的CF部门开发的我已经笑屎了,我的肚子在抽筋啊啊啊啊啊啊啊啊
引用 的话:卧槽。。。。。。我已经笑晕过去了。。。。我已经饿死了·
资深美食达人
引用 的话:这绝逼是疼讯的CF部门开发的引用 的话:我已经饿死了·你们一点都不好玩,哼!
阵亡........
妈的笑到肚子痛了啊!同事还问我怎么了要不要吃点止痛药什么的
物理碰撞框木有拉好的悲剧。。
看到标题就有种不想的预感……哈哈哈
什么啊,完全看不懂 = =
容差............................................的奇幻之旅
泥垢了。。。为什么要放弃治疗?
先触电抖个不停,撞墙后掉下去再爬箱子里出不来,头接着被塞在垃圾筐里,接着是一串足球?接着撞架子,肘部骨折再度触电。。。陷到棚子里,一个人在广场上跳机械舞?瓶子还在空中绕手转圈。。。笑够了不说了。。。
物理引擎。。。尼玛这化学引擎吧。。。
我想起了crysis一代里那些射击几千油桶的视频
.......娱乐至死
笑出大姨妈了
额,没人觉得3:30的那个,猪脚一脸平静,但是双手却被奇怪的扭曲到背后的样子很恐怖??
笑尿了~~哈哈哈
QWOP完爆之
好久没那么笑过了不过游戏碰撞系统真心牛
哪位给贴个非flash的地址啊,看不了
笑得一脸泪啊
果然真实,真实到毫无PS痕迹。
EA Games是最傻的游戏公司……终于把《植物大战僵尸2》也毁了……
引用 的话:这绝逼是疼讯的CF部门开发的这貌似是EA的哦~~~但咱可以高呼一句 这游戏抄袭我大cf
似乎是建模限位没做好?
这是什么游戏?
资深美食达人
引用 的话:这是什么游戏?skate3卧槽,我已经看了第四次了,整个人都被笑坏了,哈哈哈哈哈~~~
全程笑喷...
看你们的评论我就笑了……
游戏策划,兵器爱好者
这东西貌似啥上面都有,而且光环还特意开了个本周特臭~各种飞人和被砸死云云。
为什么我要在睡前看这个〒_〒 我都已经笑哭了
引用 的话:skate3卧槽,我已经看了第四次了,整个人都被笑坏了,哈哈哈哈哈~~~主角形象是自定义的还是永远是这个达能王子饼干?
这不应该是是块板就能飞和高空坠落技巧以及各种穿墙遁地术游戏嘛
身坚志残好少年,各种体位作大死……
手机党留名
手机党留名
引用 的话:物理引擎。。。尼玛这化学引擎吧。。。化学引擎+1
是个板就能飞。。。
感觉这个游戏就是没加入重量的判断。。。。任何物体都没有重量的概念。。如果加入这个应该还是比较好玩的。。。大型的物理游戏都没啥
(C)2016果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
坦克世界物理引擎是什么?
简单地说,就是让游戏里面一些事物更贴近真实的世界.比如现在撞车,即便是老鼠撞上了早期实验车也只能是损血,物理引擎则可以体现出撞开甚至撞飞的效果;还有开车速度太快下坡的时候可能会出现飞跃等等.
为您推荐:
其他类似问题
好像就是用软件的参数把现实中或者需要表达的物理参数表达出来,之后建成一个系统,这个系统,就是物理引擎。
扫描下载二维码

我要回帖

更多关于 cocos2dx 物理引擎 的文章

 

随机推荐