Silverlight: Разработка MMORPG. 2D спрайт-анимация (Part 1)

среда, 3 марта 2010, Евгений Жарков

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

 Прежде всего, мне нужно заменить объект живым спрайтом. Я подготовил несколько изображений последовательной анимации бега:

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

Все 8 изображений должны быть одинакового размера - 150x150. Silverlight не поддерживает GIF-анимацию, нам остается использовать PNG формат для изображений, сохраняя изображения с прозрачным фоном. Название файлов будет от 0 до 7, так будет проще контролировать анимацию.

После приготовления всех изображений, скопируйте их в проект и задайте параметру "Build Action" значение "Content", а так же "Copy to Output Directory" - "Copy if newer".

image image

Теперь можно взяться за код и заставить спрайт двигаться:

 public partial class MainPage : UserControl
{
    private int count = 1;
    private Image sprite;

    public MainPage()
    {
        InitializeComponent();

        sprite = new Image()
        {
            Width = 150,
            Height = 150
        };

        Carrier.Children.Add(sprite);

        //инициализация DispatcherTimer
        DispatcherTimer dispatcherTimer = new DispatcherTimer();
        dispatcherTimer.Tick += dispatcherTimer_Tick;
        dispatcherTimer.Interval = TimeSpan.FromMilliseconds(150);
        dispatcherTimer.Start();
    }

    void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        sprite.Source = new BitmapImage(new Uri(@"/Images/Role/" + count + ".png", UriKind.Relative));

        count = count == 7 ? 0 : count + 1;
    }
}

В приведенном выше коде, я объявил переменную с именем "count" для хранения текущего кадра, чтобы знать какая картинка отображается на данный момент. Далее я создал элемент управления Image c именем "sprite" и закинул его в Carrier, как дочерний элемент.

В 2D спрайт-анимации, мы всегда используем DispatcherTimer для контроля действия спрайта. Мы реализовали переключение картинок в методе dispatcherTimer_Tick, изображение изменяется каждые 150 мс, и если счетчик достигает 7, то анимация дошла до последнего кадра и нужно перепрыгнуть на начальный кадр, поэтому мы устанавливаем count=0, в простом случае count увеличивается на 1. Таким образом анимация идет по кругу.

Отлично, жмём Ctrl+F5, спрайт "бежит", по перемещается по холсту.

Итого

Данная глава объяснила вам, как реализовать собственную анимацию объекта.

В следующей главе я представлю другой способ достижения такого же эффекта. Следите за новостями.

Демо к данной главе можно загрузить тут

Источник - Jianqiang Bao


Ищите нас в интернетах!

Комментарии

Свежие вакансии