Я пытаюсь выучить формат уровней в одной из моих любимых игр, которая почти полностью без документов. По сути, единственный документ, который описывает формат уровня, это просто сказать что-то вроде First 12 bytes: header
4 following bytes: number of materials
x next bytes: array of materials
,
и тому подобные вещи.
Я очень неопытен в гексе и не совсем понимаю, что они говорят. Тем не менее, есть редактор уровней, и источник свободно доступен в коде Google. Я думал добавить это в мою визуальную студию и попытаться изучить формат уровня, читая, как редактор уровней открывает файлы.
Тем не менее, еще одна проблема, я не знаю с ++ (я знаю Python). Это означает, что я, вероятно, не смогу определить, какая часть кода читает байты и еще много чего.
То, что я ищу, это то, что позволит мне следить за потоком кода при его выполнении. По сути, это то, что действует аналогично установке точки останова в каждой строке и ее показу, какая конкретная часть кода выполняется при чтении содержимого файла.
Однако очевидно, что установка точек останова на каждой строке очень грязная и медленная. Я ищу что-то, что просто покажет мне, какой код запускается, когда я открываю файл в редакторе.
Кто-нибудь знает, что я мог сделать? Благодарю.
Вы ищете возможность перейти от одного утверждения к другому; у каждого отладчика, которого я знаю, есть такая особенность. Вы начинаете с того, что устанавливаете одну точку останова в начале интересного региона, а затем начинаете «шагать» по своему коду.
Например. в Visual C ++ 2010 клавиша F10 выполняет один шаг; Вы также можете «перейти» к следующему оператору (например, вызову метода) с помощью F11.
В вашем случае установите точку останова, с которой начинается чтение файла уровня, и продолжайте с этого момента. Найти место, где читается файл, тоже может быть непросто — в зависимости от четкости кода; но если это хорошо написанный код, должен быть метод с «read» в названии или «load» или что-то подобное — вы поймете это!
Возможно, вам придется знать хотя бы некоторый базовый синтаксис C ++, чтобы иметь возможность следить за тем, что происходит.
Я бы также порекомендовал прочитать «Отладка как» (например, этот).
Документ, который вы находите таким неясным, — это просто спецификации формата уровня, в большинстве случаев это все, что вам нужно. Вам также нужно немного больше опыта чтения файлов.
При чтении файла вы должны быть осторожны относительно нескольких вещей.
1) При чтении побайтовых (8 бит) порядок не изменяется.
2) При одновременном чтении 32 битов порядок байтов может меняться в зависимости от порядкового номера машины.
(например, 0x12345678 становится 0x78563412 при изменении endiannes)
Был очень старый учебник, который может помочь вам загрузить 3D-модели, которые помогли мне начать работать с файлами:
http://www.spacesimulator.net/wiki/index.php?title=Tutorials:3ds_Loader
это полезно, потому что у вас есть часть спецификаций (как в оригинальной документации), и она показывает, как вы можете создать загрузчик, только начиная со спецификаций. Это все, что вам нужно. Это C, но в этом случае нет большой разницы от C ++.
Если вам нужна какая-то другая простая спецификация формата файла с соответствующим загрузчиком файлов, чтобы прояснить ситуацию, вы также можете взглянуть на спецификации libktx и ktx:
http://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
Если я правильно помню, есть также неофициальный загрузчик C ++ KTX, на который вы можете обратить внимание, если захотите написать код на C ++, а не C.