Маленька і велика витривалість в іграх


16

Чи потрібно турбуватися про замовлення байтів у процесі програмування гри? Чи ігрові консолі використовують різні байтові замовлення?


1
Вас турбує конкретний проект, над яким ви працюєте зараз чи просто загалом? Здебільшого, якщо ви пишете гру для консолі, ви, ймовірно, будете використовувати якийсь добре задокументований набір інструментів, таких як XNA, і вхід і вихід буде висвітлено в її документі.
AturSams

4
Якщо ви переживаєте з цього приводу, я дійсно рекомендую помилкову процедуру порядку байтів Роб Піка - намагання турбуватися про порядок байтів часто заважає вам неприємно, ніж просто ігнорувати його та писати справді незалежний від ендіанського код.

1
Це добре читати, але Роб показує, що ви можете отримати спрощені читання за рахунок необхідності більш складних записів. Якщо ви не той, хто пише писати, чудово!
Килотан

Відповіді:


14

Якщо ви пишете мережевий код, з цим часто доводиться стикатися, так.

Також можливо, що впорядкування байтів у форматі файлів - це не те, що використовує ваша платформа, тому іноді це теж має значення.


8

Чи варто турбуватися про це? Ймовірно, ні. Переважна більшість ігрових програмувань буде на такому рівні, що втрачається небезпека. Навіть у мережі, ви майже напевно будете використовувати бібліотеку для мережевих протоколів. Добре, що ви це знаєте, але я сумніваюся, що ви зіткнулися з проблемою.


5

Більшість часу, ні.

Ендіазність зазвичай абстрагується від модулів високого рівня ігрового двигуна, і вам не доведеться турбуватися про це щодня. Якщо це не абстрагується, то в двигуна є серйозна проблема, і його слід виправити, оскільки це не той вид деталей, про який ви повинні турбуватися, роблячи гру.

Однак якщо ви працюєте над деякими низькорівневими частинами багатоплатформенного двигуна 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 є великим фактором, тому якщо це одна з ваших цілей, то це те, що вам потрібно знати, так.

У побутовому комп'ютерному просторі в наші дні "Big 3" (Windows, Linux, Mac) ексклюзивно, або все, але виключно, є архітектурами Intel x86 / x64, тому проблеми екологічності вже не актуальні.


Більше не актуально? З мого досвіду (2-3 ігри в декількох компаніях і 7 років, обидва MMO ... настільки анекдотичні, а не статистично достовірні) кожен із ринків PS і Xbox приблизно вдвічі перевищує розмір ринку Windows, Маки були невеликою часткою Windows, а Linux був помітно меншим за це. Якщо ваша гра просто не може працювати на консолі, ви залишаєте 80% свого прибутку на місцях, дотримуючись ПК. Крос-ендіанський код також означає, що ваші сервери можуть знаходитись на абсолютно інших машинах, ніж ваші клієнти (наприклад, у будь-якій грі консолі клієнт-сервер коли-небудь).
Марк Сторер

@MarkStorer - Я думаю, що вам потрібно перечитати те, що я насправді написав.
Максим Мінімус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.