C# 如何将动画添加到播放器?

C# 如何将动画添加到播放器?,c#,xna,monogame,C#,Xna,Monogame,我现在正在做一个射击游戏 我已经设法使我的精灵不断循环动画,但问题是,我现在不知道如何插入我的动画精灵到我的播放器 我不想要任何命令,只需要一个不断循环的动画连接到我的播放器。我是一名编程新手,非常感谢您的帮助 该项目即将到期,因此希望得到一些帮助 Game1: Texture2D myPlayerAnim; Rectangle myDestRect; Rectangle mySourceRect; Texture2D myEnem

我现在正在做一个射击游戏

我已经设法使我的精灵不断循环动画,但问题是,我现在不知道如何插入我的动画精灵到我的播放器

我不想要任何命令,只需要一个不断循环的动画连接到我的播放器。我是一名编程新手,非常感谢您的帮助

该项目即将到期,因此希望得到一些帮助

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);

基于您给出的代码。我想你只需要改变一些事情

首先,直接使用
SpriteSheetPlayerAnim
作为播放器的纹理,而不是使用
player
纹理

然后将玩家动画的
Update
Draw
代码移动到
player
类的
Update
Draw

他们将是这样的:

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);
    }
}
公共类游戏1:游戏
{
玩家;
游戏时间延长;
公共游戏1()
{
//
}
受保护的覆盖void LoadContent()
{
//在这里加载动画精灵
myPlayerAnim=Content.Load(“SpriteSheetPlayerAnim”);
player=newplayer(myelasted,myPlayerAnim,…);//这里有属性的构造函数或任何你想要的
}
受保护覆盖无效更新(游戏时间游戏时间)
{
MyeFassed+=(float)aGameTime.ElapsedGameTime.Total毫秒;
玩家更新(游戏时间);
}
受保护覆盖无效绘制(SpriteBatch SpriteBatch)
{
球员。抽签(斯皮特巴特);
}
}

希望这有帮助

基于您给出的代码。我想你只需要改变一些事情

首先,直接使用
SpriteSheetPlayerAnim
作为播放器的纹理,而不是使用
player
纹理

然后将玩家动画的
Update
Draw
代码移动到
player
类的
Update
Draw

他们将是这样的:

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);
    }
}
公共类游戏1:游戏
{
玩家;
游戏时间延长;
公共游戏1()
{
//
}
受保护的覆盖void LoadContent()
{
//在这里加载动画精灵
myPlayerAnim=Content.Load(“SpriteSheetPlayerAnim”);
player=newplayer(myelasted,myPlayerAnim,…);//这里有属性的构造函数或任何你想要的
}
受保护覆盖无效更新(游戏时间游戏时间)
{
MyeFassed+=(float)aGameTime.ElapsedGameTime.Total毫秒;
玩家更新(游戏时间);
}
受保护覆盖无效绘制(SpriteBatch SpriteBatch)
{
球员。抽签(斯皮特巴特);
}
}

希望这有帮助

请不要问同一个问题两次。请不要问同一个问题两次。