假设我正在制作一个游戏,其中屏幕在帧速率限制内尽可能频繁地更新,但对象仅在游戏时钟上更新。如何在不冒并发修改风险的情况下渲染复杂对象?例如,如果我需要渲染引擎来访问有关类对象的详细信息以进行图形决策,而这些对象可能会被游戏引擎同时更改。
我会想象在渲染之前制作对象的深层副本会起作用,但在复制过程中不会出现同样的问题吗?我会假设在逐个复制数组列表时编辑它会导致问题。在这些时候,我认为有一些我不知道的行业标准。
答案 0 :(得分:1)
这是一个复杂的问题,但我会尝试给你几个指针,我在处理这个问题时找到了自己。首先是数组和列表的问题。我发现有用的是根据用于保存对象的列表生成新列表。这样,您在创建新列表时只需要小心编辑列表。完成后,可以放弃创建的列表。如果可以,还要避免从列表中删除项目或更改列表中的项目位置。这使得引入并发问题变得更加容易。
现在来渲染问题。假设您一次只能渲染一个线程。我发现创建一个保持更改的对象并在每个渲染周期的结束或开始时进行实际更改是有用的,这样您可以随时更改对象,但更改在下一个渲染周期之前不会生效。