Таблица спрайтов в Silverlight

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


person Skoder    schedule 28.04.2011    source источник
comment
Вы видели этот пост? Похоже, это примерно одно и то же: stackoverflow .com / questions / 745541 /   -  person LueTm    schedule 30.04.2011


Ответы (2)


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

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): введите описание изображения здесь

person NakedBrunch    schedule 30.04.2011
comment
@Skoder: Отлично. Позвольте мне знать, если у вас есть какие-либо другие вопросы. - person NakedBrunch; 02.05.2011

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

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

Если вам нужен рабочий пример, я могу послать вам очень простой.

p.s. Sprite Vortex должен делать то же самое, что и другая программа, однако в версии 1.2.2 довольно много ошибок, но не так уж плохо.

класс находится здесь: http://pastebin.com/sNSa7xgQ

person ramboCODER    schedule 17.11.2012