Як працюють анімації взаємодії персонажів та об'єктів в ізометричних іграх?


10

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

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

Мене, зокрема, цікавить такий сценарій:

Персонаж рухається через офіс (1) до свого столу (2), сідає і починає набирати (3).

З того, що я розумію, у мене був би спрайт-лист для руху символів (1) та статичний спрайт для письмового столу (2), але я не зовсім розумію, як би обходився третій крок?

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

Як це нормально обробляється?

Редагувати:

Ось конкретний приклад анімації з гри Theme Hospital. Відео ви можете подивитися тут .

Наскільки я бачу, анімація розбита на кілька кроків.

Крок 1 - Персонаж переміщається між столом і стільцем.

введіть тут опис зображення

Це говорить про те, що стілець і стіл насправді є окремими духом.

Крок 2 - Символ сідає анімація

введіть тут опис зображення

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

Крок 3 - Настільні анімації

введіть тут опис зображення

Крок 4 - Відстоюйте анімацію

Це те саме, що сісти, але грати в зворотному напрямку.

Крок 5 - Відійдіть

Використовуйте звичайну анімацію при переміщенні.

У мене виникають питання, як найкраще відокремити ці анімації та як графічний художник зазвичай надає ці анімації?

Чи персонаж сидить і друкує на столі насправді три різних спрайти (письмовий стіл, персонаж і стілець)? Хтось знає приклад спрайтів подібної анімації?

EDIT 2:

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

Відповіді:


8

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

Давайте зробимо кілька калькувань.

Притворіться, що у вас є 6 спрайтів на роботодавця, який сидить, набираючи анімацію, у вас є 5 різних стільців та 10 різних роботодавців.

Якщо ви просто намалюєте роботодавця над кріслом, це займе 10 * 6 + 5 спрайтів, 65 спрайтів.
Якщо ви комбінуєте та робите кожну комбінацію, для цього знадобиться 10 * 6 * 5 спрайтів, тобто 300 спрайтів. Буде такий біль для вас, щоб зробити спрайтовий лист такого великого просто для простої анімації!

Редагувати:

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

Background.draw();
Foreach(employer i in staff)
    I.draw();

Це повинно тримати ваших співробітників відокремленими від вашої камери (фону) Також неодноразово оновлюйте кадри персональної анімації.

EDIT2:

Я бачив вашу редакцію та ваші зразки. Я б дотримувався такого ж підходу. Всі різні спрати. Крісло все одно піде перед персонажем!

Щоб зрушити стілець ближче, оновіть його положення на кілька пікселів вгору та вліво, або зробіть це на самому спрайті.

Ви розумієте про Z align? які повинні грати багато речей ...

Видно, що деякі частини стільця залишаються позаду персонажа, інші - спереду. То як це можливо, якщо це лише один спрайт? Z вирівняйте!

Два способи досягти ефекту. Тримайте маску (не так просто) або розділіть спрайт на два.

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

Я не знаю, який lib / api / sdk / набір інструментів ви використовуєте. Але найбільше це роблять так: використовуйте коефіцієнт az Вирівнювання, який визначає, що знаходиться позаду, або що знаходиться попереду, або Що намальовано спочатку йдіть ззаду, те, що було намальовано останнім, йде попереду. Тож вам слід пам’ятати про це.


так дякую. Я теж так думав, але не розумію, як би тоді були досягнуті анімації. чи знаєте ви приклад, який я міг би подивитися? це було б найкраще!
Патрік Клуг

Ви маєте на увазі код або гру? Якщо вам потрібна гра, спробуйте переглянути гру Dev Story від Kairosoft для Android та iOS. Приклад коду, я не знаю ...
Густаво Масьєль

Відповідь переглянути. Подивіться, чи відповідає вашим потребам (:
Gustavo Maciel

Я оновив своє запитання конкретним прикладом. Мені дуже цікаво, як виглядатимуть спрайти або що графіки використовують для надання. Анімації GameDev Story трохи надто спрощені для того, що я маю на увазі.
Патрік Клуг

Прочитайте редагування 2, я вдосконалив відповідь, сподіваюся, вона охоплює ваші потреби.
Густаво Масель

2

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

Якщо у вас є комбінований спрайт «стілець» і хочете, щоб стілець з’явився перед будь-якими іншими спрайтами (тобто людьми) на цій площі, ви зробили б-чорну версію Z-Buffer, а стіл був «білим» .

Коли ви надаєте динамічний спрайт (особа) на цій плитці, він перевірить, який колір є в буфері глибини. Для пікселів, які дорівнюють 0 (чорним), ви пропускаєте малювання людини, що спрайтує пікселі, і просто залишаєте там крісла.

Замість перевірки кожного пікселя 1, більш простим способом зробити перевірку було б множення спрайт-пікселів на значення буфера глибини, оскільки ближче глибина буде 0 та скасувати. Тоді, звичайно, вам доведеться розфарбувати кольори (якщо ви не маєте альфа-кольоровий канал).

Це, звичайно, додає накладні витрати (хоча ви можете пропустити його за все, що не потребує декількох рівнів глибини, як стілець). Вам також потрібно синхронізувати свої анімації (тобто особа повинна відповідати анімації стільця на столі). Це не дає вам однакової гнучкості просто мати цілу купу окремих спрайтів.


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