如何在预加载阶段Phaser.js中使用Papa Parse解析csv,而不是异步?

时间:2015-01-05 13:29:19

标签: javascript csv phaser-framework papaparse

我用Phaser.js开发游戏

现在我需要在游戏开始之前解析csv文件,然后使用Papa Parse。 csv文件包含用于Phaser中预加载阶段的图像URL。

我试着这样做:

function preload() {
    Papa.parse("http://localhost:9000/bad_images.csv", {
        download: true,
        complete: function(results) {
            i = 1;
            results.data.forEach(function(entry){
                bad_images.append(entry);
                bad_names.append("b" + i++);
            })
        }
    });

    Papa.parse("http://localhost:9000/good_images.csv", {
        download: true,
        complete: function(results) {
            i = 1;
            results.data.forEach(function(entry){
                good_images.append(entry);
                good_names.append("b" + i++);
            })
        }
    });

    for (var i = 0; i < good_images.length; ++i) {
        game.load.image(good_names[i], good_images[i]);
    }

    for (var i = 0; i < bad_images.length; ++i) {
        game.load.image(bad_names[i], bad_images[i]);
    }
}

但是在那种情况下,函数preload在papa解析csv之前结束,导致它异步。 如何使所有函数按顺序执行,而不是异步?

1 个答案:

答案 0 :(得分:2)

为什么需要同步?

试试这个:

function loadCSV(){
    Papa.parse("http://localhost:9000/bad_images.csv", {
        download: true,
        complete: function(results) {
            i = 1;
            results.data.forEach(function(entry){
                bad_images.append(entry);
                bad_names.append("b" + i++);
            });

            Papa.parse("http://localhost:9000/good_images.csv", {
                download: true,
                complete: function(results) {
                    i = 1;

                    results.data.forEach(function(entry){
                        good_images.append(entry);
                        good_names.append("b" + i++);
                    });

                    startGame(); // Start the game when the load is finished

                }
            });
         }
    });
}

function startGame(){ .... }


function preload() {
    for (var i = 0; i < good_images.length; ++i) {
        game.load.image(good_names[i], good_images[i]);
    }

    for (var i = 0; i < bad_images.length; ++i) {
        game.load.image(bad_names[i], bad_images[i]);
    }          
}