Create site free
Организация файла - Общие вопросы разработки игр - Разработка игр на Game Maker (Simple Mode) - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Общие вопросы разработки игр » Организация файла (Поиск удобного метода)
Организация файла
DragonSkiN Дата: Суббота, 20.03.2010, 18:48 | Сообщение # 1
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
Итак, что необходимо в файл вписать:

Есть следующие структуры:
Список обьектов (имена, ID)
Список свойств обьектов (на каждый ID свой список)

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

Можно конечно просто слить все эти данные в текстовый файл и на этом успокоиться, но можно ведь и разработать удобный формат...
Вот здесь то я и встал в тупик.

Есть различные типы организации:
- ключ - значение
- иерархическая
- последовательный набор информации (текст или бинарник)

Представляется наиболее логичным писать всю инфу в бинарник.
Но предполагается, что программа будет использоваться также и сторонними разработчиками,
Поэтому я лучше спрошу у самих разработчиков wink :

А как собственно удобнее?



http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр


Сообщение отредактировал DragonSkiN - Суббота, 20.03.2010, 18:50
 
SRes Дата: Суббота, 20.03.2010, 19:34 | Сообщение # 2
Каждый 5й пост мой
Группа: Страж
Сообщений: 2512
Статус: Offline
Файл и четкое объяснение формата (если уж будет использоваться кем-то сторонним), вместе с ним.


Velociped Inc.
 
DragonSkiN Дата: Суббота, 20.03.2010, 19:36 | Сообщение # 3
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
вот в том то и дело, что со структурой файла мне и надо определиться.
т.е. формат хранения файла я и прошу помочь создать.

но для примера сейчас сделаю тхт с данными, которые собираюсь сливать в файл.



http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр


Сообщение отредактировал DragonSkiN - Суббота, 20.03.2010, 19:38
 
DragonSkiN Дата: Суббота, 20.03.2010, 20:04 | Сообщение # 4
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
вот, вроде всё, что будет сохраняться слил в тхт...

и да. естественно мануал будет прилагаться, как без него то?

Прикрепления: 1454937.txt(2Kb)


http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр


Сообщение отредактировал DragonSkiN - Суббота, 20.03.2010, 20:33
 
Ang3L Дата: Воскресенье, 21.03.2010, 00:26 | Сообщение # 5
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (DragonSkiN)
А как собственно удобнее?

Однозначно бинарник. Минимум мусора, максимум остального. cool

Quote
//для начала наверное имеет смысл записать версию редактора (вдруг придется думать о совместимости)

Это идея хорошая. Только забудь про дроби. Версия не бывает дробной. Оно выражается целым числом от 0 до бесконечности. Это ты уже потом можешь его поделить как нужно. Для версий хватит 2 байт, это будет выше крыши (ты ж не будешь делать Win8? Ну вот! 65000 тыс. версий тебе хватит).
[][]

Quote
//тип карты - store, multiplayer, other, если other - укажем пользовательский тип

И вот тут уже у тебя ступор пошёл. Компу пофиг other это или 0, store это или 1, multiplayer или 2, ... Ну ты понял идею? Сюда можно зафигачить битовую карту. Это будет удобно и тоже влезет в 2 байта.
[][]

Quote
//далее пойдет директория с обьектами и список обьектов в порядке нарастания id

Здесь можно строкой, но с применением индексирования для названий папок. Дальше кол-во файлов и после сами файлы. Кол-во символов в названий (столько байт) и кол-во свойств (1 байт). Читаем название. После идут тип свойства (байт) и значение свойства (размер можно читать либо с типа, либо 4 байта на любое свойство, этого должно хватить). Потом опять название объекта и его свойства и т.д.

Quote
//далее сливаем три карты из трех двумерных массивов. в картах содержатся только id обьекта (тайлы так же имеют id, но в описании свойств не нуждаются)

Здесь у нас сначала хранится размер карты. В зависимости от размера. Если 0-255, то по байту, если до 65535 то 2 байта, более 4 байта.

Далее линейный массив индексов тайлов (по байту на индекс). Линейный массив в двумерный же умеешь преобразовывать?

Quote
вот вроде и всё.

wink

А вот что такое индекс расскажу сразу. Помнишь паллитру в GIF файлах? Допустим файл хранит паллитру из 4 цветов (4 индекса). Каждому индексу соответствует опр. цвет. Если цвет будет 32бита и картинка будет большой то экономия будет огромной. Так же делают в 3д графике, так же и в файлах.

У тебя же не рандомные название директорий? Вот. Значит каждой директорий можно применить индекс. Допустим папка tiles будет иметь индекс 0. Теперь мы когда читаем папки, видим ноль, ага! Значит тут tiles. Если файлы будут мизерными это будет излишеством. Но чем похожих элементов (папок) больше, тем актуальнее этот приём.

По поводу битовой карты. Хранить свойства в строках дикое расточительство. Каждому свойству можно приставить свой бит. 1 байт = 8 бит, т.е. 8 не взаимоисключающих свойств. Идут биты слева направо. Получится допустим так (каждый кубик бит):
[reserve][reserve][reserve][reserve][reserve][other][store][multiplayer]

Представь что это простой массив. Массив битов. Какие у них индексы? multiplayer - 0, store - 1, other - 2 и т.д. отличие только, как ты наверное заметил, читаем слева направо. multiplayer взаимоисключающее свойство? т.е. может быть multiplayer и singleplayer в одном? Если да, то экономи на 1 свойство. Смотрим результат:
[0][0][0][0][0][1][0][1] или двоичное представление 00000101 или десятиричное 5. Это всё вместится в 1 байт. По биту на свойство (+взаимоисключающие).

Значения у свойств степени двойки. Т.е. первое свойство 1 (0000 0001), второе 2 (0000 0010), третье 4 (0000 0100), четвёртое 8 (0000 1000) и т.д. Заметил магию? Цифра 1 просто меняет позицию. Теперь мы из числа 00000101 (это 5 в десятиричной системе, если помнишь) можем выдернуть свойства.

Code
if((5 & multiplayer) == multiplayer)
//есть мультиплеер

if((5 & other) == other)
//есть other

Экономия везде. И теперь сравниваем. По прикидкам бинарник будет весить (с теми данными что у тебя в txt) не более пару сотен байт против 2к в txt без сжатия данных (да, да, комментарий happy ). Причём при больших объёмах это будет чувствоваться гораздо сильнее.

P.S.: Я те могу картиночку нарисовать твоей структуры, чтобы ты понял её. Нужно? Или так понял?



Blogpost
 
DragonSkiN Дата: Воскресенье, 21.03.2010, 00:47 | Сообщение # 6
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
Quote (Ang3L)
Это идея хорошая.

она не моя, а из твоей статьи wink

Quote (Ang3L)
И вот тут уже у тебя ступор пошёл. Компу пофиг other это или 0, store это или 1, multiplayer или 2, ... Ну ты понял идею? Сюда можно зафигачить битовую карту. Это будет удобно и тоже влезет в 2 байта.

Здесь я просто показал идею, но спасибо, разжевал.

Quote (Ang3L)
Далее линейный массив индексов тайлов (по байту на индекс). Линейный массив в двумерный же умеешь преобразовывать?

если бы до сих пор не научился - сгорел бы со стыда biggrin

Quote (Ang3L)
У тебя же не рандомные название директорий? Вот. Значит каждой директорий можно применить индекс. Допустим папка tiles будет иметь индекс 0. Теперь мы когда читаем папки, видим ноль, ага! Значит тут tiles. Если файлы будут мизерными это будет излишеством. Но чем похожих элементов (папок) больше, тем актуальнее этот приём.

Спасибо, применю.

Quote (Ang3L)
Хранить свойства в строках дикое расточительство.

А придется, поскольку имена для свойств задает сам пользователь, т.е. невозможно предсказать как он назовет свойство.
И даже значение, которое это свойство принимает, может быть текстом... т.е. обойтись без строки сумеем лишь когда значение свойства - число.

Quote (Ang3L)
так понял?

вполне.

Ang3L, тебе бы это в статью оформить, полезная ведь информация...
даже где то видел подобное, но не сумел найти.



http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр


Сообщение отредактировал DragonSkiN - Воскресенье, 21.03.2010, 00:49
 
Ang3L Дата: Воскресенье, 21.03.2010, 01:25 | Сообщение # 7
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (DragonSkiN)
она не моя, а из твоей статьи

И не моя! happy А пионеров программирования.

Quote (DragonSkiN)
А придется, поскольку имена для свойств задает сам пользователь

Ну если так то ладно, опять таки и здесь можно сделать индексирование. Допустим у тебя есть палитра свойств (не важно кем сделанная,и не важно с какими названиями) и ты просто выбираешь индекс из этой палитры. Это сэкономит порядочно места в этом месте, потому как объекты и особенно свойства будут бутылочным горлышком при сохранении данных, поэтому здесь стоит повозиться.

Quote (DragonSkiN)
И даже значение, которое это свойство принимает, может быть текстом...

А вот здесь надо подумать. Потому как хранить число в строке тож не очень. 32битное число занимает 4 байта в 16ричном варианте и 10 в строковом. 2.5 раза разница.

Quote (DragonSkiN)
тебе бы это в статью оформить, полезная ведь информация...

Уже вроде всем всё понятно про запись в бинарник? Да там и не сложно. cool Щас дел накопилось, и всем я должен что-то сделать... Только мне никто ничё не должен. dry

Quote (DragonSkiN)
даже где то видел подобное, но не сумел найти.

Не мной это всё придумано, я только перерабатываю в более удобоваримый вариант, более понятный.

Примерно так выглядит:

Надеюсь будет понятно без объяснений (полукруглый кубик - байт).

Прикрепления: 1544370.png(18Kb)


Blogpost
 
NewStrannik Дата: Воскресенье, 21.03.2010, 11:28 | Сообщение # 8
Всех уже задолбал
Группа: Проверенные
Сообщений: 808
Статус: Offline
Маленький размер и удобство чтения* - бинарники, а большой размер и удобство изменения вручную - текст.
Бинарники: карты, модели, картинки... В общем, где мно-ого объектов.
Текст: различные настройки, свойства отдельно взятых объектов, скрипты...
Для каждой ситуации нужно выбирать своё.
Ну, а как организовывать файл - это дело личное. :D
P.S.: Если что, тему сильно не читал.
*в смысле, программная реализация оного


Сообщение отредактировал NewStrannik - Воскресенье, 21.03.2010, 11:29
 
Ang3L Дата: Воскресенье, 21.03.2010, 13:12 | Сообщение # 9
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (NewStrannik)
Текст: различные настройки, свойства отдельно взятых объектов, скрипты...

Не следишь за новыми веяниями! happy Сейчас моден не текст, а XML за лёгкость поиска и изменения настроек (а может ещё какие плюсы есть? Сетевики отзовитесь. Какие ещё плюсы у XML?).

Quote (NewStrannik)
Ну, а как организовывать файл - это дело личное.

Конечно, личное. Но. У каждого дела есть набор правил и давно изученных особенностей, которое облегчает и серьёзно продвигает в развитии проекта. Например версия файла. Меня постоянно раздражало что при загрузке нового типа формата старый получался не совместим (и все предыдущие "сейвы" были бесполезны). Теперь же это ограничение можно обойти. И наверняка есть ещё множество интересных нюансов.


Blogpost
 
NewStrannik Дата: Воскресенье, 21.03.2010, 14:22 | Сообщение # 10
Всех уже задолбал
Группа: Проверенные
Сообщений: 808
Статус: Offline
XML - это тот же текст... также, как и HTML, MHT, XSL, INI, CSV да и многие другие. wink
> Например версия файла. Меня постоянно раздражало что при загрузке нового типа формата старый получался не совместим (и все предыдущие "сейвы" были бесполезны). Теперь же это ограничение можно обойти. И наверняка есть ещё множество интересных нюансов.
Это советы.


Сообщение отредактировал NewStrannik - Воскресенье, 21.03.2010, 14:22
 
sanek-x107 Дата: Суббота, 03.04.2010, 22:34 | Сообщение # 11
Хоть палкой гони
Группа: Проверенные
Сообщений: 770
Статус: Offline
Ang3l, ты в чем рисуешь такие схемы, скажи, пожалуйста!

кстати, схема хорошая, но вот только к чем папки объектов?
и я под кол-во объектов выделил бы 2 байта на твоем месте, если честно - запас нам никогда не помешает.

Добавлено (03.04.2010, 22:34)
---------------------------------------------

Quote (Ang3L)
Какие ещё плюсы у XML?).

Как делать нефиг добраться до информации) В особенности если работать со специальной длл для чтения их. Например, практически во всех подобных длл есть функция, аналогичная document.getElementsByTagName('') в яваскрипте. Плюс к тому же, можно легко построить эффективную иерархию!


http://gmbook.sx107.netai.net
Мама, я - дебил!


Сообщение отредактировал sanek-x107 - Суббота, 03.04.2010, 22:35
 
Ang3L Дата: Воскресенье, 04.04.2010, 01:14 | Сообщение # 12
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (sanek-x107)
ты в чем рисуешь такие схемы, скажи, пожалуйста!

Использую ConceptDraw Office PRO. На данный момент, она мне понравилась больше всего. Есть почти копия - EDraw Max. Visio 2007 какой-то убогий и тормознутый, а вот эти ничего. Кстати, схемы можно делать в Word'е (особенно в последнем красиво получаются), вставляем Вставка > Фигуры > Новое полотно, а дальше с зажатым Alt'ом (для привязки к сетке) размещаем фигуры. Все эффекты в комплекте, но это относится к 2007, к ранним я хз.

Quote (sanek-x107)
кстати, схема хорошая, но вот только к чем папки объектов?

Обозначение вложения. т.е. не просто байт кол-во чего-то, а кол-во объектов определённых внутри "папки". Мысленное вложение. Как в принципе и папки для файлов, т.е. для удобства (для компа всё равно куча файлов, а нам понятнее). Это схема моя, так что, может ты придумаешь что-то более удобное и наглядное - вперёд! wink

Quote (sanek-x107)
и я под кол-во объектов выделил бы 2 байта на твоем месте, если честно - запас нам никогда не помешает.

Дело вкуса. Насколько это нужно. Но в данном случае, логично, мало ли что. Да и лишний байт не утянет.


Blogpost
 
sanek-x107 Дата: Воскресенье, 04.04.2010, 10:47 | Сообщение # 13
Хоть палкой гони
Группа: Проверенные
Сообщений: 770
Статус: Offline
Ang3l, спасибо!
Кстати, еще можно при желании сделать поддержку дельта-файлов.


http://gmbook.sx107.netai.net
Мама, я - дебил!


Сообщение отредактировал sanek-x107 - Воскресенье, 04.04.2010, 10:48
 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Общие вопросы разработки игр » Организация файла (Поиск удобного метода)
Страница 1 из 11
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход