2d карта зверху вниз: нормалізація чи ні?


11

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

Гра, яку я планую кодувати, використовуватиме 2D карту зверху вниз як "світ". Світ може бути більшим, ніж вікно (вікно може збільшувати чи зменшувати масштаб), і транспортні засоби можуть розташовуватися в будь-якій точці світу (= це не плитка, карта "простір").

Для уточнення на прикладі: якщо світ - це місцевість 1000х1000 метрів, транспортний засіб може знаходитися на місці (327,31, 720,4) метрів.

Моє запитання: який найзручніший спосіб представити світ внутрішньо? Я міг би подумати над цими можливостями:

  • нічого не робити і використовувати лічильники так, ніби я працював з фізичним об'єктом,
  • нормалізувати до пікселів, визначаючи розмір у світі як кількість пікселів для представлення 1000 метрів при максимальному масштабі,
  • нормалізувати до 1, визначаючи слово як квадрат розміром 1

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

Спасибі за ваш час.


У мене було це питання. Я не буду публікувати як відповідь - там уже чудові речі. Але якщо ви працюєте в якій-небудь довільній одиниці, ви можете підтримати будь-яку роздільну здатність, просто налаштувавши одне значення. З цим також набагато простіше впоратися з точки зору ігрового процесу. Нарешті, при великій кількості, таких як вимірювання пікселів, фізичні симки можуть вибухнути.
Качка комуніста

Відповіді:


10

Я погоджуюся з використанням значення реального світу (метри, фути тощо) як основу для відстані. Проблема з вашими двома іншими пропозиціями полягає в тому, що вони обидві змінні. Робота зі світовим розміром 1призведе до того, що вся ваша арифметика буде з плаваючою точкою від -1 до 1, що може призвести до більшої кількості помилок з плаваючою комою. Крім того, якщо ви коли-небудь вирішите зробити різні розміри світу ("великі" світи для довших ігор тощо), ви внесете багато проблем у свій код. Так само, якщо ви використовуєте пікселі, навіть при максимальному / мінімальному масштабі, у вас виникне розгубленість, а також проблеми, якщо ви вирішите збільшити або зменшити рівень масштабування.


Ця відповідь відмінна (+1). Мені особливо подобається, як ви пояснили можливі проблеми з використанням "1" для розміру світу.
Рандольф Річардсон

Якщо ви робите будь-яке фізичне моделювання, навіть якщо повністю складене, використання цілих чисел з фіксованою точкою призведе до недійсних результатів. Все, що вам потрібно зробити, - це моделювати єдиний транспортний засіб, що рухається з одиничною швидкістю по діагоналі, і ви побачите, що у вас немає способу правильно представити його положення.
edA-qa mort-ora-y

3
Погоджено RE: використання лічильників. Це також допоможе вам подумки уявити і зрозуміти речі. "Цей автомобіль завдовжки 5 метрів", або "Ці два об'єкти розташовані на відстані 500 метрів", і не потрібно весь час займатися розумовою математикою, щоб відчути те, що ти робиш.
Тім Холт

-1 це твердження про те, що ціла арифметика є швидшою, ніж плаваюча точка, взагалі не відповідає дійсності, адже вони набагато швидші на більшості сучасних платформ
Maik Semder,

2
Однак використання значень фіксованої точки для абсолютних позицій може бути хорошою ідеєю. Це призводить до постійної точності та однакової фізики у всьому світі.
CodesInChaos

7

З трьох запропонованих вами варіантів, можливо, найкраще використовувати лічильники. Створюючи інші дані, робота з довжиною в метрах полегшить вам життя. Серед інших причин, ви можете вирішити змінити розмір світу, або для різних рівнів можуть знадобитися карти різного розміру.

Ви також можете вирішити використовувати ноги (або, можливо, дюйми). Частина цього рішення може залежати від того, які пакети програмного забезпечення ви використовуєте - деякі фізичні двигуни віддають перевагу тому чи іншому типу блоку (хоча це майже завжди можна налаштувати). Здебільшого ви можете просто вибрати агрегат і піти з ним.


5

Нормалізувати значення "1" - це насправді не шлях (що, якщо у вас світ не квадратний, або кілька світів з різними розмірами ...).

Використання пікселів як ... НІКОЛИ не змішуйте геймплей та графічні заходи !! Не замикайтесь, щоб ви не могли змінити графіку, не змінюючи код.

Тож метри (фути або будь-яке вимірювання, яке вам найбільше подобається) - це шлях. Вам буде набагато краще кодувати ваш ракетний пусковий двигун, який рухається зі швидкістю 50 км / год, ніж 0,00076 одиниць / секунду ...

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