首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在nodejs中包含liquidfun物理引擎

如何在nodejs中包含liquidfun物理引擎
EN

Stack Overflow用户
提问于 2014-12-31 11:31:52
回答 1查看 1.1K关注 0票数 5

我一直在和box2dweb和node.js做游戏。在我决定改用同样基于Box2d的谷歌LiquidFun引擎之前,一切都运行得很好。

在box2dweb中,我可以通过在box2d.js文件的底部添加以下内容来导出所需的模块。

代码语言:javascript
复制
module.exports = {
  b2Vec2: Box2D.Common.Math.b2Vec2,
  b2BodyDef: Box2D.Dynamics.b2BodyDef,
  b2Body: Box2D.Dynamics.b2Body
};

LiquidFun在编译后的文件中没有使用相同的名称空间,所以我尝试了:

代码语言:javascript
复制
module.exports = {
  b2Vec2,
  b2BodyDef,
  b2Body
};

我没有机会让node.js导出我需要的任何函数。有人能告诉我如何正确地导出LiquidFun吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-02 12:04:35

我使用的是Node.js v0.10.35并安装了调试模块(带有"npm install debug")。下面是我用来测试在Node.js上运行的liquidfun.js的"Hello LiquidFun“,它改编自https://google.github.io/liquidfun/Programmers-Guide/html/md__chapter02__hello__box2_d.html

代码语言:javascript
复制
var lf=require('./liquidfun.js');
var debug=require('debug')('liquidfun');

var gravity = new lf.b2Vec2(0,-10);
var world = new lf.b2World(gravity);
lf.setWorld(world);
var groundBodyDef = new lf.b2BodyDef();
groundBodyDef.position.Set(0,-10);
var groundBody = world.CreateBody(groundBodyDef);
var groundBox = new lf.b2PolygonShape();
groundBox.SetAsBoxXY(50,10);
groundBody.CreateFixtureFromShape(groundBox,0);


var bodyDef = new lf.b2BodyDef();
bodyDef.type= lf.b2_dynamicBody;
bodyDef.position.Set(0,4);
var body=world.CreateBody(bodyDef);

var dynamicBox = new lf.b2PolygonShape;
dynamicBox.SetAsBoxXY(1,1);

fixtureDef = new lf.b2FixtureDef;
fixtureDef.shape = dynamicBox;
fixtureDef.density = 1;
fixtureDef.friction=0.3;
fixtureDef.restitution=0.5;

body.CreateFixtureFromDef(fixtureDef);
var timeStep=1/60;
var velocityIterations=6;
var positionIteration=2;

for (var i=0;i<60;i++)
{   world.Step(timeStep, velocityIterations, positionIteration);
    var position = body.GetPosition();
    var angle = body.GetAngle();
    debug(position.x+" "+position.y+" "+angle);
}

为此,将以下代码行添加到liquidfun.js (我使用的是v1.1.0),以便将所有这些构造函数导出到上面的程序:

代码语言:javascript
复制
module.exports = {
    b2Vec2: b2Vec2,
    b2BodyDef: b2BodyDef,
    b2PolygonShape: b2PolygonShape,
    b2FixtureDef: b2FixtureDef,
    b2World: b2World,
    b2_dynamicBody: b2_dynamicBody,
    setWorld: function(_world){ world=_world;   }
};

请注意,我定义了一个"setWorld(_world)“方法,用于将world对象从nodejs脚本传递回此模块。原因是我发现liquidfun.js需要定义变量"world“(这是一个b2World对象),而在我的示例中,我在模块外部创建了"world”,因此必须回传才能使其工作。或者,您可以在liquidfun.js模块中创建"world“,并将其导出到nodejs脚本。

顺便说一句,提醒您将环境设置为"DEBUG=liquidfun“以查看模拟结果。在windows上,键入以下命令以运行

代码语言:javascript
复制
set DEBUG=liquidfun & node hello_liquidfun.js
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27715782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档