2014-12-31 1 views
5

나는 box2dweb 및 node.js로 게임을 만들었습니다. Box2d를 기반으로하는 Google의 LiquidFun 엔진으로 전환하기 전까지는 모든 것이 제대로 작동했습니다.nodef를 가진 liquidfun 물리 엔진을 포함하는 방법

box2dweb에서 box2d.js 파일 맨 아래에 다음을 추가하여 필요한 모듈을 내보낼 수 있습니다. 컴파일 된 파일에 같은 네임 스페이스 지정을 사용하지 않는

module.exports = { 
    b2Vec2: Box2D.Common.Math.b2Vec2, 
    b2BodyDef: Box2D.Dynamics.b2BodyDef, 
    b2Body: Box2D.Dynamics.b2Body 
}; 

LiquidFun 그래서 시도 : 내가 필요로하는 함수를 내보낼 Node.js를 점점에 운이 없었을

module.exports = { 
    b2Vec2, 
    b2BodyDef, 
    b2Body 
}; 

. 누군가가 LiquidFun을 제대로 내보내는 방법을 알려주시겠습니까?

답변

1

Node.js v0.10.35를 사용하고 디버그 모듈 ("npm install debug"사용)을 설치했습니다. 다음은은 "안녕하세요 LiquidFun"나는 liquidfun.js에 다음 줄을 추가,이 일을하려면 https://google.github.io/liquidfun/Programmers-Guide/html/md__chapter02__hello__box2_d.html

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); 
} 

에서 적응으로, Node.js를 실행으로 liquidfun.js을 테스트하는 데 사용 (I

module.exports = { 
    b2Vec2: b2Vec2, 
    b2BodyDef: b2BodyDef, 
    b2PolygonShape: b2PolygonShape, 
    b2FixtureDef: b2FixtureDef, 
    b2World: b2World, 
    b2_dynamicBody: b2_dynamicBody, 
    setWorld: function(_world){ world=_world; } 
}; 

주 나는 방법 정의 "setWorld (_world)"을 다시 nodejs 스크립트에서 세계 객체를 전달하는 데 사용됩니다 : 위의 프로그램에 모든 생성자 함수를 내보낼 v1.1.0 개발자)를 사용하고 있습니다 이 모듈에. 그 이유는 liquidfun.js가 변수 "world"를 정의해야한다는 것을 발견했기 때문입니다. (예 : b2World 객체), 예제에서는 모듈 외부에서 "world"를 만들었으므로 다시 전달해야합니다. 그것을 작동하게합니다. 또는 liquidfun.js 모듈에서 "world"를 만들고 nodejs 스크립트로 내보낼 수 있습니다.

그런데 시뮬레이션 결과를 보려면 "DEBUG = liquidfun"환경을 설정해야합니다. Windows의 경우 다음을 입력하여 실행하십시오.

set DEBUG=liquidfun & node hello_liquidfun.js 
관련 문제