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)
{
球员。抽签(斯皮特巴特);
}
}
希望这有帮助 请不要问同一个问题两次。请不要问同一个问题两次。