2014-02-11 11 views
0

У меня есть следующий код для игры Phaser. Он просто используется для получения визуальной идеи для уровня, загружая информацию из файла JSON с помощью AJAX.Проблема загрузки активов Phaser из файла JSON

<!doctype html> 
<html> 
    <head> 
     <meta charset="UTF-8" /> 
     <title>hello phaser!</title> 
     <script src="phaser.min.js"></script> 
     <script src="jquery.min.js"></script> 
    </head> 
    <body> 
    <div id="results"></div> 
    <script type="text/javascript"> 



     var game = new Phaser.Game(1024, 768, Phaser.AUTO, '', { preload: preload, create: create,renderer:renderer}); 
     var background; 

     function preload() 
     { 

       game.load.image('bg','bg.png'); 
       game.load.image('mothership', 'bird.png'); 
       game.load.image('turret','turret.png'); 





     } 

     function create() 
     { 
      //game.add.sprite(31,725,"mothership"); 
      //game.add.sprite(100,100,"turret"); 
      //background=game.add.sprite(0,0,"bg"); 
      //background.scale.setTo(5,7); 


     } 

     function renderer() 
     { 

     } 
     $.ajax({ 
         url: "TestFile5.json", 
         dataType: 'json', 
         contentType:"application/json", 
         success: function(response) { 
          //here you can use the response 
           //response can be passed to what ever js file you need. 


           game.add.sprite(response.mothership.posx, response.mothership.posy, "mothership"); 

           game.add.sprite(response.Turret0.posx, response.Turret0.posy, "turret"); 
           game.add.sprite(response.Turret1.posx, response.Turret1.posy, "turret"); 
           game.add.sprite(response.Turret2.posx, response.Turret2.posy, "turret"); 

         }, 
         error: function(response1){ 
           alert('response error') 
         } 
        }); 






    </script> 
</Body> 
</html> 

Я загрузил это на мой интернет-сервер вместе с файлом JSON и изображений, но это, кажется, не загружать изображения с помощью функции game.add.sprite() в функции обратного вызова AJAX. Я получаю экран с изображениями-заполнителями. Позиции правильные, но изображение не загружено. Что может быть причиной этого, и как я могу его исправить?

ответ

0

Проверьте панель инструментов Dev Tools в своем браузере (F12 в IE, ctrl + shift + j в Chrome) и проверьте, что панель Network на 100% уверена, что активы действительно загрузились. Если изображения не загружаются, вы также должны увидеть запись в консоли, так как Phaser выдает предупреждение.

Также стоит упомянуть, что Phaser может загружать файлы json. Таким образом, вы можете начать игру с состояния загрузки, которое загружает json со всеми данными позиции в нем, анализирует его и готов к состоянию игры, которое может использовать значения позиционирования/текстуры внутри него. Тогда у вас не будет никаких потенциальных проблем с возможностями (которые вы, возможно, в конечном итоге здесь).

+0

Можете ли вы привести пример Phaser, загружающего изображение, хранящееся в файле .json, расположенном в папке с активами – user3292309

+0

, также я проверил средства разработки и не выдавал никаких предупреждений или ошибок. Так что код, который я дал, правильный – user3292309

+0

Внутри вашей функции «успех» проверьте, действительно ли изображения загружены и находятся в кеше: game.cache.checkImageKey («турель»). Если ложь, то, вероятно, произошло состояние гонки (завершение ajax до того, как была сделана предварительная нагрузка). Если это правда, я все еще подозреваю проблему с областью. – PhotonStorm

0

Я нашел решение для этого на другом форуме, столкнувшись с этим сообщением, потому что у меня была та же проблема. http://www.html5gamedevs.com/topic/1936-import-files-and-data-json-parser/.

В принципе, мне пришлось использовать метод Phaser game.load.text('assetList','path/to/file.json'), а затем JSON.parse(game.cache.getText('assetList'));, и все начали работать очень хорошо.