6. SpriteBatch
• Create a Place to Store the Images In Game
private Texture2D background;
private Texture2D shuttle;
private Texture2D earth;
7. SpriteBatch
• Create a Place to Store the Images In Game
• LoadContent() method
private Texture2D background;
private Texture2D shuttle;
private Texture2D earth;
background = Content.Load<Texture2D>("stars");
shuttle = Content.Load<Texture2D>("shuttle");
earth = Content.Load<Texture2D>("earth");
11. SpriteBatch
• SpriteBatches Declaration
• Initializing in LoadContent()
SpriteBatch spriteBatch;
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here
}
12. SpriteBatch
• Drawing with SpriteBatches
spriteBatch.Begin();
spriteBatch.Draw(background, new Rectangle(0, 0, 800, 480), Color.White);
spriteBatch.End();
13. SpriteBatch
• Drawing with SpriteBatches
spriteBatch.Begin();
spriteBatch.Draw(background, new Rectangle(0, 0, 800, 480), Color.White);
spriteBatch.End();
14. SpriteBatch
• A Few More Sprites
spriteBatch.Begin();
spriteBatch.Draw(background, new Rectangle(0, 0, 800, 480), Color.White);
spriteBatch.Draw(earth, new Vector2(400, 250), Color.White);
spriteBatch.Draw(shuttle, new Vector2(450, 250), Color.White);
spriteBatch.End();
15. SpriteBatch
• A Few More Sprites
spriteBatch.Begin();
spriteBatch.Draw(background, new Rectangle(0, 0, 800, 480), Color.White);
spriteBatch.Draw(earth, new Vector2(400, 250), Color.White);
spriteBatch.Draw(shuttle, new Vector2(450, 250), Color.White);
spriteBatch.End();
16. SpriteBatch
• A Few More Sprites
spriteBatch.Begin();
spriteBatch.Draw(background, new Rectangle(0, 0, 800, 480), Color.White);
spriteBatch.Draw(earth, new Vector2(400, 250), Color.White);
spriteBatch.Draw(shuttle, new Vector2(450, 250), Color.White);
spriteBatch.End();
You can find this in
“App1-SimpleTextures”
19. Acquiring Fonts
• Down at about line 14 in the new created file you will see the following:
• You can use any font you want that’s installed in your system
• Fonts can be installed by dragging the font file to your Fonts folder, which is
located in C:/Windows/Fonts
<FontName>Segoe UI Mono</FontName>
20. Acquiring Fonts
• Down at about line 14 in the new created file you will see the following:
<FontName>Segoe UI Mono</FontName>
21. Acquiring Fonts
• Down at about line 14 in the new created file you will see the following:
• Also look down at line 20, where it says:
<FontName>Segoe UI Mono</FontName>
<Size>14</Size>
22. Acquiring Fonts – the using of
• Global Scope
private SpriteFont font;
private int score = 0;
23. Acquiring Fonts – the using of
• Global Scope
• LoadContent()
private SpriteFont font;
private int score = 0;
font = Content.Load<SpriteFont>("Score"); // Use the name of your font here instead of 'Score'.
24. Acquiring Fonts – the using of
• Global Scope
• LoadContent()
• Draw()
private SpriteFont font;
private int score = 0;
font = Content.Load<SpriteFont>("Score"); // Use the name of your font here instead of 'Score'.
spriteBatch.Begin();
spriteBatch.DrawString(font, "Score", new Vector2(100, 100), Color.Black);
spriteBatch.End();
26. Acquiring Fonts – the using of
• Enhancing visual with Update() method
27. Acquiring Fonts – the using of
• Enhancing visual with Update() method
score++;
28. Acquiring Fonts – the using of
• Enhancing visual with Update() method
• Now let's replace our original spriteBatch.DrawString() line with the following:
score++;
spriteBatch.DrawString(font, "Score: " + score, new Vector2(100, 100), Color.Black);
33. Texture Atlases
• Creating an AnimatedSprite Class
• Class scope members
public class AnimatedSprite
public Texture2D Texture { get; set; }
public int Rows { get; set; }
public int Columns { get; set; }
private int currentFrame;
private int totalFrames;
34. Texture Atlases
• Update() method
public void Update()
{
currentFrame++;
if (currentFrame == totalFrames)
currentFrame = 0;
}
35. Texture Atlases
• Draw() method
public void Draw(SpriteBatch spriteBatch, Vector2 location)
{
int width = Texture.Width / Rows;
int height = Texture.Height / Columns;
int row = (int)((float)currentFrame / (float)Columns);
int column = currentFrame % Columns;
Rectangle sourceRectangle = new Rectangle(width * column, height * row, width, height);
Rectangle destinationRectangle = new Rectangle((int)location.X, (int)location.Y, width, height);
spriteBatch.Begin();
spriteBatch.Draw(Texture, destinationRectangle, sourceRectangle, Color.White);
spriteBatch.End();
}
36. Texture Atlases
• Draw() method
public void Draw(SpriteBatch spriteBatch, Vector2 location)
{
int width = Texture.Width / Rows;
int height = Texture.Height / Columns;
int row = (int)((float)currentFrame / (float)Columns);
int column = currentFrame % Columns;
Rectangle sourceRectangle = new Rectangle(width * column, height * row, width, height);
Rectangle destinationRectangle = new Rectangle((int)location.X, (int)location.Y, width, height);
spriteBatch.Begin();
spriteBatch.Draw(Texture, destinationRectangle, sourceRectangle, Color.White);
spriteBatch.End();
}
37. Texture Atlases
• Draw() method
public void Draw(SpriteBatch spriteBatch, Vector2 location)
{
int width = Texture.Width / Rows;
int height = Texture.Height / Columns;
int row = (int)((float)currentFrame / (float)Columns);
int column = currentFrame % Columns;
Rectangle sourceRectangle = new Rectangle(width * column, height * row, width, height);
Rectangle destinationRectangle = new Rectangle((int)location.X, (int)location.Y, width, height);
spriteBatch.Begin();
spriteBatch.Draw(Texture, destinationRectangle, sourceRectangle, Color.White);
spriteBatch.End();
}
48. Rotating Sprites
• Preparing the Content
• In LoadContent() method
• In Update() method
private Texture2D arrow;
private float angle = 0;
// use the name of your texture here, if you are using your own
arrow = Content.Load<Texture2D>("arrow");
angle += 0.01f;
56. Using a Center Point for Rotation
• In Draw(), change
Vector2 origin = new Vector2(0, 0);
Vector2 origin = new Vector2(arrow.Width / 2, arrow.Height);
• To
66. 2D Particle Engine
• Anatomy of a Particle Engine
– particles,
– particle emitter,
67. 2D Particle Engine
• Anatomy of a Particle Engine
– particles,
– particle emitter,
– the engine itself
68. 2D Particle Engine
• Anatomy of a Particle Engine
– particles
• Velocity
– particle emitter,
– the engine itself
69. 2D Particle Engine
• Anatomy of a Particle Engine
– particles
• Velocity, Angles
– particle emitter,
– the engine itself
70. 2D Particle Engine
• Anatomy of a Particle Engine
– particles
• Velocity, Angles
– particle emitter
• Location that the particles are coming from
– the engine itself
71. 2D Particle Engine
• Anatomy of a Particle Engine
– particles
• Velocity, Angles
– particle emitter
• Location that the particles are coming from
• Responsible for determining how many particles will be created at any given time
– the engine itself
72. 2D Particle Engine
• Anatomy of a Particle Engine
– particles
• Velocity, Angles
– particle emitter
• Location that the particles are coming from
• Responsible for determining how many particles will be created at any given time
– the engine itself
• Manages the state of the previous two components
73. 2D Particle Engine
• Anatomy of a Particle Engine
– particles
• Velocity, Angles
– particle emitter
• Location that the particles are coming from
• Responsible for determining how many particles will be created at any given time
– the engine itself
• Manages the state of the previous two components
• Responsible for removing dead particles from the system
74. 2D Particle Engine
• Anatomy of a Particle Engine
– particles
• Velocity, Angles
– particle emitter
• Location that the particles are coming from
• Responsible for determining how many particles will be created at any given time
– the engine itself
• Manages the state of the previous two components
• Responsible for removing dead particles from the system.
79. 2D Particle Engine
Public class Particle
public Texture2D Texture { get; set; }
public Vector2 Position { get; set; }
public Vector2 Velocity { get; set; }
public float Angle { get; set; }
public float AngularVelocity { get; set; }
public Color Color { get; set; }
public float Size { get; set; }
public int TTL { get; set; }
• Particle
• The Particle's Properties
80. 2D Particle Engine
• Particle
• The Particle's Properties
Public class Particle
public Texture2D Texture { get; set; }
public Vector2 Position { get; set; }
public Vector2 Velocity { get; set; }
public float Angle { get; set; }
public float AngularVelocity { get; set; }
public Color Color { get; set; }
public float Size { get; set; }
public int TTL { get; set; }
81. 2D Particle Engine
• Particle
• The Particle's Properties
Public class Particle
public Texture2D Texture { get; set; }
public Vector2 Position { get; set; }
public Vector2 Velocity { get; set; }
public float Angle { get; set; }
public float AngularVelocity { get; set; }
public Color Color { get; set; }
public float Size { get; set; }
public int TTL { get; set; }
95. 2D Particle Engine
• In Update()
• In Draw()
particleEngine.EmitterLocation = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
particleEngine.Update();
96. 2D Particle Engine
• In Update()
• In Draw()
particleEngine.EmitterLocation = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
particleEngine.Update();
particleEngine.Draw(spriteBatch);
97. 2D Particle Engine
• In Update()
• In Draw()
particleEngine.EmitterLocation = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
particleEngine.Update();
particleEngine.Draw(spriteBatch);
98. 2D Particle Engine
• Test it, Very nice!
• Can easily be ported to windows phone!
– Visit my mobile crash course on slideshare / Windows Phone slide:
http://www.slideshare.net/ZGTRZGTR/mobile-software-engineering-crash-course-c06-windowsphone/
• App-2DParticleEngines
• You can test it on Windows Mobile!