我使用RequireJs和Backbone构建了javascript游戏的文件结构。现在我有问题将它与Box2DWeb结合起来。
// Filename: game/controller/arena.js
define([
'jquery',
'underscore',
'backbone',
'_69_',
'game/controller/object',
'game/model/arena',
'game/view/arena',
'box2d'
], function($, _, Backbone, _69_, Object, Model, View, Box2D){
var ArenaController = Object.extend ({
init : function (){
this._super(Model, View);
this.world = new b2World(
new b2Vec2(0, 10) //gravity
, true //allow sleep
);
this.appView;
this.loops=0;
},
start : function (){
_69_.l('start')
},
update :function (){
_69_.l('update')
},
stop : function (){
_69_.l('stop')
}
});
return new ArenaController;
});
但是在控制台中我得到的是b2World没有定义。我该怎么办才能让它发挥作用?
答案 0 :(得分:1)
我不知道box2d但是box2world确实不存在于该上下文中,除非它是一个全局对象。
我在这里假设您需要它的名称空间,如果它包含在您可能使用的required.js依赖项中定义的box2d引用中
new Box2D.b2World(...);
答案 1 :(得分:0)
你应该尝试在main.js文件的require中包含“box2D”。 Box2D将作为全局对象加载,以后可以使用。
require([
'app',
'box2d'
], function(app){
app.init();
});
你不应该在函数中提及它,或者你可以将它列为“忽略”:
require([
'app',
'box2d'
], function(app, ignore){
app.init();
});
在Chrome控制台中,您可以键入Box2D,您应该会看到它弹出为全局对象。一旦了解了它的全局,就可以开始使用它了。
然后在您的ArenaController中,您可以在define数组中列出“box2d”,但不能在函数中列出:
define([
'jquery',
'underscore',
'backbone',
'_69_',
'game/controller/object',
'game/model/arena',
'game/view/arena',
'box2d'
], function($, _, Backbone, _69_, Object, Model, View) {
var ArenaController = Object.extend ({
init : function (){
this._super(Model, View);
var b2World = Box2D.Dynamics.b2World; //Box2D should be available as a global
this.world = new b2World(
new b2Vec2(0, 10) //gravity
, true //allow sleep
);
this.appView;
}
});
return new ArenaController;
});