Сейчас я делаю стрелялку в моногейме.
Мне удалось сделать постоянно повторяющуюся анимацию с моим спрайтом, но проблема в том, что теперь я не знаю, как вставить мой анимированный спрайт в 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);





На основании вашего кода, который вы дали. Я думаю, вам просто нужно изменить некоторые вещи.
Во-первых, используйте 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);
}
}
Надеюсь это поможет!
Пожалуйста, не задавайте один и тот же вопрос дважды.