2011-12-18 2 views
0

Я построил файловую структуру для javascript-игры, используя RequireJs и Backbone. Теперь у меня есть проблема, чтобы объединить его с Box2DWeb.Как объединить Box2dWeb и RequireJs вместе

// 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 не определен. Что я должен сделать, чтобы заставить его работать?

ответ

1

Я не знаю box2d, но box2world действительно не существует в этом контексте, если он не является глобальным объектом.

Я предполагаю здесь, что вы будете нуждаться в его пространстве имен, если он включен в Box2D ссылки вы определили в required.js зависимости можно использовать

new Box2D.b2World(...); 
0

вы должны попытаться включая «Box2D» в требуют вашего файла main.js. 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; 
    }); 
Смежные вопросы