PDA

View Full Version : [C#]Modificare una classe per passargli della variabili


Mattyfog
22-07-2009, 09:52
Io ho questa classe:
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 Primo_videogame
{
public class SpriteManager : Microsoft.Xna.Framework.DrawableGameComponent
{
SpriteBatch spriteBatch;
List<Sprite> spriteList = new List<Sprite>();
Texture2D tex1;
Vector2 pos1;
Vector2 spd1;

public SpriteManager(Game game)
: base(game)
{

}

public override void Initialize()
{
pos1 = new Vector2(10.0f, 1.0f);
spd1 = new Vector2(2.0f, 1.0f);
base.Initialize();
}

protected override void LoadContent()
{
tex1 = Game.Content.Load<Texture2D>("astronave2");
spriteBatch = new SpriteBatch(Game.GraphicsDevice);
//Aggiungiamo nuovi sprite----------------------
spriteList.Add(new AutoSprite(tex1, pos1, spd1));

base.LoadContent();
}

public override void Update(GameTime gameTime)
{
foreach (Sprite s in spriteList)
{
s.Update(gameTime);
}

base.Update(gameTime);

}

public override void Draw(GameTime gameTime)
{
spriteBatch.Begin();

foreach (Sprite s in spriteList)
{
s.Draw(gameTime, spriteBatch);
}

base.Draw(gameTime);
spriteBatch.End();
}
}
}

che viene richiamata così:
SpriteManager spritemanager = new SpriteManager(this);
Components.Add(spritemanager);
se io volessi passargli delle variabili (per esempio i valori di pos1 e spd1) cosa dovrei modificare nella classe?
Perchè non so bene cosa e soprattutto dove devo modificare la classe... Grazie :D

banryu79
22-07-2009, 10:14
se io volessi passargli delle variabili (per esempio i valori di pos1 e spd1) cosa dovrei modificare nella classe?

Immagino dovrebbe essere sufficiente dotare la classe dei relativi getter e setter per quei due campi.

Mattyfog
22-07-2009, 10:21
Immagino dovrebbe essere sufficiente dotare la classe dei relativi getter e setter per quei due campi.

ok forse è un po' preso per imparare xna :D
provo a vedere che cosa sono :p
grazieee :)

Mattyfog
22-07-2009, 11:27
uff non capisco come usarli :( :cry:

ndakota
22-07-2009, 12:38
allora, tu hai messo il codice di questa classe SpriteManager e di come la utilizzi da qualche parte. dici che devi passare dei parametri quindi presumo a questa classe, visto che è l'unica cosa che vediamo. se così, passali al costruttore. oppure, se ti servono solo in un metodo, solo a quel determinato metodo.
un esempio:


public SpriteManager(Game game, Vector2 pos1tmp, Vector2 spd1tmp)
: base(game)
{
pos1 = pos1tmp;
spd1 = spd1tmp;
}


e


SpriteManager spritemanager = new SpriteManager(this, new Vector2(0f, 0f), New Vector2(0f, 0f));


è solo un esempio.

Mattyfog
22-07-2009, 14:45
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 Primo_videogame
{
public class SpriteManager : Microsoft.Xna.Framework.DrawableGameComponent
{
SpriteBatch spriteBatch;
List<Sprite> spriteList = new List<Sprite>();
Texture2D tex1;
Vector2 pos1;
Vector2 spd1;

public SpriteManager(Game game, Vector2 pos1)
: base(game)
{

}
public override void Initialize()
{
///pos1 = new Vector2(10.0f, 1.0f);
spd1 = new Vector2(2.0f, 1.0f);
base.Initialize();
}

protected override void LoadContent()
{
tex1 = Game.Content.Load<Texture2D>("astronave2");
spriteBatch = new SpriteBatch(Game.GraphicsDevice);
//Aggiungiamo nuovi sprite----------------------
spriteList.Add(new AutoSprite(tex1, pos1, spd1));
base.LoadContent();
}

public override void Update(GameTime gameTime)
{
foreach (Sprite s in spriteList)
{
s.Update(gameTime);
}

base.Update(gameTime);

}

public override void Draw(GameTime gameTime)
{
spriteBatch.Begin();

foreach (Sprite s in spriteList)
{
s.Draw(gameTime, spriteBatch);
}

base.Draw(gameTime);
spriteBatch.End();
}
}
}

ho cambiato solo ciò che ho messo in grassetto...
Fatto sta che non cambia nulla qualsiasi valore io passi

ndakota
22-07-2009, 14:59
ho cambiato solo ciò che ho messo in grassetto...
Fatto sta che non cambia nulla qualsiasi valore io passi

non ha senso: lo passi ad un metodo e non lo usi in quel metodo. così lo perdi.

il mio codice l'hai provato? ovviamente dovresti togliere l'inizializzazione in Initialize() o sovrascrivi i valori.

Mattyfog
22-07-2009, 19:35
non ha senso: lo passi ad un metodo e non lo usi in quel metodo. così lo perdi.

il mio codice l'hai provato? ovviamente dovresti togliere l'inizializzazione in Initialize() o sovrascrivi i valori.

riprovato... ti chiedo scusa avevo scritto male una cosa e perciò non funzionava! Ora con il tuo codice funziona!!!
Grazie infiniteeeeeeeee :)

ndakota
22-07-2009, 19:58
figurati :)

Mattyfog
23-07-2009, 13:56
è possibile fare in modo che delle variabili siano disponibili in tutta l'applicazione?
perchè ricevo questo errore:
Il nome 'astronave1_position' non esiste nel contesto corrente
(so che significa...)
oppure non esistono i puntatori come in c++?
perchè vorrei evitare di passare ai diversi metodi la variabile perchè al momento dell'uso potrebbe già essere cambiato il suo valore...

ndakota
23-07-2009, 15:12
certo. crei una struct, dichiari la variabile che ti serve pubblica ed il gioco è fatto. io eviterei una cosa del genere comunque. impara bene la programmazione orientata agli oggetti. altrimenti posta un po' di codice, speiga bene quello che vuoi fare e ti aiutiamo noi.