Hallo,
ich habe das Problem, dass ich in einem XNA Spiel mit Visual Studio 2010 ein paar Texturen Deklariert und geladen habe und in eine IListe "Blocks" "gesteckt" habe:
private Texture2D Block01;
private Texture2D Block02;
private Texture2D Block03;
...
protected override void LoadContent()
{
Block01 = Content.Load<Texture2D>("Block01");
Block02 = Content.Load<Texture2D>("Block02");
Block03 = Content.Load<Texture2D>("Block03");
...
Blocks.Add(Block01);
Blocks.Add(Block02);
Blocks.Add(Block03);
...
soweit so gut aber nun möchte ich ein einer anderen Klasse diese Texturen wieder benutzen und habe daher mit get und set gearbeitet , da ich sie in der Methode darnter gleich wieder verwenden will:
private IList<Texture2D> blocks;
public IList<Texture2D> Blocks
{
get
{
return this.Blocks;
}
set
{
this.Blocks = value;
}
}
public void Layer0(SpriteBatch spriteBatch, ??? )
{
...
nun weiss ich leider nicht weiter. Ich muss in der Methode Layer0 wieder auf die Objekte Block01, Block02, Block03 usw. zugreifen in einem switch / case
wenn mir jemand helfen könnte wäre super 😃
liebe grüße
Wo liegt denn das Problem?
Blocks[0] ist in der Regel das 1. Element
Blocks[1] das 2. usw.
???
Hi Droggelbecher,
Ich muss in der Methode Layer0 wieder auf die Objekte Block01, Block02, Block03 usw. zugreifen in einem switch / case
Wo genau liegt da das Problem? Du kannst doch entweder über deine Variablen auf die Blöcke zugreifen oder über die Liste. (Wozu eigentlich die Liste, gibt es mehr als 3 Blöcke?)
Schöne Grüße,
Christian
PS: Bitte unbedingt C#-Code-Tag benutzen um Code zu formatieren, danke!
Weeks of programming can save you hours of planning
Hallo,
naja bisher gibt es 5 Blöcke aber es sollen noch viel mehr werden. Mein gesmter Code für die Klasse Level sieht so aus:
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;
namespace WindowsGame2
{
class Level
{
int RowCount = 8;
int ColCount = 12;
int Blocksize = 64;
//int anzVonText = 5;
public void Back(SpriteBatch spriteBatch, Texture2D BackgroundTexture) //Layer00
{
spriteBatch.Draw(BackgroundTexture , new Vector2(0, 0), Color.White);
}
int[] Layer00 = new int[] { 1,1,1,1,1,1,1,1,1,1,1,1,
1,2,2,2,2,2,2,2,2,2,2,1,
1,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,1,
1,3,3,3,3,3,3,3,3,3,3,1,
1,1,1,1,1,1,1,1,1,1,1,1 };
//private IList<Texture2D> blocks;
//public IList<Texture2D> Blocks
//{
// get
// {
// return this.Blocks;
// }
// set
// {
// this.Blocks = value;
// }
//}
public void Layer0(SpriteBatch spriteBatch, Value)
{
int e = 0;
for (int y = 0; y < RowCount; y++)
{
for (int x = 0; x < ColCount; x++)
{
switch (Layer00[e])
{
case 1:
spriteBatch.Draw(Block01, new Vector2(x * Blocksize, y * Blocksize), Color.White);
break;
//case 2:
// spriteBatch.Draw(Block02, new Vector2(x * Blocksize, y * Blocksize), Color.White);
// break;
//case 3:
// spriteBatch.Draw(Block03, new Vector2(x * Blocksize, y * Blocksize), Color.White);
// break;
default:
break;
}
e++;
}
}
}
}
}
Dieser Dicke ZahlenBlock stellt ein Testlevel da (bitte die auskommentierungen nicht beachten 😉 ) und das problem ist das ich nicht weiss wie ich der Methode Layer0 die Blöcke übergeben kann und er alle immer durchläuft also sprich das ganze Level erstellt (da muss ja irgentwie noch um das ganze eine schleife rum :S ) und der Layer soll von der Hauptklasse Game aufgerufen werden und da meckert Visual Studio immer, dass bei Value in der Layer methode ein Bezeichner erwartet wird
C#-Code-Tag bitte verwenden
Warum übergibst du nicht einfach eine Instanz der IList<Texture2D>-Klasse?
Bezw. Du verwendest gleich eine Liste oder ein Array von TextureDaten und übergibst das dann.
das problem ist das ich nicht weiss wie ich der Methode Layer0 die Blöcke übergeben kann
Meinst du so in etwa:
public void Layer0(SpriteBatch spriteBatch, IList<Texture2D> value)
Und laß dich nicht jedesmal bitten, den Code in Code-Tags einzurücken. Danke.
Christian
Weeks of programming can save you hours of planning
danke für die Hilfe 😃
Den Umgang von Collections und auch die Parameterübergabe setzen wir als bekannt voraus. Das fällt unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1.