最近我开始研究一个简单的平台游戏,作为在javascript中学习pixi.js和面向对象的一种方式。目前,我在文本文件中保存级别,如下所示:
11111111111
10001200001
10601201001
10104001551
13331111111
每个数字对应不同的图块,例如1 =实心,3 =尖峰,5 =开关等
每个磁贴都有自己的,通常是独特的属性,我如何构建我的代码,以便创建和引用磁贴尽可能简单和容易?每个磁贴都应该有自己的构造函数,还是应该创建一个包含大量参数的磁贴?每个渲染块应该是它自己的对象,还是有更简单的方法来引用每个tile?
如果我需要提供更多信息,请务必告诉我。谢谢!
答案 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.
}
}
}
就像那样,你可以轻松创建关卡。