Laden...

Probleme bei übergeben von Liste bzw. Aufruf von werten

Erstellt von Droggelbecher vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.773 Views
Thema geschlossen
D
Droggelbecher Themenstarter:in
3 Beiträge seit 2011
vor 12 Jahren
Probleme bei übergeben von Liste bzw. Aufruf von werten

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

P
157 Beiträge seit 2010
vor 12 Jahren

Wo liegt denn das Problem?
Blocks[0] ist in der Regel das 1. Element
Blocks[1] das 2. usw.
???

5.658 Beiträge seit 2006
vor 12 Jahren

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

D
Droggelbecher Themenstarter:in
3 Beiträge seit 2011
vor 12 Jahren

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

P
157 Beiträge seit 2010
vor 12 Jahren

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.

5.658 Beiträge seit 2006
vor 12 Jahren

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

D
Droggelbecher Themenstarter:in
3 Beiträge seit 2011
vor 12 Jahren

danke für die Hilfe 😃

Hinweis von herbivore vor 12 Jahren

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.

Thema geschlossen