DeAndreon
15-04-2009, 09:35
Salve, io vengo vengo dalla programmazione imperativa e studiare il c# che ha anche la programmazione ad oggetti mi sta mandando in una confusione pazzesca! Ecco il listato:
using System;
using System.Collections.Generic;
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.Net;
using Microsoft.Xna.Framework.Storage;
//Quì sopra avremo specificato diversi dei namespace di XNA e non solo (System è sempre lì).
//Per ora molti di questi namespace sono inutili e provvederemo a cancellarli.
namespace tutorial_XNA
{
public class Game1 : Microsoft.Xna.Framework.Game // <-- La classe principale del nostro gioco: Game1.
{
GraphicsDeviceManager graphics; //<-- Dichiara la classe GraphicsDeviceManager, una classe di XNA indispensabile.
SpriteBatch spriteBatch; //<-- Dichiara la classe SpriteBatch, un'altra classe di XNA necessaria per il 2D.
public Game1() //<-- Questo è il nostro "costruttore", vedremo a cosa serve. Anche lui è necessario.
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
// Dentro a questo metodo metteremo il codice che vorremmo venga eseguito all'avvio.
// Infatti, questo metodo viene eseguito solo all'apertura del programma.
base.Initialize();
}
protected override void LoadContent()
{
// Dentro a questo metodo caricheremo i contenuti del nostro gioco, modelli, immagini ecc..
//Anche questo metodo viene eseguito solo all'inizio del programma.
spriteBatch = new SpriteBatch(GraphicsDevice); <-- Assegnamo alla variabile spriteBath un nuovo SpriteBatch.
}
protected override void UnloadContent()
{
// Dentro questo metodo elimineremo i contenuti quando non ci serviranno più, per liberare memoria.
}
protected override void Update(GameTime gameTime)
{
/* Questo metodo è molto importante, esso viene eseguito ed aggiornato continuamente(updated)
ad ogni fotogramma del gioco. All'interno di esso andrà tutto il codice
che riguarderà "l'azione" del gioco. */
/* La riga sottostante è messa di default da XNA all'interno del metodo Update.
E' in if che serve per chiudere il nostro gioco se si eseguisse su XBOX.
Noi, per ora provvederemo subito a cancellarla */
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) <--Se premuto il tasto..
this.Exit(); <--esci.
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
/* Questo è il metodo Draw che rende possibile la visualizzazione di ogni cosa sullo schermo, Draw disegna su schermo
i nostri modelli, le nostre immagini ecc.. */
// La riga sottostante provvede a cancellare il fotogramma precedente a quello corrente..
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);
}
}
}
Allora, penso di aver capito il concetto di classe e di oggetto, correggetemi se sbaglio:D Allora, la classe è una porzione di codice del programma che contiene i medoti(tipo funzioni come nel c e visual basic) e gli attributi(la guida che leggo io li definisce variabili:mbe:). E da una classe possiamo far derivare tanti oggetti diversi tra loro oppure uguali e li possiamo differenziare tramite parametri. Penso di aver capito questo:D Ora il mio problema sta in quel codice...
1) che differenza c'è tra "spriteBatch = new SpriteBatch(GraphicsDevice);" e il costruttore "public Game1()"?
2) che differenza c'è tra "Game1 game = new Game1()" e public Game1() e tra "spriteBatch = new SpriteBatch(GraphicsDevice);"
3)"spriteBatch = new SpriteBatch(GraphicsDevice);" con questa(penso) inizializzazione mettiamo l'oggetto in una variabile?:mbe:
4) i metodi del listato come "protected override void UnloadContent()" e gli altri appartengono alla classe creata. Ma appartengono alla superclasse da cui viene la classe creata oppure sono stati creati dall'autore del tutorial?
Spero di non creare confusione anche a chi leggerà:D Ho le idee confuse:D
Grazie del futuro aiuto!
p.s. i tutorial è questo http://www.wilez.it/tutorials/XNA/
using System;
using System.Collections.Generic;
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.Net;
using Microsoft.Xna.Framework.Storage;
//Quì sopra avremo specificato diversi dei namespace di XNA e non solo (System è sempre lì).
//Per ora molti di questi namespace sono inutili e provvederemo a cancellarli.
namespace tutorial_XNA
{
public class Game1 : Microsoft.Xna.Framework.Game // <-- La classe principale del nostro gioco: Game1.
{
GraphicsDeviceManager graphics; //<-- Dichiara la classe GraphicsDeviceManager, una classe di XNA indispensabile.
SpriteBatch spriteBatch; //<-- Dichiara la classe SpriteBatch, un'altra classe di XNA necessaria per il 2D.
public Game1() //<-- Questo è il nostro "costruttore", vedremo a cosa serve. Anche lui è necessario.
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
// Dentro a questo metodo metteremo il codice che vorremmo venga eseguito all'avvio.
// Infatti, questo metodo viene eseguito solo all'apertura del programma.
base.Initialize();
}
protected override void LoadContent()
{
// Dentro a questo metodo caricheremo i contenuti del nostro gioco, modelli, immagini ecc..
//Anche questo metodo viene eseguito solo all'inizio del programma.
spriteBatch = new SpriteBatch(GraphicsDevice); <-- Assegnamo alla variabile spriteBath un nuovo SpriteBatch.
}
protected override void UnloadContent()
{
// Dentro questo metodo elimineremo i contenuti quando non ci serviranno più, per liberare memoria.
}
protected override void Update(GameTime gameTime)
{
/* Questo metodo è molto importante, esso viene eseguito ed aggiornato continuamente(updated)
ad ogni fotogramma del gioco. All'interno di esso andrà tutto il codice
che riguarderà "l'azione" del gioco. */
/* La riga sottostante è messa di default da XNA all'interno del metodo Update.
E' in if che serve per chiudere il nostro gioco se si eseguisse su XBOX.
Noi, per ora provvederemo subito a cancellarla */
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) <--Se premuto il tasto..
this.Exit(); <--esci.
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
/* Questo è il metodo Draw che rende possibile la visualizzazione di ogni cosa sullo schermo, Draw disegna su schermo
i nostri modelli, le nostre immagini ecc.. */
// La riga sottostante provvede a cancellare il fotogramma precedente a quello corrente..
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);
}
}
}
Allora, penso di aver capito il concetto di classe e di oggetto, correggetemi se sbaglio:D Allora, la classe è una porzione di codice del programma che contiene i medoti(tipo funzioni come nel c e visual basic) e gli attributi(la guida che leggo io li definisce variabili:mbe:). E da una classe possiamo far derivare tanti oggetti diversi tra loro oppure uguali e li possiamo differenziare tramite parametri. Penso di aver capito questo:D Ora il mio problema sta in quel codice...
1) che differenza c'è tra "spriteBatch = new SpriteBatch(GraphicsDevice);" e il costruttore "public Game1()"?
2) che differenza c'è tra "Game1 game = new Game1()" e public Game1() e tra "spriteBatch = new SpriteBatch(GraphicsDevice);"
3)"spriteBatch = new SpriteBatch(GraphicsDevice);" con questa(penso) inizializzazione mettiamo l'oggetto in una variabile?:mbe:
4) i metodi del listato come "protected override void UnloadContent()" e gli altri appartengono alla classe creata. Ma appartengono alla superclasse da cui viene la classe creata oppure sono stati creati dall'autore del tutorial?
Spero di non creare confusione anche a chi leggerà:D Ho le idee confuse:D
Grazie del futuro aiuto!
p.s. i tutorial è questo http://www.wilez.it/tutorials/XNA/