Как анимация взаимодействия с персонажем /объектом работает в изометрических играх?

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

Персонажи (Персонал /NPC) в игре должны взаимодействовать с этими объектами, выполняя некоторые предопределенные задачи, такие как ввод текста на клавиатуре за столом или запись на доске и т. д.

В частности, меня интересует следующий сценарий:

Символ перемещается через офис (1) на его стол (2) и садится и начинает печатать (3).

Из того, что я понимаю, у меня был бы лист спрайтов для движения символов (1) и статический спрайт для стола (2), но я не совсем понимаю, как будет обрабатываться третий шаг?

Есть ли комбинированный спрайт, который содержит как стол, так и символ? Я предполагаю, что нет, иначе мне понадобится лист спрайтов для каждой комбинации стола и персонажа.

Как это обычно обрабатывается?

EDIT:

Вот пример анимации примера из Тематической больницы. Вы можете увидеть видео здесь .

Насколько я вижу, анимация разбита на несколько этапов.

Шаг 1 - Персонаж перемещается между столом и стулом.

введите описание изображения здесь>> </p>

<p> Это говорит о том, что стул и письменный стол фактически являются отдельными спрайтами. </p>

<p> <strong> Шаг 2 - Символ садится анимация </strong> </p>

<p> <img src =

Шаг 4 - Ожидание анимации

То же самое, что сидеть, но воспроизводиться в обратном порядке.

Шаг 5 - Отпустите

Используйте обычную анимацию перемещения, чтобы отойти.

У меня есть вопросы, как эти анимации лучше всего разделять и как графический художник обычно предоставляет эти анимации?

Сидит ли персонаж и печатает на столе три разных спрайта (стол, персонаж и стул)? Кто-нибудь знает примеры спрайтов с подобными анимациями?

ИЗМЕНИТЬ 2:

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

9 голосов | спросил Patrick Klug 19 Jpm1000000pmThu, 19 Jan 2012 15:17:52 +040012 2012, 15:17:52

2 ответа


8

Короткий ответ? Не смешивайте спрайты.
То есть, если вы объединитесь, вам придется иметь анимацию для каждой отдельной комбинации. Кажется странным, если вам просто нужен один стул. Но давайте притвориться, что ваш офис может быть расширен в средней игре, где у стульев теперь есть спрайт. Вы бы просто добавили стул спрайт, или вы будете рекомбинировать и добавить все анимации каждого работодателя снова?

Давайте сделаем некоторые вычисления.

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

Если вы просто нарисуете работодателя сверху стула, это займет 10 * 6 + 5 спрайтов, 65 спрайтов.
Если вы объедините и сделаете каждую комбинацию, это займет 10 * 6 * 5 спрайтов, то есть 300 спрайтов. Будет такой болью для вас, чтобы сделать спрайт, этот большой для простой анимации!

EDIT:

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

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

Это должно держать ваш персонал отделенным от вашего chais (фон) Кроме того, обновите рамки анимации персонала самостоятельно.

EDIT2:

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

Чтобы переместить стул ближе, обновите его положение на несколько пикселей вверх и влево или сделайте это на самом спрайте.

Вы понимаете, что Z выровнен? это должно сыграть много вещей ...

Вы можете видеть, что некоторые части кресла остаются за персонажем, другие - впереди. Итак, как это возможно, если это всего лишь один спрайт? Z выровнять!

Два способа достижения эффекта. Держите маску (не так просто) или разделите свой спрайт на две части.

Я просто упомянул о втором методе, так как у меня не так много времени. Вы должны отрезать свой спрайт-стул, в тех частях, которые были бы впереди, и что будет позади. Затем поставьте их в том же положении. легко! Что играет Z Zign здесь, Части позади должны быть обращены сзади, персонаж в середине и переднем стуле в передней части.

Я не знаю, какой lib /api /sdk /toolset вы используете. Но большинство из них делают так: используйте коэффициент выровнения z, который определяет, что находится сзади или что впереди, или что заставило сначала зайти, что заставило последний идти вперед. Поэтому вы должны помнить об этом.

ответил Gustavo Maciel 19 Jpm1000000pmThu, 19 Jan 2012 15:36:03 +040012 2012, 15:36:03
2

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

Если у вас есть комбинированный спрайт для рабочего стола и вы хотите, чтобы стул появился перед любыми другими спрайтами (т.е. людьми) на этом квадрате, вы сделали бы версию Z-Buffer черной «черной», в то время как стол был бы 'белый'.

При визуализации динамического спрайта (человека) на этом фрагменте он будет проверять, какой цвет находится в буфере глубины. Для пикселей, которые являются 0 (черный), вы пропускаете рисование лица, справляете пиксели и просто оставляете там стулья.

Вместо того, чтобы проверять каждый пиксель 1 за раз, более простой способ сделать проверку состоял бы в том, чтобы умножить пиксели спрайтов на значение буфера глубины, поскольку более близкая глубина будет равна 0 и будет отменена. Тогда, конечно, вы должны colorkey (если у вас нет канала с альфа-цветом).

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

ответил David C. Bishop 20 Jam1000000amFri, 20 Jan 2012 06:05:41 +040012 2012, 06:05:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132