Как добавить анимацию в плеер?

Сейчас я делаю стрелялку в моногейме.

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

Мне не нужны никакие команды, только постоянно зацикленная анимация, прикрепленная к myPlayer. Я новичок в программировании, поэтому помощь очень ценится.

Этот проект скоро появится, так что хотелось бы помощи.

Game1:
        Texture2D myPlayerAnim;
        Rectangle myDestRect;
        Rectangle mySourceRect;
        Texture2D myEnemyAnim;
        Rectangle myEnemyDestRect;
        Rectangle myEnemySourceRect;
        float myElapsed;
        float myDelay = 100f;
        int myFrames = 0;

Initialize:
            myDestRect = new Rectangle(0, 0, 512, 512);
            myEnemyDestRect = new Rectangle(0, 0, 808, 608);

LoadContent: 

            myPlayerAnim = Content.Load<Texture2D>("SpriteSheetPlayerAnim");
            myEnemyAnim = Content.Load<Texture2D>("SpriteSheetEnemyAnim");

Update:    
            myElapsed += (float)aGameTime.ElapsedGameTime.TotalMilliseconds;

            if (myElapsed >= myDelay)
            {
                if (myFrames >= 3)
                {
                    myFrames = 0;
                }
                else
                {
                    myFrames++;
                }
                myElapsed = 0;
            }

            mySourceRect = new Rectangle(512 * myFrames, 0, 512, 512);
            myEnemySourceRect = new Rectangle(808 * myFrames, 0, 808, 608);

Draw: 

            mySpriteBatch.Draw(myPlayerAnim, myDestRect , mySourceRect, 
            Color.White);
            mySpriteBatch.Draw(myEnemyAnim, myEnemyDestRect, myEnemySourceRect, 
            Color.White);

В настоящее время Draw рисует только анимацию, потому что она ни к чему не привязана.

в настоящее время к myPlayer прикреплен только один png, а не моя анимация.

Draw: 
myPlayer = new Player(TextureLibrary.GetTexture("player"), myPlayerPos, 200, new Vector2(.3f, .3f), 0, Color.White, 1000, 1);

Пожалуйста, не задавайте один и тот же вопрос дважды.

Strom 31.05.2019 04:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
161
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На основании вашего кода, который вы дали. Я думаю, вам просто нужно изменить некоторые вещи.

Во-первых, используйте SpriteSheetPlayerAnim в качестве текстуры вашего игрока напрямую вместо использования текстуры player.

Затем переместите код Update и Draw анимации игрока в Update и Draw класса Player.

Они будут такими:

public class Player
{
    //Default constructor
    public Player()
    {
        //default values for your player//for example only
        //this.hp = 100;
        //this.mp = 20;
    }

    //Constructor
    public Player(GameTime myelapsedGameTime, Texture2D texPlayer, Vector2 playerPosition, int something, Vector2 vector2ForSomething, int intFST, Color playerColor, ...)
    {
        //initialise player's attributes

    }

    public override Update(GameTime gameTime)
    {
        if (myElapsed >= myDelay)
        {
            if (myFrames >= 3)
            {
                myFrames = 0;
            }
            else
            {
                myFrames++;
            }
            myElapsed = 0;
        }
    }

    public override Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(myPlayerAnim, myDestRect , mySourceRect, 
            Color.White);//for example
    }
}

Затем в вашем классе Game1:

public class Game1 : Game
{
    Player player;
    GameTime myElapsed;

    public Game1()
    {
        //
    }

    protected override void LoadContent()
    {
        //Load your animated sprite here
        myPlayerAnim = Content.Load<Texture2D>("SpriteSheetPlayerAnim");

        player = new Player(myElapsed, myPlayerAnim, ...);//constructor with attributes here or whatever you want
    }

    protected override void Update(GameTime gameTime)
    {
        myElapsed += (float)aGameTime.ElapsedGameTime.TotalMilliseconds;
        player.Update(gameTime);
    }

    protected override void Draw(SpriteBatch spriteBatch)
    {
        player.Draw(spriteBatch);
    }
}

Надеюсь это поможет!

Другие вопросы по теме