Game Programming Class2
Contents
Fonts
free game fonts XNA Redistributable Font Pack
note this font pack is now included in XNA 4
SVN Checkout
All of the examples for this class and the basic game library we wil be building is in our SVN repo this week we'll practice checking out a folder from the repo.
Tools
- Ahnk SVN for Visual Studio http://visualstudiogallery.msdn.microsoft.com/E721D830-7664-4E02-8D03-933C3F1477F2
- TortoiseSVN http://tortoisesvn.net/
Repo for Spring 2016
Trunk : this contains all the old student work as well as my demos so you probably don't want this at least not quite yet
https://iam.colum.edu:8443/svn/GPMonogame3/trunk
Just the Jeff folder
https://iam.colum.edu:8443/svn/GPMonogame3/trunk/jeff
Demos Projects : this is the link to my demos in SVN
https://iam.colum.edu:8443/svn/GPMonogame3/trunk/jeff
tortoisesvn http://tortoisesvn.tigris.org/
ankhsvn http://ankhsvn.open.collab.net/
SNV checkout demo.
In the coming weeks we'll learn how to commit to the SNV. Until then all you need to know is how to checkout.
in class
Spritefont demo
IntroFonts/Game1.cs IntroFonts.zip
XNA Structures
Game Class
The XNA Game class has two private properties
- GraphicsDeviceManager graphics;
- ContentManager content;
Graphics for windows and xbox are 60 fps. XBOx supports NTSC resolutions (480i, 480p, 720p, 1080i and 1080p 1080p is only on newer hdmi models).
//the game constuctor can be used to set some graphics settings. graphics.PreferredBackBufferHeight = 768; graphics.PreferredBackBufferWidth = 1024; //graphics.PreferredBackBufferHeight = 1080; //graphics.PreferredBackBufferWidth = 1920; //graphics.IsFullScreen = true;
Graphics for Mobile Game is 30 fps and 480 x 800.
1 // Frame rate is 30 fps by default for Windows Phone.
2 TargetElapsedTime = TimeSpan.FromTicks(333333);
3
4 // Pre-autoscale settings.
5 graphics.PreferredBackBufferWidth = 480;
6 graphics.PreferredBackBufferHeight = 800;
- Declare SpriteBatch spriteBatch;
- Initialize()
- LoadContent()
- UnloadContent()
- Update(GameTime gameTime)
GameTime
FrameRate and GameTime
Time and Timespan
Example of update using GameTime to calculate elapsed time
- IntroSimpleSpriteUpdateWindows.zip
- IntroSimpleSpriteWindows/Game1.cs
Understanding GameTime We'll revisit game time when we talk about performance profiling.
Time corrected sprite movement
- Draw(GameTime gameTime)
Console And Trace
We will build a console class later and debug in game.
Texture2D and SpriteBatches
simple pacmac bouncing back and forth
1 using System;
2 using Microsoft.Xna.Framework;
3 using Microsoft.Xna.Framework.Graphics;
4 using Microsoft.Xna.Framework.Input;
5
6
7 namespace GameUpdate
8 {
9 /// <summary>
10 /// This is the main type for your game.
11 /// </summar>
12 public class Game1 : Microsoft.Xna.Framework.Game
13 {
14 GraphicsDeviceManager graphics;
15 SpriteBatch spriteBatch;
16
17 Texture2D PacMan;
18 Vector2 PacManLoc; //Pacman location
19 Vector2 PacManDir; //Pacman direction
20 float PacManSpeed; //speed for the PacMan Sprite in pixels per frame per second
21
22 public Game1()
23 {
24 graphics = new GraphicsDeviceManager(this);
25 Content.RootDirectory = "Content";
26
27 //Change the frame fate to 30 Frames per second the default is 60fps
28 //TargetElapsedTime = TimeSpan.FromTicks(333333); // you may need to add using System; to get the TimeSpan function
29 }
30
31 /// <summary>
32 /// Allows the game to perform any initialization it needs to before starting to run.
33 /// This is where it can query for any required services and load any non-graphic
34 /// related content. Calling base.Initialize will enumerate through any components
35 /// and initialize them as well.
36 /// </summary>
37 protected override void Initialize()
38 {
39 // TODO: Add your initialization logic here
40
41 base.Initialize();
42 }
43
44 /// <summary>
45 /// LoadContent will be called once per game and is the place to load
46 /// all of your content.
47 /// </summary>
48 protected override void LoadContent()
49 {
50 // Create a new SpriteBatch, which can be used to draw textures.
51 spriteBatch = new SpriteBatch(GraphicsDevice);
52
53 // TODO: use this.Content to load your game content here
54 PacMan = Content.Load<Texture2D>("pacmanSingle");
55 //Center PacMan
56 PacManLoc = new Vector2(graphics.GraphicsDevice.Viewport.Width / 2,
57 graphics.GraphicsDevice.Viewport.Height / 2); //Start with PacManLoc in the center of the screen
58 PacManDir = new Vector2(1, 0); //start moving left
59
60 PacManSpeed = 20; //initial pacman speed
61
62 }
63
64 /// <summary>
65 /// UnloadContent will be called once per game and is the place to unload
66 /// all content.
67 /// </summary>
68 protected override void UnloadContent()
69 {
70 // TODO: Unload any non ContentManager content here
71 }
72
73 /// <summary>
74 /// Allows the game to run logic such as updating the world,
75 /// checking for collisions, gathering input, and playing audio.
76 /// </summary>
77 /// <param name="gameTime">Provides a snapshot of timing values.</param>
78 protected override void Update(GameTime gameTime)
79 {
80 // Allows the game to exit
81 if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
82 this.Exit();
83
84 // TODO: Add your update logic here
85
86 //Elapsed time since last update will be used to correct movement speed
87 float time = (float)gameTime.ElapsedGameTime.TotalMilliseconds;
88
89
90 //Turn PacMan Around if it hits the edge of the screen
91 if ((PacManLoc.X > graphics.GraphicsDevice.Viewport.Width - PacMan.Width)
92 || (PacManLoc.X < 0)
93 )
94 {
95 PacManDir = Vector2.Negate(PacManDir);
96 }
97
98 //Move PacMan
99 //Simple move Moves PacMac by PacManDiv on every update
100 PacManLoc = PacManLoc + PacManDir * PacManSpeed; //no good not time corrected
101
102 //Time corrected move. MOves PacMan By PacManDiv every Second
103 //PacManLoc = PacManLoc + ((PacManDir * PacManSpeed) * (time/1000)); //Simple Move PacMan by PacManDir
104
105
106
107 base.Update(gameTime);
108 }
109
110 /// <summary>
111 /// This is called when the game should draw itself.
112 /// </summary>
113 /// <param name="gameTime">Provides a snapshot of timing values.</param>
114 protected override void Draw(GameTime gameTime)
115 {
116 graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
117
118 // TODO: Add your drawing code here
119 spriteBatch.Begin();
120 spriteBatch.Draw(PacMan, PacManLoc, Color.White);
121 spriteBatch.End();
122
123 base.Draw(gameTime);
124 }
125 }
About textures and Batching
Displays, ViewPorts, Client Bounds
Alpha channels
Demo
SpriteBatch
demo project
- IntroSimpleSpriteBatchOptionsWindows.zip
spriteBatch.Begin();
- Options SpriteBlendMode
- Additive Enable additive blending. http://blogs.msdn.com/etayrien/archive/2006/12/19/alpha-blending-part-3.aspx
- AlphaBlend Enable alpha blending. http://blogs.msdn.com/etayrien/archive/2006/12/19/alpha-blending-part-2.aspx
- None No blending specified.
Other Projects
IntroSimpleSpriteUpdateGravityWindows.zip IntroSimpleSpriteUpdateWindows.zip
Homework
- XNA Picture With Update
- Update your picture to include some movement with the update method. Use the keyboard or mouse to interact with something on the screen
- Read Chapter 2 in XNA 3.0
- Read Chapter 4 in XNA 3.0 (yes we skipped 3 we'll come back)