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 ファイルの require に「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 に答える