gpt4 book ai didi

ios - 为 Star Ocean Second Story 和 Legend of Mana 等 2D 游戏存储游戏数据

转载 作者:行者123 更新时间:2023-11-28 17:43:10 28 4
gpt4 key购买 nike

我正在尝试开发像《圣剑传说》和《星海二传》这样的 2D 游戏,而不是基于图 block 的 2D 游戏。

概览

目前,我构建游戏的方式是这样的:

我有几何文件和纹理文件。几何文件存储宽度、高度、XY 位置、要使用的纹理 ID 号和要使用的纹理名称。

我尝试做的方式是:

我将有一个加载“场景”对象的场景管理器对象。每个场景对象存储该场景中所有几何对象的列表以及纹理和声音对象(待实现)。

每个场景都使用顶点数组渲染,场景管理器对象将调用一个方法,如通过场景名称获取场景顶点,该方法返回一个指向 GLFloats (GLfloat *) 数组的指针,这个指向 GLfloat 的指针在 OpenGL 的 glVertexPointer( ) 功能。

当我想更新每个角色的位置时(例如英雄),我的目标是使用当前场景中的“英雄”游戏对象并调用如下函数:

Hero.Move(newXPosition, newYPosition);

这实际上会改变英雄几何对象的顶点数据。所以它会做类似的事情:

for(int i = 0; i < 8; i++)
{
vertexList[i] = vertexList[i] + newXPosition;
vertexList[i+1] = vertexList[i+1] + newYPosition;
...
}

这样,当我在渲染帧中渲染场景时,它会使用更新后的顶点坐标再次渲染整个场景。

游戏中的每个对象都只是一个映射了纹理的四边形。

问题

我在编程和 OpenGL 中使用 Objective C。这是针对 iOS 平台的。

到目前为止,我已经成功地使用此方法渲染了 1 个对象。

我遇到的问题是我使用的是 NSMutableDictionary,它是一种使用键值对在场景对象类中存储几何实例对象的数据结构。每次运行代码时,Objective C 中的字典不会以相同的顺序检索数据。然后以随机顺序检索。

因此,我无法将场景对象中每个几何对象的所有顶点数组数据组合在一起,并将 1 个顶点指针传递给 GLfloats。

每个几何对象存储它自己的 8 个顶点值数组(4 对 X、Y 坐标值)。我希望每个几何对象都管理它自己的顶点(这样我就可以像前面提到的那样使用移动、旋转),同时,我希望我的场景对象能够输出对所有顶点数据的单个指针引用当前场景中的几何对象,用于 OpenGL 的 glVertexArray() 函数。

我试图避免多次调用 OpenGL 的 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)。比如画英雄,画 map ,画AI代理,画BG物体。那不会很有效。尽可能减少 GL 绘制调用的数量(最好是 1 个绘制调用),尤其是在像 iPhone 这样的有限硬件上,这是我在阅读有关 OpenGL 游戏开发的文章时提出的建议。

建议?

做我想做的事情的最佳实践方法是什么?

我是否应该使用 SQL 数据库来存储我的游戏数据(例如几何顶点数据)并将 iPhone 磁盘上的 sql 数据库文件中的 1 个场景加载到 iPhone 内存中?

最佳答案

您可以使用列表的列表来跟踪绘制层和顺序,并仅使用字典进行快速查找。

关于ios - 为 Star Ocean Second Story 和 Legend of Mana 等 2D 游戏存储游戏数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7309432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com