Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
4年前关闭。
我正在尝试第一次制作完整版游戏,我希望是否有更丰富的游戏制作经验的人能告诉我您应该如何存储3d模型和2d纹理(OpenGL)。我已经看到了一些示例,其中使用了一个静态类来存储所有纹理和加载的数据,而其他类则从该类中获取纹理。在其他示例中,我看到人们在使用静态纹理的类中存储了静态纹理。我不知道这样做的最佳实践是什么。作为附带说明,我将把游戏移植到Objective-C并将其放在应用商店中,这就是为什么我使用OpenGL的原因。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
4年前关闭。
我正在尝试第一次制作完整版游戏,我希望是否有更丰富的游戏制作经验的人能告诉我您应该如何存储3d模型和2d纹理(OpenGL)。我已经看到了一些示例,其中使用了一个静态类来存储所有纹理和加载的数据,而其他类则从该类中获取纹理。在其他示例中,我看到人们在使用静态纹理的类中存储了静态纹理。我不知道这样做的最佳实践是什么。作为附带说明,我将把游戏移植到Objective-C并将其放在应用商店中,这就是为什么我使用OpenGL的原因。
最佳答案
我会将游戏分解为Screens和AssetBundles。 AssetBundle具有可加载模型,纹理,音频等的参考列表。每个屏幕都有一个AssetBundle(或它们的列表),必须加载该资产才能使屏幕继续绘制。
我将资源分解成一个AssetBundle,因为有时候有些游戏不需要的纹理或声音,例如只需要标题屏幕就可以。
例如,屏幕为TitleScreen,MenuScreen,GameScreen(主游戏)。屏幕可能会分层,也可能不会分层。
神奇的事情发生在ScreenManager类内,您可以添加/删除屏幕,并且按照添加到管理器的顺序绘制每个屏幕。将屏幕添加到管理器后,它会加载所有尚未加载的AssetBundle。如果删除了一个屏幕,那么如果管理器中的任何现有屏幕中都不存在AssetBundle,则它将删除该屏幕中的AssetBundle。
那就是我至少会做的。
09-25 22:04