0

我使用 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 没有定义。我应该怎么做才能让它工作?

4

2 回答 2

1

我不知道 box2d 但 box2world 确实不存在于该上下文中,除非它是一个全局对象。

我在这里假设您将需要它的命名空间,如果它包含在您在 required.js 依赖项中定义的 box2d 引用中,您可能会使用

new Box2D.b2World(...);
于 2011-12-18T22:25:49.587 回答
0

您应该尝试在 main.js 文件的要求中包含“box2D”。Box2D 将加载为您以后可以使用的全局对象。

require([
  'app',
  'box2d'
], function(app){
     app.init();
});

您不应该在函数中提及它,或者您可以将其列为“忽略”:

require([
  'app',
  'box2d'
], function(app, ignore){
     app.init();

});

在 Chrome 控制台中,您可以键入 Box2D,您应该会看到它作为全局对象弹出。一旦你知道它的全局,你就可以开始使用它了。

然后在 ArenaController 中,您可以在定义数组中列出“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;
    });
于 2013-07-02T15:44:09.050 回答