Хранение игровых данных для 2D-игры, такой как Star Ocean Second Story и Legend of Mana - PullRequest
1 голос
/ 05 сентября 2011

Я пытаюсь перейти к 2D-игре, такой как Legend of Mana и Star Ocean Second Story, а не к 2D-играм на основе плиток.

ОБЗОР

В настоящее время я идуо создании моей игры примерно так:

У меня есть файлы геометрии и файлы текстур.Файлы геометрии хранят ширину, высоту, положение XY, номер идентификатора текстуры и имя используемой текстуры.

Я пытаюсь сделать так:

У меня будет объект диспетчера сценыкоторый загружает объекты "сцены".Каждый объект сцены хранит список всех геометрических объектов в этой сцене, а также текстурных и звуковых объектов (будет реализовано).

Каждая сцена визуализируется с использованием массива вершин, посредством чего объект менеджера сцены будет вызывать метод, подобный getВершины сцены по имени сцены, которая возвращает указатель на массив GLFloats (GLfloat *), и этот указатель на GLfloat используется в функции glVertexPointer () OpenGL.

Когда я хочу обновить позицию каждого персонажа (например, героя)например), моя цель - использовать игровые объекты «герой» в текущей сцене и вызывать такую ​​функцию, как:

Hero.Move(newXPosition, newYPosition);

, которая фактически изменит данные вершин объекта геометрии героя.Таким образом, он будет делать что-то вроде:

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

Таким образом, когда я перейду на рендеринг сцены в кадре рендеринга, он снова будет рендерить всю сцену с обновленными координатами вершины.

Каждый объект в игре будет просто четырехугольником с привязанной к нему текстурой.

ПРОБЛЕМА

Я использую Objective C для своего программирования и OpenGL.Это для платформы iOS.

До сих пор я успешно использовал этот метод для рендеринга 1 объекта.

У меня проблема в том, что я использую NSMutableDictionary, который представляет собой структуру данных, использующую пару ключ-значение для хранения объектов экземпляра геометрии в классе объектов сцены.Словари в Objective C не получают данные в одном и том же порядке каждый раз, когда выполняется код.Затем он получает в случайном порядке.

Из-за этого у меня возникают проблемы с объединением всех данных массива вершин из каждого геометрического объекта в объекте сцены и передачей одного единственного указателя вершины в GLfloats.

Каждый объект геометрии хранит свой собственный массив из 8 значений вершин (4 пары значений координат X, Y).Я хотел бы, чтобы каждый геометрический объект управлял своими собственными вершинами (чтобы я мог использовать Move, Rotate, как упомянуто ранее), и в то же время я хотел бы, чтобы мой объект сцены мог выводить ссылку одного указателя на все данные вершин всехобъекты геометрии в текущей сцене для использования в функции glVertexArray () OpenGL.

Я стараюсь избегать вызова glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) OpenGL несколько раз.Как рисовать героя, рисовать карту, рисовать AI агентов, рисовать объекты BG.Это было бы не очень эффективно.Как можно меньше сводить к минимуму количество обращений в GL (до 1 предпочтительно), особенно на ограниченном оборудовании, таком как iPhone, и это было предложено, когда я читал о разработке игр OpenGL.

ПРЕДЛОЖЕНИЯ?

Каков наилучший практический способ делать то, что я пытаюсь сделать?

Должен ли я использовать базу данных SQL для хранения моих игровых данных, таких как данные геометрических вершин, и загрузки сцены JUST 1 в память iPhoneиз файла базы данных sql на диске iPhone?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2011

Чего я не понимаю, так это того, почему вы не используете Cocos2D, это происходит из-за парадигмы менеджера сцены.Подумайте обо всем времени разработки, которое вы сэкономите ...

Я работал в компании, которая создавала замечательные игры.В конечном итоге он умер, потому что они продолжали выпускать игры с ошибками, из-за нехватки времени на разработку для отладки.Однако они нашли время для создания графического движка рендеринга.

Я думал и все еще думаю, что у них были неправильные приоритеты.Мне кажется, вы делаете ту же ошибку: вы пытаетесь сделать игру для iOS или вы пытаетесь научиться создавать движок 2D-игр для iOS?

Примечание.поэтому можете прочитать его, теперь, когда вы думали о процессе создания такого двигателя.

0 голосов
/ 05 сентября 2011

Вы можете использовать список списков для отслеживания слоя и порядка рисования, а также использовать словарь исключительно для быстрого поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...