Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 移相器缓存加载问题_Javascript_Phaser Framework - Fatal编程技术网

Javascript 移相器缓存加载问题

Javascript 移相器缓存加载问题,javascript,phaser-framework,Javascript,Phaser Framework,我正在做一个phaser游戏。我正在加载一个背景图像,它的信息文件位置存储在一个JSON文件中。当我尝试加载它时,背景是黑色和空的,在控制台中我得到: Phaser.Cache.getImage:在缓存中找不到密钥背景0 以下是我的代码的相关摘录: function create() { //>Load JSON file and background images found inside the file $.getJSON("levels.json", functi

我正在做一个phaser游戏。我正在加载一个背景图像,它的信息文件位置存储在一个JSON文件中。当我尝试加载它时,背景是黑色和空的,在控制台中我得到:

Phaser.Cache.getImage:在缓存中找不到密钥背景0

以下是我的代码的相关摘录:

function create() {

    //>Load JSON file and background images found inside the file
    $.getJSON("levels.json", function(json) {
        for (var i = 0; i < json.levels.length; i++) {
            game.load.image('background' + i.toString(), json.levels[i].background);
        }
        game.load.start();
   });

    back_layer = game.add.group();
    var i = 0;
    var level_finished = 0;

    $.getJSON("levels.json", function(json) {
        if (i < json.levels.length) {
            console.log("Level " + (i + 1).toString());
            var current_background = back_layer.create(0, 0, 'background' + i.toString());

            check = setInterval(function() {
                if (level_finished == 1) {
                    i++;
                    current_background.destroy();
                    clearInterval(check);
                }
            }, 500)
        }
    });
}

使用Chrome、Firefox和Opera进行测试,每次我打开页面时,似乎都会随机出现错误,或者加载背景并正常工作。我正在使用WAMP在本地托管页面。

在Phaser中加载资产是异步的,如果您在请求加载某个内容后立即尝试访问该内容,它将以这种方式失败。移动预加载逻辑以预加载Phaser的另一个方法。与create-Phaser一样的状态将确保在调用您的create方法时,预加载中请求的所有内容都已加载。

在Phaser中加载资产是异步的,如果您在请求加载内容后立即尝试访问某些内容,它将以这种方式失败。移动预加载逻辑以预加载Phaser的另一个方法。状态与create一样-Phaser将确保在调用您的create方法时,预加载中请求的所有内容都已加载。

Phaser加载资产、JSON、图像、,etc是通过在预加载函数中使用game.load.*API或为此指定的API实现的。在您的情况下,代码应为:

// Use your game instance here
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create });

function preload() {
    // Load JSON file describing the level
    game.load.json('levels', 'levels.json');
}

// The function below will be automatically invoked by Phaser when
// the assets in the preload() function finished loading
function create() {
    var json = game.cache.getJSON('levels');

    // Enque the load of the background images found inside the level file
    for (var i = 0; i < json.levels.length; i++) {
        game.load.image('background' + i.toString(), json.levels[i].background);
    }

    // Specify loadComplete() as a callback to be called when all assets finished loading
    game.load.onLoadComplete.add(loadComplete, this);

    // Load the newly enqued assets
    game.load.start();
}

// The function below will be automatically invoked by Phaser when
// the assets in the create() function finished loading
function loadComplete() {
    var json = game.cache.getJSON('levels');

    back_layer = game.add.group();
    var i = 0;
    var level_finished = 0;

    if (i < json.levels.length) {
        console.log("Level " + (i + 1).toString());
        var current_background = back_layer.create(0, 0, 'background' + i.toString());

        check = setInterval(function() {
            if (level_finished == 1) {
                i++;
                current_background.destroy();
                clearInterval(check);
            }
        }, 500)
    }
}
随机行为有时正常,有时不正常的原因是使用jQuery$.getJSON而不是Phaser内置系统来加载JSON文件


由于jQuery与Phaser无关,因此在调用期间它们既不同步也不排序。因此,有时$.getJSON加载JSON文件的速度足够快,以便在调用Phaser的create方法时准备就绪。在这种情况下,一切都按预期进行。当$.getJSON不够快时,将在加载JSON文件之前调用create,从而导致错误。

加载JSON、图像等资产的Phaser方法是使用预加载函数中的game.load.*API或为此指定的API。在您的情况下,代码应为:

// Use your game instance here
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create });

function preload() {
    // Load JSON file describing the level
    game.load.json('levels', 'levels.json');
}

// The function below will be automatically invoked by Phaser when
// the assets in the preload() function finished loading
function create() {
    var json = game.cache.getJSON('levels');

    // Enque the load of the background images found inside the level file
    for (var i = 0; i < json.levels.length; i++) {
        game.load.image('background' + i.toString(), json.levels[i].background);
    }

    // Specify loadComplete() as a callback to be called when all assets finished loading
    game.load.onLoadComplete.add(loadComplete, this);

    // Load the newly enqued assets
    game.load.start();
}

// The function below will be automatically invoked by Phaser when
// the assets in the create() function finished loading
function loadComplete() {
    var json = game.cache.getJSON('levels');

    back_layer = game.add.group();
    var i = 0;
    var level_finished = 0;

    if (i < json.levels.length) {
        console.log("Level " + (i + 1).toString());
        var current_background = back_layer.create(0, 0, 'background' + i.toString());

        check = setInterval(function() {
            if (level_finished == 1) {
                i++;
                current_background.destroy();
                clearInterval(check);
            }
        }, 500)
    }
}
随机行为有时正常,有时不正常的原因是使用jQuery$.getJSON而不是Phaser内置系统来加载JSON文件


由于jQuery与Phaser无关,因此在调用期间它们既不同步也不排序。因此,有时$.getJSON加载JSON文件的速度足够快,以便在调用Phaser的create方法时准备就绪。在这种情况下,一切都按预期进行。当$.getJSON不够快时,将在加载JSON文件之前调用create,从而导致错误。

我将后台加载逻辑移到了预加载程序中,但我遇到了相同的问题-它有时加载,有时不加载。我将后台加载逻辑移到了预加载程序中,但我也有同样的问题——它有时会加载,有时不会加载。谢谢你的回答,它真的很有帮助!但是,在刷新页面之前第一次运行游戏时,我收到一个错误“Phaser.Loader-active loading canceled/reset”。刷新可以解决此问题,但并不理想。您是否尝试加载示例中提供的资产以外的任何其他资产?这可能是由于在加载其他资产的同时,相位器加载了某些东西造成的。您可以尝试通过在创建函数的开头调用game.load.reset或game.load.resettrue硬重置来阻止警告消息。我正在预加载函数中加载图像。向create函数添加reset不会更改错误。我也有一个错误,桨是未定义的。桨是loadComplete中定义的精灵。但是,当我尝试从更新中访问它时,我得到一个错误,即它未定义。请尝试在示例中声明var游戏的同一范围内声明将由多个函数使用的桨和任何其他var。它应该使所有函数都可以访问变量,并防止您提到的错误。这并没有改变错误,我已经创建了一个新问题来解决这个问题,谢谢您的帮助!谢谢你的回答,真的很有帮助!但是,在刷新页面之前第一次运行游戏时,我收到一个错误“Phaser.Loader-active loading canceled/reset”。刷新可以解决此问题,但并不理想。您是否尝试加载示例中提供的资产以外的任何其他资产?这可能是由于在加载其他资产的同时,相位器加载了某些东西造成的。您可以尝试通过在创建函数的开头调用game.load.reset或game.load.resettrue硬重置来阻止警告消息。我正在预加载函数中加载图像。向create函数添加reset不会更改错误。我也有一个错误,桨是未定义的。垫
le是loadComplete中定义的精灵。但是,当我尝试从更新中访问它时,我得到一个错误,即它未定义。请尝试在示例中声明var游戏的同一范围内声明将由多个函数使用的桨和任何其他var。它应该使所有函数都可以访问变量,并防止您提到的错误。这并没有改变错误,我已经创建了一个新问题来解决这个问题,谢谢您的帮助!