xna for fun and profit st bede’s college - squarespace · xna for fun and profit st bede’s...
TRANSCRIPT
XNA for Fun and Profit
St Bede’s College
Rob Miles
Department of Computer Science
University of Hull
2
Agenda
• Computer Games
– How Computer Games work
• XNA
– What is XNA?– The XNA Framework– Very Silly Games– Making a game in sixty minutes
• Why everyone should be writing games!
3
The Video Game Business
• Bigger than the movies?
– GTA4 sales topped half a billion dollars in its first week of release, 5 times the earnings of the Iron Man movie
• Set to grow even more?
– It is now easy (and cheap) to write a game in your bedroom and make it available to every Xbox Live subscriber in the world
– The games industry is looking for new kind of games
4
• Games that are very silly and sociable
• Easy to create and understand
• Mainly for multiple players
• Some games are “Zero Graphics”
• Based on examples in:
Learn Programming Now! with Microsoft® XNA™ Game Studio 3.0
by
Rob Miles
“Hide the Gamepad”
6
Sample XNA 2D game“Bread and Cheese”
• We are going to make a simple “casual” game
• The player guides the cheese around with the bread, hitting the tomatoes but avoiding the peppers and tangerines
• This is a simple, 2D, sprite based game
“Bread and Cheese”
8
Computer Game Construction
• Every game that has ever been written does these things:
1. Initialise all the resources at the start
• This is where the “Loading” screen comes from
2. Repeatedly runs the game loop:
a) Update the game world
• read the controllers, update the state and position of the things in the game
b) Draw the game word for the player to see
• Display the game elements on the screen
9
Starting with our Cheese
• To begin writing our game we can make some cheese bounce around the screen
• To draw some cheese the game needs to remember two things
– The picture to draw– The position on the screen to draw it
• In programs these are called variables
Texture2D cheeseTexture;
Rectangle cheeseRectangle;
10
Games and Resources
• Modern games contain thousands of content items:
– Pictures – Sounds– 3D models– Scripts
• A game has to manage all these items so that the program can find and use them cheeseTexture =
Content.Load<Texture2D>("Cheese");
11
Loading the Cheese Texture
• A game is made up of things that hold information (the variables) and things that do stuff (the methods)
• LoadContent is a method that is called when our game
starts running
• It loads our cheese texture and makes it available for use in the game
protected override void LoadContent()
{
cheeseTexture = Content.Load<Texture2D>("Cheese");
cheeseRectangle = new Rectangle (0, 0, 100,100);
}
12
Games and Rectangles
• The Rectangle tells us where on the screen the texture is to be drawn
• It gives the position and the size of the draw operation
Creating a Bank Class
x,y
width
height
13
Positioning the Cheese Texture
• This will draw our cheese image at the top left hand corner and the cheese will be 100 pixels wide and 100 pixels high
• Unlike graph paper, with computer graphics the position of (0,0) is the top left hand corner of the screen
– Increasing the value of Y moves the rectangle down– Increasing the value of X moves the rectangle across
protected override void LoadContent()
{
cheeseTexture = Content.Load<Texture2D>("Cheese");
cheeseRectangle = new Rectangle (0, 0, 100,100);
}
14
Drawing the Game World
• Now we have our cheese we want to draw it for the player to see
• The game contains a Draw method that is called draw the game display on the screen
• We need to add some program code to tell draw to put our cheese on the screen
• This code will send commands to the Graphics Card in the computer to make it draw the texture
Creating a Bank Class
15
XNA Game Drawing
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(cheeseTexture, cheeseRectangle,
Color.White );
spriteBatch.End();
base.Draw(gameTime);
}
• This version of the Draw method clears the screen to blue and then draws the cheese
“Cheese Drawing”
Making things move with the Update method
• At the moment the cheese is always drawn at the same place
• We need to make it move about the screen
• Games do this by having an Update behaviour that makes the game world work
– In a racing game this means moving all the cars on the track, checking for collisions etc
– In a shooting game this means moving all the players, checking to see if any bullets have hit anything etc
• At the moment we are just going to make our cheese move
18
Stupid XNA Game Update
• We have two integer variables that hold the speed of our cheese
• They are used to update the position of the cheese rectangle when Update is called
int cheeseXSpeed = 3;
int cheeseYSpeed = 3;
protected override void Update()
{
cheeseRectangle.X = cheeseRectangle.X + cheeseXSpeed;
cheeseRectangle.Y = cheeseRectangle.Y + cheeseYSpeed;
}
“Cheese Moving”
20
Adding some Bounce to the Cheese
• We want the cheese to bounce off the edge of the screen
• We can do this by changing the sign of the speed value
protected override void Update()
{
cheeseRectangle.X = cheeseRectangle.X + cheeseXSpeed;
if (cheeseRectangle.X < 0 ||
cheeseRectangle.Right > GraphicsDevice.Viewport.Width)
{
cheeseXSpeed = cheeseXSpeed * -1;
}
// Repeat for Y
}
“Cheese Bouncing”
22
Creating a bread bat
• Now we need to create a bat texture and then allow the player to control it
• XNA provides support for keyboard and XBOX 360 gamepad
– You can plug a wired gamepad into an PC and it will just work
– You can also get a USB adapter so you can use wireless gamepads
• The gamepad buttons can be tested during the update method
23
XNA Digital Gamepad Input
GamePadState padState = GamePad.GetState(PlayerIndex.One);
if (padState.IsConnected)
{
if (padState.DPad.Left == ButtonState.Pressed)
{
breadRectangle.X = breadRectangle.X - breadSpeed;
}
if (padState.DPad.Right == ButtonState.Pressed)
{
breadRectangle.X = breadRectangle.X + breadSpeed;
}
/// repeat for bread Y position
}
24
XNA Analogue Gamepad Input
• This code uses the analogue input of the left thumbstick to update the position of the bread rectangle
int padXSpeed = 10;
int padYSpeed = 10;
if (pad.IsConnected)
{
breadRectangle.X +=
(int) (pad.ThumbSticks.Left.X * padXSpeed);
breadRectangle.Y -=
(int) (pad.ThumbSticks.Left.Y * padYSpeed);
}
25
Hitting the Cheese
• This code reverses the vertical direction of the cheese when it hits the bread
• It works by detecting when the cheese and bread rectangles intersect
• This is a very simple kind of collision detection
if ( breadRectangle.Intersects(cheeseRectangle))
{
cheeseYSpeed = cheeseYSpeed * -1;
}
26
Adding Sound
• The sound effect is a WAV file
// Sound effect variable
SoundEffect ding;
// Load the sound effect content in LoadContent
ding = Content.Load<SoundEffect>("Ding");
// Play the sound effect when the bread hits the cheese
if ( breadRectangle.Intersects(cheeseRectangle))
{
cheeseYSpeed *= -1;
ding.Play();
}
27
Playing Music
• The Music resource is an MP3 file
• Can also play WMA files and music from the media on the device
// Song variable
Song music;
// Load the song content in LoadContent
music = Content.Load<Song>("Music");
// Play the song using the Media Player
MediaPlayer.Play(music);
“Bread and Cheese”Rob Miles
29
Getting Started with XNA
• All the software is free:
– Visual Studio 2008 Express Edition– XNA Game Studio 3.1
• Games can be run on the XBOX 360
– You need to join the "Creators Club" in order to do this– Students can get free membership through DreamSpark
• Visit robmiles.com for details on how to get started
30
Selling your Games
• You can put your XNA games onto Xbox Live
• All Xbox Live subscribers are able to download and play XNA games you have written
• You can even charge money for them
31
Summary
• The XNA Framework provides a very powerful environment for game creation
– Write games for your Xbox or PC in C# using Visual Studio
• You should all be writing games
– It is easy to do– It is fun!– You might make some money!
32
Resources
• XNA Creators Club:
http://creators.xna.com/
• DreamSpark
https://downloads.channel8.msdn.com/
• Microsoft XNA blogs
http://blogs.msdn.com/xna/
• All the sample code and resource links:
http://www.robmiles.com
• Very Silly Games and book links:
http://verysillygames.com