Чи варто рухатись по світу чи рухати гравця?


11

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

Я розробляю це за допомогою AndEngine для Android, який використовує OpenGL та Box2d.

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

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

Дякую!


2
Перемістіть камеру.
Джонатан Дікінсон

1
Якщо у вас немає конкретних причин не бажати користуватися камерою (яка вже написана для вас), вам слід перемістити плеєр і камеру. Додавання "живлення" не повинно впливати жодним чином.
Крістофер Хоренштейн

Відповіді:


9

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

Якщо ви перемістите плеєр і приєднаєте камеру до плеєру, тоді мінімальне використання ресурсів. Гра перейде до фази візуалізації, перегляне все, як це робиться кожен кадр, і намалює їх у положенні - camera.position. Позиція камери завжди дорівнює позиції ваших гравців у цьому випадку.


Звичайно, якщо об'єкти вороги, вам не доведеться прокручувати їх, просто додайте рух світів до їх методу оновлення.
СерЯкалот

1
+1. Використовуйте camera.setChaseEntity(player);для досягнення цього.
MartinTeeVarga

6

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

  1. Якщо ви перемістите камеру та плеєр, це лише два об'єкти, які потрібно оновити, щоб прокрутити екран.

  2. Якщо ви переміщуєте весь світ, коли екран повинен прокручуватися, це охоплює невідому та, можливо, велику кількість об'єктів, які доведеться оновити.


Я згоден, але хочу додати, що просто додавати лінію + = 'рух світу до класу противника було б досить тривіально.
СерЯкалот

@AsherEinhorn Я думаю, ви говорите про такий сценарій, як графік сцени, де кожен вузол ділиться перетвореннями батьків і просто переміщуючи кореневий вузол (тобто "світ") автоматично перекладає все інше? Тому що в будь-якому іншому випадку переміщення світу має на увазі переміщення всього світу - що було суть моєї посади.
Девід Гувейя

добре, якщо рух у світі обернено пропорційний гравцеві. тобто - ви рухаєтеся вперед, світ рухається назад, тоді ви можете просто - = рух гравців до всіх ігрових об'єктів. Я згоден з вами, я просто кажу, що існують тривіальні способи змусити обох працювати.
СерЯкалот

4

Насправді це досить банально, він насправді не відрізняється від описаних вами речей.

Або ви переміщуєте фон повз камеру та плеєр, або переміщаєте плеєр та камеру разом із ним. Я думаю, що є ще одна річ, яку потрібно зробити, якщо просто перемістити тло.

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

Особисто я би перемістив гравця, тому що мені просто подобається, що це потрібно робити більш реалістично.


0

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

Переміщення програвача:

  • Це просто, все інше є статичним (ish), тому, спрощено, єдине, що вам потрібно зробити для переміщення гравця, це player.x += 5;(псевдокод).
  • Це "Клічить краще" для більшості людей. Коли ви граєте в гру, ви завжди думаєте, що гравець рухається, а не навпаки. Тож простіше думати про це як "Гравець повинен рухатись, а не світ", що, в свою чергу, може полегшити комусь це організувати в голові.
  • Легко відстежувати, де знаходиться гравець (його позиція - також його координати на карті)

Рух у світі:

  • Якщо ваша гра досить велика, вам не доведеться турбуватися про переповнення / перелив, віддаляючись занадто далеко від центру світу, оскільки позиція гравця завжди дуже близька 0.
  • Як і вище, якщо ви псуєтесь із 3D-обчисленнями, вам не доведеться турбуватися про неточні результати з плаваючими точками, тому що все, що ви бачите на екрані, повинно бути досить близько 0.
  • Якщо зробити все правильно, можна скласти "нескінченний" світ.
  • Доведеться відслідковувати гравця вручну, позиція гравця завжди буде невеликим значенням, яке означає, де гравець знаходиться на екрані (свого роду), щоб знати, чи гравець у верхньому лівому куті карти чи знизу праворуч, вам доведеться якось це відслідковувати.

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

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