2016-04-16 4 views
0

У меня есть лист спрайтов, который содержит цикл прохождения персонажа, и я создал класс игрока, который позволяет игроку перемещаться и перемещаться по анимации ходьбы, однако анимация работает только при ходьбе справа. Я использую клавиши со стрелками для перемещения вверх, вниз, влево и вправо, то есть когда я нажимаю любую клавишу, мой игрок перемещается в правильном направлении, но только выполняет анимацию ходьбы вправо.Monogame - класс Sprite

Текущая анимация, которая работает, было названо, как это в LoadContent() функции:

spritesheet = Content.Load<Texture2D>("sprites2"); 

player = new Player(spritesheet, new Rectangle(0, 96, 32, 48), 
new Vector2(100, 100), 4); 

Это делает свою работу, так как она вызывает каждые 4 спрайты для завершения анимации ходьбы вправо, и new Rectangle(0,96,32,48) является место, вырезанное из листа спрайта. Однако мне нужно (например) new Rectangle(30, 101, 65, 52) также использовать, который будет правильно анимировать мой персонаж, когда нажата клавиша .

Мой вопрос: как я могу получить другое место загрузки спрайта, а затем на самом деле работать, когда я нажимаю правильный ключ?

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

ответ

1

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

В классе анимации, вы можете настроить List<Rectangle> для каждой анимации, MoveUp, MoveDown, MoveLeft, MoveRight и т.д., а затем вызвать метод PlayAnimation() из вашего Player класса всякий раз, когда ваш игрок выполняет одно из этих действий.

Если вам нужно, чтобы каждый кадр имел больше информации, чем только для отображения Rectangle (например, если кадры меняются), вы можете создать класс Frame для хранения этой информации.