Рендеринг Аватаров в XNA
ВведениеMicrosoft
любезно предоставила примеры реализации рендеринга Аватаров в XNA 3.1 на XBox 360. Сначала прочтите Microsoft Permissive License, которая сопровождает эти примеры.
Добавление Аватара в XNAВо-первых давайте посмотрим, как добавить в XNA возможность использования Аватаров.
В Microsoft.Xna.Framework.GamerServices вы найдете следующие новые функции, связанные с Аватарами:
class AvatarDescription class AvatarAnimation class AvatarRenderer
struct AvatarExpression
enum AvatarAnimationPreset enum AvatarBodyType enum AvatarBone enum AvatarEye enum AvatarEyebrow enum AvatarMouth
Наибольший интерес представляет класс AvatarDescription. Этот класс позволит Вам создать нового Аватара:
AvatarDescription avatarDescription = AvatarDescription.CreateRandom();
Вы также можете загрузить свой Аватар (или аватар любого игрока) используя SignedInGamer.Avatar:
AvatarDescription avatarDescription = SignedInGamer.SignedInGamers[0].Avatar;
Убедитесь, что Вы добавили GamerServicesComponent для доступа к Аватарам в вашей игре:
Components.Add(new GamerServicesComponent(this));
Рендеринг АватаровТеперь, когда вы знаете, как описывается аватар, вы, вероятно,
хотите быстро получить результаты для их визуализации на экране. К
счастью, Microsoft предоставила отличный фреймворк для быстрой
работы с классом AvatarRenderer. Этот конструктор класса получает описание
аватара и создает хорошую инкапсуляцию для основ рендеринга Аватара.
AvatarRenderer avatarRenderer = new AvatarRenderer(avatarDescription);
У вас есть AvatarRenderer, в который вы можете загрузить в анимацию, перечислив в AvatarAnimationPreset:
public enum AvatarAnimationPreset { Stand0 = 0, Stand1 = 1, Stand2 = 2, Stand3 = 3, Stand4 = 4, Stand5 = 5, Stand6 = 6, Stand7 = 7, Clap = 8, Wave = 9, Celebrate = 10, FemaleIdleCheckNails = 11, FemaleIdleLookAround = 12, FemaleIdleShiftWeight = 13, FemaleIdleFixShoe = 14, FemaleAngry = 15, FemaleConfused = 16, FemaleLaugh = 17, FemaleCry = 18, FemaleShocked = 19, FemaleYawn = 20, MaleIdleLookAround = 21, MaleIdleStretch = 22, MaleIdleShiftWeight = 23, MaleIdleCheckHand = 24, MaleAngry = 25, MaleConfused = 26, MaleLaugh = 27, MaleCry = 28, MaleSurprised = 29, MaleYawn = 30, }
Некоторая анимация предназначены для мужских, а
другая для женских персонажей. avatarDescription.BodyType позволяет легко установить принадлежность в
AvatarAnimationPreset:
public enum AvatarBodyType { Female = 0, Male = 1, }
Давайте сначала рассмотрим, как оживить Ваш Аватар. Сначала нужно загрузить параметры анимации для анимирования: AvatarAnimation waveAnimation = new AvatarAnimation(AvatarAnimationPreset.Wave);
В примерах от Microsoft Вы увидите расширенную технику анимирования. Для простоты остановимся на одной анимации.
Во время игры, вызывается текущий AvatarAnimation для анимирования вашего Аватара:
waveAnimation.Update(gameTime.ElapsedGameTime, true);
Параметр для метода обновления является булевым, в котором вы можете зациклить анимацию или нет.
После того, как обновите анимацию Аватара, Вы получите доступ для работы с костями:
waveAnimation.BoneTransforms;
Основой BoneTransforms является массив матриц, которые используются
для рендеринга Аватара. Вы можете копировать изменения костей
и вручную манипулировать значениями, что реализовано в примерах от
Microsoft.
AvatarRenderer связан с каждым аватаром через World, View и Projection, которые работа с которыми аналогична с BasicEffect:
avatarRenderer.World = world; avatarRenderer.View = view; avatarRenderer.Projection = projection;
Теперь Вы можете рендерить Ваш Аватар:
avatarRenderer.Draw(waveAnimation.BoneTransforms, waveAnimation.Expression);
Примечание: Вы можете копировать данные костей из анимации BoneTransforms
и управлять ими самостоятельно для создания собственной анимации, Вы можете найти примеры реализации на Creators Club.
ЗаключениеРендерить Аватаров в XNA очень просто и система скелетной анимации предоставит все, что вам нужно.
Скачать
Скачать пример Simple Blended Animation с Creators Club
Скачать пример Multiple Animation с Creators Club
Не забудьте прочитать руководство использования аватаров в XNA играх: Руковоство
Источник: http://www.ziggyware.com/readarticle.php?article_id=270 |