XNA Example with a Bouncing Sprite

From IronPython Cookbook

Taken from this forum post.

This is a 'sprite bouncing' example, using the XNA Game Development Framework. You will need to install the XNA Framework Redistributable, as well as the DirectX End-User Runtimes.

XNA is a framework for writing games on the PC and the XBox 360. Because the XBox uses the Compact Edition of .NET, it doesn't yet support IronPython - although hopefully this will change.

The example also requires the following image, as 'sprite.jpg' in the directory from which it is run:

Sprite Image

When running, it looks like this (except bigger and moving):

The Running XNA Example

Although this example doesn't crash when using Python.NET, it doesn't really work either (you just see a screen full of static).

import clr
clr.AddReference('Microsoft.Xna.Framework')
clr.AddReference('Microsoft.Xna.Framework.Game')

from Microsoft.Xna.Framework import *
from Microsoft.Xna.Framework.Graphics import *
from Microsoft.Xna.Framework.Content import *

class MyGame(Game):
    def __init__(self):
        self.spriteX = self.spriteY = 0
        self.spriteSpeedX = self.spriteSpeedY = 1
        self.initializeComponent()

    def initializeComponent(self):
        self.graphics = GraphicsDeviceManager(self)
        self.content = ContentManager(self.Services)

    def LoadGraphicsContent(self, loadAllContent):
        if loadAllContent:
            self.texture = Texture2D.FromFile(self.graphics.GraphicsDevice, "sprite.jpg")
            self.spriteBatch = SpriteBatch(self.graphics.GraphicsDevice)
           
    def UnloadGraphicsContent(self, unloadAllContent):
        if unloadAllContent:
            self.texture.Dispose()
            self.spritebatch.Dispose()

    def Update(self, gameTime):
        self.UpdateSprite()
       
        Game.Update(self, gameTime)

    def UpdateSprite(self):       
        self.spriteX += self.spriteSpeedX
        self.spriteY += self.spriteSpeedY

        maxX = self.graphics.GraphicsDevice.Viewport.Width - self.texture.Width
        if self.spriteX > maxX:
            self.spriteSpeedX *= -1
            self.spriteX = maxX
        elif self.spriteX < 0:
            self.spriteSpeedX *= -1
            self.spriteX = 0

        maxY = self.graphics.GraphicsDevice.Viewport.Height - self.texture.Height
        if self.spriteY > maxY:
            self.spriteSpeedY *= -1
            self.spriteX = maxY
        elif self.spriteY < 0:
            self.spriteSpeedY *= -1
            self.spriteY = 0

    def Draw(self, gameTime):
        self.graphics.GraphicsDevice.Clear(Color.CornflowerBlue)
       
        self.DrawSprite()
       
        Game.Draw(self, gameTime)
       
    def DrawSprite(self):
        self.spriteBatch.Begin()
        self.spriteBatch.Draw(self.texture, Rectangle(self.spriteX, self.spriteY, self.texture.Width, self.texture.Height), Color.White)
        self.spriteBatch.End()


game = MyGame()
game.Run()


Back to Contents.

TOOLBOX
LANGUAGES