Маленькая и большая последовательность в играх

16

Нужно ли беспокоиться о порядке следования байтов в процессе программирования игры? Игровые приставки используют разные порядки байтов?

saadtaame
источник
1
Вас беспокоит конкретный проект, над которым вы работаете сейчас или вообще? В основном, если вы пишете игру для консоли, вы, вероятно, будете использовать какой-то хорошо документированный набор инструментов, таких как XNA, а ввод и вывод будут рассмотрены в его документе.
волчий рассвет
4
Если вы беспокоитесь об этом, я действительно рекомендую Робу Пайку ошибиться в порядке следования байтов - попытка беспокоиться о порядке следования байтов часто доставляет вам больше проблем, чем просто игнорирование и написание действительно независимого от байтов кода.
1
Это хорошее чтение, но Роб показывает, что вы можете получить упрощенное чтение за счет необходимости более сложных записей. Если вы не тот, кто пишет, отлично!
Kylotan

Ответы:

14

Если вы пишете сетевой код, вам часто приходится иметь дело с этим, да.

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

Kylotan
источник
8

Вы должны беспокоиться об этом? Скорее всего нет. Подавляющее большинство игрового программирования будет находиться на таком уровне, что отстраненность от абстракции исчезнет. Даже в сети вы почти наверняка будете использовать библиотеку для сетевых протоколов. Хорошо, что вы знаете об этом, но я сомневаюсь, что у вас возникнут проблемы с этим.

MichaelHouse
источник
5

Большую часть времени нет.

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

Однако, если вы работаете над некоторыми низкоуровневыми частями многоплатформенного движка C / C ++, вам, возможно, придется иметь с этим дело. Все три консоли текущего поколения используют архитектуру PowerPC с прямым порядком байтов, тогда как архитектура x86, используемая на ПК, имеет младший порядок. Так что если вы работаете над кодом, который читает сырые байты откуда-то, чтобы поместить их в структуры данных (двоичная сериализация, работа в сети ...), да, вам придется иметь дело с этим.

Например, в C / C ++ часто встречается такая замена байтов в действии (не проверено, приветствуются исправления):

// Assume bytes comes ordered as big-endian
u16 u16FromBytes(void* data)
{
#if BIG_ENDIAN
    return (u16(data[0]) << 8) + u16(data[1]);
#else // LITTLE_ENDIAN
    return (u16(data[1]) << 8) + u16(data[0]);
#endif
}

Еще раз, это нормально в низкоуровневом коде, но это не должно использоваться везде.

Лоран Кувиду
источник
3

Это зависит от платформ, на которые вы ориентируетесь. Например, я полагаю, что PS3 - «бестолковая», поэтому, если это одна из ваших целей, это то, о чем вам нужно знать, да.

В области домашнего компьютера «большая тройка» (Windows, Linux, Mac) в настоящее время полностью или почти исключительно принадлежит архитектуре Intel x86 / x64, поэтому проблемы с конечностью больше не актуальны.

Максимус Минимус
источник
Больше не актуально? По моему опыту (2-3 игры в паре компаний и 7 лет, обе MMO ... настолько эпизодические, нежели статистически достоверные), каждый из рынков PS и Xbox примерно вдвое больше рынка Windows, Mac были небольшой долей Windows, и Linux был заметно меньше, чем это. Если ваша игра просто не может работать на консоли, вы оставляете 80% своей прибыли на земле, придерживаясь ПК. Кросс-порядковый код также означает, что ваши серверы могут быть на совершенно других компьютерах, чем ваши клиенты (например: каждая консольная игра клиент-сервер).
Марк Сторер
@MarkStorer - я думаю, вам нужно перечитать то, что я на самом деле написал.
Максимус