Creazione della classe Game1

Come per tutti i progetti di Microsoft XNA, la classe Game1 deriva dalla classe Microsoft.Xna.Framework.Game (la pagina potrebbe essere in inglese), che fornisce l'inizializzazione dei dispositivi grafici di base, la logica del gioco e il codice di rendering per i giochi XNA. La classe Game1 è alquanto semplice perché la maggior parte del lavoro spetta alle classi GamePiece e GamePieceCollection.

Creazione del codice

I membri privati per la classe sono costituiti da un oggetto GamePieceCollection che include le parti del gioco, un oggetto GraphicsDeviceManager (la pagina potrebbe essere in inglese) e un oggetto SpriteBatch (la pagina potrebbe essere in inglese) utilizzato per il rendering delle parti del gioco.

#region PrivateMembers
// Number of game pieces.
private const int GamePieceCount = 6;
// The collection of game pieces.
private GamePieceCollection faces;
// Graphics device manager.
private GraphicsDeviceManager graphics;
// The sprite batch used for rendering game pieces.
private SpriteBatch spriteBatch;
#endregion

Durante l'inizializzazione del gioco, viene creata un'istanza di questi oggetti.

#region ConstructorInitialize
public Game1()
{
    graphics = new GraphicsDeviceManager(this);
    Content.RootDirectory = "Content";
    // This is the default but assigning here explicitly
    // to show that resizing is not supported. The view port
    // boundaries used to bounce a game piece would not be
    // updated if the window was resized.
    Window.AllowUserResizing = false;
}

/// <summary>
/// Allows the game to perform any initialization it needs to before starting to run.
/// </summary>
protected override void Initialize()
{
    IsMouseVisible = true;
    faces = new GamePieceCollection();
    // base.Initialize calls the LoadContent method.
    base.Initialize();
}
#endregion

Quando il metodo LoadContent (la pagina potrebbe essere in inglese) viene chiamato, vengono create le parti del gioco che vengono assegnate all'oggetto GamePieceCollection. Sono disponibili due tipi di parti del gioco. Il fattore di scala per le parti viene modificato leggermente in modo che siano disponibili alcune parti più piccole e altre più grandi.

#region LoadContent
/// <summary>
/// LoadContent will be called once per game. Load all content here.
/// </summary>
protected override void LoadContent()
{
    spriteBatch = new SpriteBatch(GraphicsDevice);

    string filename = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
    string path = System.IO.Path.GetDirectoryName(filename) + @"\Content";

    // Scale pieces from 100% to 160%
    float scale = 1.0f;
    float scaleFactor = 0.60f / ((GamePieceCount/2)-1);
    for (int k = 0; k < GamePieceCount / 2; k++)
    {
        GamePiece face1 = new GamePiece(spriteBatch, path + @"\Face1.png");
        GamePiece face2 = new GamePiece(spriteBatch, path + @"\Face2.png");

        face1.Scale = face2.Scale = scale;
        face1.PieceColor = Color.Green;
        face2.PieceColor = Color.LightSalmon;
        faces.Add(face1);
        faces.Add(face2);
        scale += scaleFactor;
    }
}
#endregion

Il metodo Update (la pagina potrebbe essere in inglese) viene chiamato ripetutamente da XNA Framework durante l'esecuzione del gioco. Il metodo Update (la pagina potrebbe essere in inglese) chiama i metodi ProcessInertia e UpdateFromMouse nell'insieme di parti del gioco. Questi metodi sono descritti in Creazione della classe GamePieceCollection.

#region UpdateGame
/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
    faces.ProcessInertia();
    faces.UpdateFromMouse();
    base.Update(gameTime);
}
#endregion

Anche il metodo Draw (la pagina potrebbe essere in inglese) viene chiamato ripetutamente da XNA Framework mentre il gioco è in esecuzione. Il metodo Draw (la pagina potrebbe essere in inglese) esegue il rendering delle parti del gioco chiamando il metodo Draw dell'oggetto GamePieceCollection. Questo metodo viene descritto inCreazione della classe GamePieceCollection.

#region DrawGame
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);
    spriteBatch.Begin();
    faces.Draw();
    spriteBatch.End();
    base.Draw(gameTime);
}
#endregion

Vedere anche

Concetti

Utilizzo delle modifiche e dell'inerzia in un'applicazione XNA

Creazione della classe GamePiece

Creazione della classe GamePieceCollection

Listati di codice completi

Altre risorse

Modifiche e inerzia