rayman3000 Дата: Вторник, 04 Июня 2013, 10:20 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Класс Sprite
Код
namespace Game { class Sprite { public Texture2D spriteTexture; public Vector2 spritePosition; private int frameCount; private double timeFrame; private int frame; private double totalElapsed; public Sprite(int frameCounts, int framesPerSec) { frameCount = frameCounts; timeFrame = (float)1 / framesPerSec; frame = 0; totalElapsed = 0; } public void UpdateFarme(double elapsed) { totalElapsed += elapsed; if (totalElapsed > elapsed) { frame++; frame = frame % (frameCount - 1); totalElapsed -= timeFrame; } } public void Load(ContentManager content, String stringTexture) { spriteTexture = content.Load<Texture2D>(stringTexture); } public void Draw(SpriteBatch spriteBatch) { spriteBatch.Draw(spriteTexture, spritePosition, Color.White); } public void DrawAnimationSprite(SpriteBatch spritebatch) { int frameWight = spriteTexture.Width / frameCount; Rectangle rect = new Rectangle(frameWight * frame, 0, frameWight, spriteTexture.Height); spritebatch.Draw(spriteTexture, spritePosition, rect, Color.White); } } }
Сам Game1
Код
namespace Game { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Sprite sprite; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferHeight = 600; graphics.PreferredBackBufferWidth = 800; sprite = new Sprite(2, 1); } protected override void Initialize() { sprite.spritePosition = new Vector2(200,200); base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); sprite.Load(Content,"Folder\\hero_step"); } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); double elapsed = gameTime.ElapsedGameTime.TotalSeconds; sprite.UpdateFarme(elapsed); base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); sprite.DrawAnimationSprite(spriteBatch); spriteBatch.End(); base.Draw(gameTime); } } }
Когда у меня был спрайт с 4 кадрами все работало. Как только поменял спрайт, в котором 2 кадра, не отрисовывается анимация. Хотя код переделал под 2 кадра. В чем проблема?