如何在动作2中以最小的延迟实现无限/巨大的程序生成世界?例如,像Terraria或Minecraft这样的游戏。处理这样庞大世界的最佳方式是什么?
显然循环遍历每个块并以这种方式移动它们将不起作用。我已经尝试将块放入50x50'块'然后移动每个块,但结果并不像它应该的那样平滑。
如果玩家不在附近,有没有办法完全禁用地图的各个部分?是否可以简单地将它们存储在内存中并在需要时加载它们?
感谢任何帮助,谢谢!
答案 0 :(得分:0)
如果您的游戏主要是基于图块的,也就是说,世界上的基本单元具有相同大小的块,那么将您的世界存储在数组中是最实用的。如下所示的数组可以存储与特定块类型对应的键,而不是手动放置块:
"grass" "grass" "grass" "water" "water"
"grass" "water" "water" "water" "water"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "woods" "woods" "woods"
"grass" "grass" "grass" "woods" "woods"
想象一下,在上面的例子中,玩家一次只能看到9个街区,即
"grass" "woods" "woods"
"grass" "woods" "woods"
"grass" "woods" "woods"
这是世界阵列中第2,2位的玩家。
每当玩家移动时,其相对于阵列的位置分别递增或递减。因此向上移动会将位置值降低到2,1并加载位于更北方的区块。
从数组中,您将检索上面的块是"water" "water" "water"
,并将加载三个water
动画片段。以防万一,this answer显示了如何动态加载动画片段。
此外,快速移动玩家相对于世界,而不是相对于玩家移动整个世界,更改值_root._x
和{{ 1}}。
最后,如果游戏图形过于密集,你是否考虑在“基于房间”的系统上遍历世界,玩家的位置不固定,每隔50个左右就会进入一个新的屏幕块?这很容易减少压力。
AS2非常适合处理您想要快速启动和运行的简单游戏,尽管AS3的性质可能更适合动态加载许多对象。