什么是最有效的加载方式,后来在javascript中引用纹理图块?

时间:2017-01-14 13:02:45

标签: javascript class object pixi.js

最近我开始研究一个简单的平台游戏,作为在javascript中学习pixi.js和面向对象的一种方式。目前,我在文本文件中保存级别,如下所示:

11111111111
10001200001
10601201001
10104001551
13331111111

每个数字对应不同的图块,例如1 =实心,3 =尖峰,5 =开关等

每个磁贴都有自己的,通常是独特的属性,我如何构建我的代码,以便创建和引用磁贴尽可能简单和容易?每个磁贴都应该有自己的构造函数,还是应该创建一个包含大量参数的磁贴?每个渲染块应该是它自己的对象,还是有更简单的方法来引用每个tile?

如果我需要提供更多信息,请务必告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

btw为你的关卡使用ascii字符,它更容易阅读。

就个人而言,我为每个与其他瓷砖差异很大的瓷砖使用了一个类,但是如果你创建一个与另一个相似的 SUPER 的瓷砖,只需要创建一个类似于两者的类,那些类似的图块可以是类扩展。例如,我有一个Enemy类,它有许多子类:敌人类型。我有一个名为Enemy的{​​{1}}子类,它是一个基本的敌人,但我还有一个名为Basic的子类,其射击速度更快。

要读取关卡数据,只需使用开关盒:

Machine_Gun

然后,我的等级可以是这样的:

for(var y = 0; y < levels[level_number]; y++) {

    for(var x = 0; x < levels[level_number][y]; x++) {

        switch(levels[level_number][y][x]) {

            case "#": floor.push(new Floor(x * 20, y * 20)); break;

            case "O": coins.push(new Coin(x * 20, y * 20)); break;

            case "@": player.y = (x * 20) - 1; player.x = (y * 20) - 1; break;

            case "&": monsters.push(new Basic(x * 20, y * 20)); break;

            case "%": monsters.push(new Machine_Gun(x * 20, y * 20)); break;

            default: break; // something else like air.

        }

    }

}

就像那样,你可以轻松创建关卡。