| Autor |
Beitrag |
Special-Agent-J
Hält's aus hier
Beiträge: 7
|
Verfasst: So 23.05.10 10:39
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 23.05.10 10:46
Hallo und  !
Du kannst dafür z.B. ein Array benutzen, wenn Du vorher genau weißt, wieviele Instanzen es werden sollen.
Wenn Du das eher variabel halten willst, kannst Du Dich in der Doku mal über eine List<T> schlau machen (Namespace System.Collections.Generic).
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Special-Agent-J 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 23.05.10 10:54
erstmal danke für die schnelle Antwort, aber
wenn ich ein Array anstatt den Namen eingebe bekomme ich folgende Fehler:
Fehler 2 Die Arraygröße kann in einer Variablendeklaration nicht angegeben werden. (Initialisieren Sie sie mit einem new-Ausdruck.) C:\Users\Special-Agent-J\Documents\Visual Studio 2008\Projects\Stargate Battle\Stargate Battle\Stargate Battle.cs 120 34 Stargate Battle
Fehler 1 Fehlerhafte Arraydeklaration: Beim Deklarieren eines verwalteten Arrays steht der Rangspezifizierer vor dem Variablenbezeichner. Zum Deklarieren eines Pufferfelds fester Größe verwenden Sie vor dem Feldtyp das fixed-Schlüsselwort. C:\Users\Special-Agent-J\Documents\Visual Studio 2008\Projects\Stargate Battle\Stargate Battle\Stargate Battle.cs 120 33 Stargate Battle
Hier nochmal der Code- Schnipsel, also schiffIDs ist mein array und je nach index des int schiffe soll der inhalt der Klasseninstanzname sein.
C#-Quelltext 1:
| Schiff schiffIDs[schiffe] = new Schiff("Ha'tak",Maus.X, Maus.Y); |
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 23.05.10 10:57
Zeig mal bitte die ganze Schleife und auch die Deklaration des Arrays
//edit: Die Quelltextzeile macht nämlich schonmal keinen Sinn 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Special-Agent-J 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 23.05.10 11:06
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| string[] schiffIDs = new string[1000]; private int schiffe = 0; private string schiffestring = ""; if (Maus.RightButton == ButtonState.Pressed) { 115 schiffe += 1; 116 schiffestring = "schiff"+ schiffe.ToString(); 117 schiffIDs[schiffe] = schiffestring; 118 Schiff schiffIDs[schiffe] = new Schiff("Ha'tak",Maus.X, Maus.Y); } |
ich bekomm dann folgende Fehler:
Fehler 1 Fehlerhafte Arraydeklaration: Beim Deklarieren eines verwalteten Arrays steht der Rangspezifizierer vor dem Variablenbezeichner. Zum Deklarieren eines Pufferfelds fester Größe verwenden Sie vor dem Feldtyp das fixed-Schlüsselwort. C:\Users\Special-Agent-J\Documents\Visual Studio 2008\Projects\Stargate Battle\Stargate Battle\Stargate Battle.cs 118 33 Stargate Battle
Fehler 2 Die Arraygröße kann in einer Variablendeklaration nicht angegeben werden. (Initialisieren Sie sie mit einem new-Ausdruck.) C:\Users\Special-Agent-J\Documents\Visual Studio 2008\Projects\Stargate Battle\Stargate Battle\Stargate Battle.cs 118 34 Stargate Battle
Fehler 3 ; erwartet. C:\Users\Special-Agent-J\Documents\Visual Studio 2008\Projects\Stargate Battle\Stargate Battle\Stargate Battle.cs 118 43 Stargate Battle
Fehler 4 Ungültiger Ausdruck "=". C:\Users\Special-Agent-J\Documents\Visual Studio 2008\Projects\Stargate Battle\Stargate Battle\Stargate Battle.cs 118 43 Stargate Battle
Fehler 5 ; erwartet. C:\Users\Special-Agent-J\Documents\Visual Studio 2008\Projects\Stargate Battle\Stargate Battle\Stargate Battle.cs 118 45 Stargate Battle
edit: mir ist natürlich klar das if eine verzweigung und keine Schleife ist, aber es ist in dem fall egal
int in string zeile 1 geändert
Zuletzt bearbeitet von Special-Agent-J am So 23.05.10 11:14, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 23.05.10 11:09
Also, Du deklarierst ein Array von Integer-Zahlen.
In der neunten Zeile willst Du dann Strings reinschreiben.
In Zeile 10 vermischst Du dann Zugriff auf ein Array mit der Deklaration einer Variablen.
Und nun meine Frage: Wenn ich Dir schon die Mühe erspare, Dir selber Informationen zu Arrays rauszusuchen, sondern Dir ein ganzes Kapitel dazu verlinke, warum liest Du es dann nicht?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Special-Agent-J 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 23.05.10 11:16
jo ist klar das es ein string sein muss! Mein Fehler...
aber um die 10. Zeile gehts da will ich ja dann den array inhalt statt jeden namen einzeln zu vergeben haben.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 23.05.10 11:18
Du brauchst ein Array vom Typ Schiff[], in dem legst Du dann die Instanzen ab. Einzelne Variablen kannst Du so nicht erstellen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Special-Agent-J 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 23.05.10 11:49
ok immerhin kann ich die arrays jetzt die instanzen schonmal speichern, danke dafür schonmal, aber jetzt tut sich ein neues Problem auf wenn ich jetzt das ganze anzeigen lassen will und die koordinaten aus meinem array holen will kommt die Meldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
also folgendermaßen sieht der akluelle code aus.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84:
| private int schiffeid = 0; Schiff[] schiff = new Schiff[1000];
public Stargate_Battle() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; this.Content.RootDirectory = "Content\\Textures"; graphics.PreferredBackBufferWidth = 1920; graphics.PreferredBackBufferHeight = 1080; }
protected override void Initialize() { IsMouseVisible = true; graphics.GraphicsDevice.RenderState.AlphaBlendEnable = true;
base.Initialize();
}
protected override void LoadContent() {
spriteBatch = new SpriteBatch(GraphicsDevice); Hatak = this.Content.Load<Texture2D>("Hatak"); }
protected override void UnloadContent() { }
protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit();
if (Maus.RightButton == ButtonState.Pressed) { schiffeid += 1; schiff[schiffeid] = new Schiff("Ha'tak",Maus.X, Maus.Y); } base.Update(gameTime); }
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin();
foreach (Schiff id in schiff) {
spriteBatch.Draw(Hatak, new Vector2(id.X, id.Y), Color.White); } spriteBatch.End(); base.Draw(gameTime);
} } } |
vielleicht sollte man das ganze zu xna verschieben!
Übrigens ist bei der Klasse Schiff X und Y eine Eigenschaft.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 23.05.10 11:59
foreach iteriert über das gesamte Array, und da sind nach dem Einfügen des ersten Schiffs eben noch 999 nulls drin. Das ist so ein von Christian beschriebener Fall mit einer unbekannten Anzahl von Items, bei dem eine List<Schiff> viel mehr Sinn macht - schiffeid wirst du dann auch nicht mehr brauchen.
_________________ >λ=
|
|
Special-Agent-J 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 23.05.10 12:16
ok super danke, tolle Lösung allerdings werd ich nicht ganz schlau draus wieso das .Add nicht funktioniert, wie muss ich das bei ner klasse machen?
C#-Quelltext 1:
| SchiffeListe.Add("Ha'tak",Maus.X, Maus.Y); |
das wäre jetzt mein ersatz für zeile 57 aber irgendwie kommt die meldung: Fehler 1 "Stargate_Battle.Schiff" ist ein(e) "Typ", wird aber wie ein(e) "Variable" verwendet.
|
|
Special-Agent-J 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 23.05.10 12:28
ok super danke für die schnell Lösung, habs schon selber hinbekommen, Lösung für Zeile 57 ist:
C#-Quelltext 1: 2:
| Schiff test = new Schiff("Ha'tak", Maus.X, Maus.Y); SchiffeListe.Add(test); |
|
|