2015-11-08 77 views
0

我是使用RequireJS加载模块,特别是加载类似CreateJS的库的新手。我想在SoundJS上使用PreloadJS。我通过RequireJS正确加载了SoundJS,到目前为止我没有问题。我遇到的问题是PreloadJS。我用这种方式加载:使用RequireJS加载PreloadJS

require.config(
    { 
    paths : 
    { 
     soundjs : 'core/soundjs-0.6.1.min' 
     , preloadjs : 'core/preloadjs-0.6.1.min' 
    } 

    ,shim : 
    { 
     'preloadjs' : { exports : "createjs" } 
     , 'soundjs' : { exports : "createjs.Sound" } 
    } 
    }); 

require(['src/MainGameScene' , 'src/Runner' , 'core/pixi.js' , 'core/tween.min' , 'preloadjs' , 'soundjs' ] 
, function(MainGameScene , Runner , PIXI, TWEEN , PreloadJS , SoundJS) 
{ 
    console.log("Endless Runner modules loaded."); 

    var screenSize = { width : 960 , height : 500}; 
    var renderer = PIXI.autoDetectRenderer(screenSize.width , screenSize.height); 

    new PIXI.loaders.Loader() 
    .add("_assets/textures/p1_walk/Von.json") 
    .add("_assets/textures/p2_walk/Don.json") 
    .add("_assets/textures/p3_walk/Bon.json") 
    .add("_assets/textures/tiles.json") 
    .add("_assets/textures/textures.json") 
    .once("complete" , 
     function() 
     { 
     var queue = new PreloadJS(); 
     SoundJS.alternateExtensions = ["mp3" , "ogg" , "wav" ]; 
     queue.installPlugin(SoundJS); 
     queue.addEventListener("complete" , onFinishedLoading); 
     queue.loadManifest(
      [ 
      {id : "bgm1" , src : "_assets/bgm/bgm.mp3"} 
      ,{id : "jump" , src : "_assets/sfx/jump.wav" } 
      ,{id : "pickupcoin" , src : "_assets/sfx/pickupcoin.wav" } 
      ]); 
     }) 
    .load(); 

    function onFinishedLoading() 
    { 
    new MainGameScene(renderer , screenSize); 
    } 

    document.body.appendChild(renderer.view); 
}); 

当我运行调试它表明我,PreloadJS对象具有这个特性,我认为这不是PreloadJS的一部分。我还检查了原型是否正确,但我以Object为原型:

noConflict: function() 
parse : function parse() 
runInContext : function a(b, d) 
stringify : function stringify() 
__proto__ : Object 

我还错过了什么?此外,我试图垫片PreloadJS是这样的:

'preloadjs' : { exports : "createjs.LoadQueue" } 
    , 'soundjs' : { exports : "createjs.Sound" } 

但我仍然得到这些属性的对象。我需要RequireJS,所以我可以让我的SoundJS有一个可靠的预加载器。我找不到任何有关RequireJS使用PreloadJS的文章,所以我相信我做错了什么,非传统的和无证的,所以我会很感激任何帮助。

+1

听起来像在PreloadJS中捆绑的JSON类导致了问题。 – Lanny

+0

我现在有这个完全相同的问题。你有没有找到修复程序?如果我找到一个,我一定会在这里发布。 – dudewad

+1

我开了一个问题:https://github.com/CreateJS/PreloadJS/issues/171 – dudewad

回答

3

好吧,它解决了。这并不理想,但preloadjs并不是与AMD一起编写的。 如果你的项目绝对需要你通过凉亭来包含你的依赖关系,或者这可能是次优的,但面对绝对没有其他修复,我很满足于此。

基本上,把你的preloadjs的版本,并包住整个文件中定义()调用:

define(function(){ 
    //Paste the contents of preloadjs here 
    //After all the preloadjs code you need to return the reference to createjs: 
    return this.createjs 
}); 

该版本添加到您的依赖列表,一切都应该正常工作。

+0

匀场解决方案适用于0.4.x,但自0.6.x以来似乎您的解决方案是必要的。不完美,但比没有好。 – Micros