Проблема с загрузкой ресурсов Phaser из файла JSON

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

<!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. Я получаю экран с изображениями-заполнителями. Позиции правильные, но изображение не загружается. Что может быть причиной этого, и как я могу это исправить?


person user3292309    schedule 11.02.2014    source источник


Ответы (2)


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

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

person PhotonStorm    schedule 12.02.2014
comment
не могли бы вы привести пример того, как Phaser загружает изображение, хранящееся, скажем, в файле .json, расположенном в папке с ресурсами - person user3292309; 12.02.2014
comment
также я проверил инструменты разработчика, и он не выдает никаких предупреждений или ошибок. Так что код, который я дал, правильный - person user3292309; 12.02.2014
comment
Внутри вашей функции "успех" проверьте, действительно ли изображения загружены и находятся в кеше: game.cache.checkImageKey('turret'). Если false, то, вероятно, произошло состояние гонки (ajax завершился до того, как завершилась предварительная загрузка). Если это правда, я все еще подозреваю проблему с областью действия. - person PhotonStorm; 25.02.2014

Я нашел решение для этого на другом форуме, когда наткнулся на этот пост, потому что столкнулся с той же проблемой. 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'));, и все стало работать очень хорошо.

person iamdash    schedule 13.02.2015