Παρασκευή 24 Δεκεμβρίου 2010

XNA - Ξεκινώντας το project μας

Μάθημα 2ο

  • Αρχικά πρέπει να εξηγηθεί ένα μέρος του κώδικα. Βλέπουμε δύο κλάσεις, την Program.cs και την Game1.cs. Η εκτέλεση του προγράμματος ξεκινάει στην κλάση Program που περιέχει την μέθοδο main. Εκεί δημιουργούμε ένα αντίγραφο της κλάσης Game1 και καλούμε την μέθοδο της Run.


  • Ο constructor Game1 καλείται στην αρχή της δημιουργίας της κλάσης Game1. Χρησιμοποιείται για να φορτωθούν κάποιες μεταβλητές τις οποίες χρειάζεται το XNA framework.

    Η Initialize μέθοδος καλείται επίσης μία φορά στην αρχή του παιχνιδιού, και πρέπει ότι θέλουμε να αρχικοποιήσουμε να μπει εκεί πέρα.

    Η LoadContent μέθοδος καλείται για να εισάγουμε media στο πρόγραμμα μας(όπως εικόνες και ήχους) καθώς και δεδομένα για την κάρτα γραφικών μας. (η unload προφανώς κάνει την αντίθετη δουλειά, αλλά προς το παρόν δεν μας χρειάζεται)

    Η Update μέθοδος, η οποία καλείται 60 φορές κάθε δευτερόλεπτο. Εδώ μπαίνει ο κώδικας που ανανεώνεται συνέχεια(διάβασμα από το πληκτρολόγιο, ανανέωση θέσης αντικειμένων κτλ)

    Η Draw μέθοδος, η οποία καλείται όσο γρήγορα όσο επιτρέπει ο υπολογιστής μας (κυρίως η κάρτα γραφικών μας). Εδώ μπαίνει κώδικας που σχεδιάζει κάτι στην οθόνη μας.

  • Ας μιλήσουμε για την συσκευή γραφικών (μεταβλητή στο πρόγραμμα μας). Γενικά, μια συσκευή είναι ένας άμεσος σύνδεσμος με την κάρτα γραφικών ο οποίος μας δίνει πρόσβαση στις λειτουργίες της. Επειδή πρέπει να γράφουμε graphics.GraphicsDevice κάθε φορά που θέλουμε πρόσβαση σε αυτήν την μεταβλητή, προτιμούμε να φτιάξουμε μια δική μας μεταβλητή, την Gdevice, ώστε να έχουμε πιο γρήγορη πρόσβαση...

    Στην αρχή της κλάσης γράφουμε:
    GraphicsDevice Gdevice;

    Οπότε στην μέθοδο LoadContent γράφουμε:
    Gdevice = graphics.GraphicsDevice;


  • Τώρα θέλουμε να αλλάξουμε λίγο κάποια πράγματα όπως το μέγεθος του παραθύρου οπότε στην αρχή της μεθόδου Initialize γράφουμε:
    graphics.PreferredBackBufferWidth = 500; 
    graphics.PreferredBackBufferHeight = 500;

    Το BackBuffer περιέχει αυτά που θα σχεδιάσουμε στην οθόνη. Μόλις αλλάξαμε το μέγεθος του.
    graphics.IsFullScreen = false;

    Δεν θέλουμε fullscreen mode...
    graphics.ApplyChanges();

    Πρέπει να καλέσουμε αυτήν την μέθοδο ώστε να ενεργοποιηθούν οι αλλαγές.
    Window.Title = "Το αλμυρό φυστίκι";

    Αλλάζουμε τον τίτλο του παραθύρου.



  • Μάθαμε λοιπόν πως να ξεκινάμε ένα project με το XNA...
Το 2ο μάθημα έφτασε στο τέλος του.

Ασκήσεις για εξάσκηση:
  1. Αλλάξετε το παράθυρο σε 800x600 ανάλυση
  2. Χρησιμοποιήστε fullscreen mode (alt-F4 για να κλείσει)
  3. Δοκιμάστε να βγάλετε το ApplyChanges από το πρόγραμμα
  4. Βάλτε έναν δικό σας τίτλο στο παράθυρο

Πηγές: Riemer's Tutorial

_________________________________________

Απλοποιημένος κώδικας (χωρίς περιττά σχόλια)



using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace SandboxGame
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        GraphicsDevice Gdevice;

        // Constructor
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        // Init
        protected override void Initialize()
        {
            graphics.PreferredBackBufferHeight = 600;
            graphics.PreferredBackBufferWidth = 800;
            graphics.IsFullScreen = false;
            graphics.ApplyChanges();
            Window.Title = "Το αλμυρό φυστίκι";

            base.Initialize();
        }

        // Load Content
        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            Gdevice = graphics.GraphicsDevice;
        }

        protected override void UnloadContent()
        {

        }

        // Update (60 times per second)
        protected override void Update(GameTime gameTime)
        {
            base.Update(gameTime);
        }

        // Draw
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            base.Draw(gameTime);
        }
    }
}

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου