繁体   English   中英

需要为游戏创建演员动作和动作的重播

[英]Need to create replays of actor movements and actions for game

以下是有关游戏的一些基本知识:

- RTS (Real-time strategy)
- Every object on the game screen is an "actor".
- Every actor has an (x,y) position, HP, and type.
- Works in rounds. Every round, every actor takes one action (move, shoot, build, etc.)

最有效的方式是存储多达5000个回合,每个回合存储的每个演员的位置和相关信息。 我希望能够在各个回合中来回擦洗,并能够调出该回合的演员的相关信息(即特定回合中演员的健康状况)。

我知道如何通过仅将信息写入.txt文件然后从中读取信息(这就是我制作预设图的方式)来做到这一点,但是对于5000次匹配, .txt文件将是巨大的。 人们在游戏开发中有没有更简单的方法来解决这个问题? 我在RTS游戏中经常看到它。

编辑-游戏开始前,所有命令均在游戏开始时给出。 例如,玩家可以命令类似于“如果您是一名战士-每回合-找到附近的敌人,如果无法射击,则向它靠近;如果您在射程内,则向其射击。否则,向南移动。 “ 因此,在第一轮开始后没有输入任何命令。 相反,每个参与者在每个回合中都实现相同的逻辑。

假设没有Database选项,您可以创建toXML()toJSON()方法,该方法为每一轮创建数据的XMLJSON 之后,您必须决定可以将其存储为roundX。 JSON或类似roundXtoY.JSON捆绑roundXtoY.JSON 这取决于数据,但它是文本数据,一次存储100-500(可能更多)回合应该很容易。

使用映射器作为属性名称,例如,写h = 100而不是playerHealth = 100。仅保存更改,静态的不可移动对象(例如石头)不需要5000个条目。 使用LF而不是CRLF。

Veeery简化样本(其中r是圆形,p是玩家,a是动作,Bh是建造房屋):r = 0 [p = 0,x = 100,y = 100,h = 100,a = Bh(101,102), p = 1,x = 105,y = 105,h = 99,a = Bh(106,106)]〜两个角色每个回合的77个字符= 385'000字节。

或:0p0x100y100h100aBh101,102,p1x105y105h99aBh106,106存储相同的信息,需要精美的代码,但对于5000轮来说,只有51字节= 255'000字节,即0.2 MB。 假设您节省的数据量是100播放器的10倍,但仍然只有200 MB。 我猜如果在下一轮之后将其压缩,它将减少到大约10 MB。

如果要使用文本文件而不是二进制数据,也请尝试使用每个字符仅使用1个字节的字符集保存数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM