Spritesheet в Silverlight - PullRequest
       27

Spritesheet в Silverlight

8 голосов
/ 28 апреля 2011

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

Ответы [ 2 ]

12 голосов
/ 01 мая 2011

Следующее сделает именно то, что вы ищете.Вы можете использовать клавиши Up и Down на клавиатуре для перемещения вперед и назад по анимации.

XAML

<Rectangle x:Name="imgRect">
    <Rectangle.Fill>
        <ImageBrush x:Name="imgBrush" ImageSource="walking_spritesheet.png" Stretch="None" AlignmentX="Left" AlignmentY="Top" />                    
    </Rectangle.Fill>
</Rectangle>

C #

        imgRect.Width = 240; //Set the width of an individual sprite
        imgRect.Height = 296; //Set the height of an individual sprite
        const int ximages = 6; //The number of sprites in each row
        const int yimages = 5; //The number of sprites in each column
        int currentRow = 0;
        int currentColumn = 0;

        TranslateTransform offsetTransform = new TranslateTransform();

        KeyDown += delegate(object sender, KeyEventArgs e)
        {
            switch (e.Key)
            {
                case Key.Up:
                    currentColumn--;
                    if (currentColumn < 0)
                    {
                        currentColumn = ximages -1;
                        if (currentRow == 0)
                        {
                            currentRow = yimages - 1;
                        }
                        else
                        {
                            currentRow--;
                        }
                    }                        
                    break;
                case Key.Down:
                    currentColumn++;
                    if (currentColumn == ximages)
                    {
                        currentColumn = 0;
                        if (currentRow == yimages - 1)
                        {
                            currentRow = 0;
                        }
                        else
                        {
                            currentRow++;
                        }
                    }
                    break;
                default:
                    break;
            }

            offsetTransform.X = -imgRect.Width * currentColumn;
            offsetTransform.Y = -imgRect.Height * currentRow;
            imgBrush.Transform = offsetTransform;

Для тестирования попробуйте использовать следующее изображение (1440x1480): enter image description here

1 голос
/ 17 ноября 2012

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

Если вы хотите использовать Sprite Vortex (на самом деле конкретную версию), вы можете использовать следующий класс.Вы должны использовать Sprite Vortex 1.2.2, потому что в более новых версиях формат XML изменяется.Убедитесь, что добавляемое вами свойство XML-файла изменено на «Не компилировать».

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

класс здесь: http://pastebin.com/sNSa7xgQ

...