我想创建一个用户可以转到屏幕最右侧的游戏,如果他们继续前进,他们将会滑入新视图。
所以基本上,如果他们有3个怪物在屏幕#1上追逐它们,并且它们一直向右移动并继续前进,它们将进入屏幕#2,那里将有5个新的怪物和一个新的地形。 / p>
当游戏开始时,我应该立即为每个屏幕初始化所有NPC怪物和地形特征,还是应该在每个屏幕输入时对其进行初始化?什么是存储每个屏幕内容的最佳格式/方式?
答案 0 :(得分:9)
我应该立即为每个屏幕初始化所有NPC怪物和地形特征
你可以,当然没有什么能阻止你这样做:
然而,这取决于你的等级有多大以及在游戏中加载时间和滞后之间的权衡(例如加载下一个屏幕时)。
我建议如下:
创建两个并发运行的线程,一个可以实际玩游戏的线程,另一个负责加载新地形的线程。 gameplay
线程是主线程,当玩家进入下一个屏幕时,它将触发loader
线程加载新的地形数据。
在进入时,请避免加载下一个地形。你应该做的是(对于一个sidescroller),加载一个左边的地形,并加载当前位置右边的地形。这样你不需要一次将整个关卡保留在内存中,同时在进入相邻地形时永远不会陷入延迟。这与第一点非常相配。
这也非常适合你要求让NPC怪物在一个地形中“跟随”你到下一个地形(如果你还没有杀死它们);需要注意的是,如果玩家在没有NPC怪物通过的情况下连续通过两个屏幕,他们就无法进一步追踪你;这就是我玩过多少次侧面滚轮似乎仍在工作。
另请注意,这意味着当您开始关卡时,您必须同时加载2个或3个地形(取决于您是从边缘开始还是从关卡的中间开始),但随后,您将只需要一次加载一个地形,因为你需要做的就是每次玩家前进到下一个地形时将当前的地形换掉相邻的地形
什么是存储每个屏幕内容的最佳格式/方式?
鉴于您选择的平台是Java,我认为持久化级别数据的最有效负载时间方式是序列化。使存储有关级别和对象的信息的类实现Serializable
接口。
如果选择此选项,当您第一次创建关卡时,您可能需要创建特殊方法来对每个关卡的初始化进行硬编码,然后在加载游戏之前对其进行序列化;或者你必须建立一个关卡编辑器。
与反序列化对象相比,此选项可显着增加加载时间,但它更加强大,而且很容易进行更改。如果您的等级不是很复杂,这可能是最好的选择。
事实上,没有什么可以阻止你做两者的结合。