Announcement

Collapse
No announcement yet.

Klassenproblem Werteübernahme??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Klassenproblem Werteübernahme??

    Moin,

    ich hab eine Klasse in der ich eine Funktion habe die verschiedene Vector2 Werte in einer ArrayList zurückgibt. Hier mal ein Ausschnitt.

    Code:
     public ArrayList getFigure(Vector2 Position, int FigureNumber, int Direction)
            {
                _alFigure.Clear();
    
                switch (FigureNumber)
                {
                    #region Figure 0 - Case 0
                    case 0: // --
                            // --
                        {
                            switch (Direction)
                            {
                                case 0:
                                case 1:
                                case 2:
                                case 3:
                                    {
                                        _alFigure.Add(Position);
                                        _alFigure.Add(new Vector2(Position.X + BlockSize, Position.Y));
                                        _alFigure.Add(new Vector2(Position.X, Position.Y + BlockSize));
                                        _alFigure.Add(new Vector2(Position.X + BlockSize, Position.Y + BlockSize));
                                    }
                                    break;
                            }
                            break;
                        }
                    #endregion
    ...
    return _alFigure;
    In einer anderen Klasse frage ich die Werte ab und übergebe sie verschiedenen ArrayLists:

    Code:
    //Randomize first Block
                Random rand = new Random();
                figure = rand.Next(0, 7);
                v1 = game.getFigure(new Vector2(400, 75), 0, 0);
    
                //Randomize second Block
                figure = rand.Next(0, 7);
                v2 = game.getFigure(new Vector2(400, 150), 1, 0);
    Mein Problem ist nun, dass alle ArrayLists (hier v1 und v2)immer dieselben Werte bekommen? Eigentlich sollen die Positionen aber unterschiedlich sein da die Anfangspositionen nicht gleich sind? Hat eine 'ne Idee und kann mir helfen?

    Danke im Voraus
    Andreas

  • #2
    Da du im Case für die Direction 0-2 kein beak hast, fallen die alle bis 3 durch
    Christian

    Comment


    • #3
      Moin,

      Direction 0 ist die Grundausrichtung der Figur. Ich bekomme bei allen Directions Werte da
      Code:
      case 0:
                case 1:
                case 2:
                case 3:
      bedeutet das er bei 0, 1, 2 + 3 die Schleife abarbeitet. Ausserdem sind die Anfangspositionen unterschiedlich, so daß jede AL unteschiedliche Positionen bekommen sollte unabhängig von der Ausrichtung. Oder?

      Andreas

      Comment


      • #4
        Ich sehe keine Schleife?

        case 0:
        case 1:
        case 2:
        case 3

        ohne break ist identisch mit

        Wenn 0 oder 1 oder 2 oder 3
        Christian

        Comment


        • #5
          Genau, das soll in diesem Fall auch so sein. Hier mal ein anderer Ausschnitt:
          Code:
                          #region Figure I - Case 1
                          case 1: // I
                              switch (Direction)
                              {
                                  case 0: // ----
                                      _alFigure.Add(Position);
                                      _alFigure.Add(new Vector2(Position.X + BlockSize, Position.Y));
                                      _alFigure.Add(new Vector2(Position.X + (BlockSize * 2), Position.Y));
                                      _alFigure.Add(new Vector2(Position.X + (BlockSize * 3), Position.Y));
                                      break;
                              }
                              break;
                          #endregion
          In diesem Fall ist es eine andere Figur und 0 ist immer noch die Grundausrichtung. Die anderen Ausrichtungen habe ich noch nicht programmiert da die Positionen in jeder AL gleich sind obwohl die Anfangspotionen unterschiedlich sine. Und das ist mein Problem.

          Andreas

          Comment


          • #6
            ok, ist mir zu hoch

            Du müsstest gleiche X-Werte bekommen, aber unterschiedliche Y-Werte. Aber das kannst du mit debuggen ganz schnell selber lösen
            Christian

            Comment


            • #7
              Erstmal Danke für deine Bemühungen.

              Genau, die Y Werte sollten unterschiedlich sein. Ich glaube auch nicht das mein Problem in dieser Funktion liegt sondern wie ich die Klasse behandel? Wie kann es sein das v1 und v2 dieselben Werte bekommen obwohl es unterschiedliche Variabeln sind und hintereinander abfragen? Oder mache ich ier einen Denkfehler?

              Andreas

              Comment


              • #8
                Hallo nochmal,

                also das Problem lag doch in der Funktion. Wenn ich die AL am Anfang neu initialisere, dann funktioniert es. Es scheint so das AL.Clear() die Liste nicht richtig löscht und den Index nicht auf 0 setzt. Was mich wundert ist, dass alle Werte immer dieselben waren wie der letzte abgerufene, und nicht, wie man vermuten sollte, die der ersten! Vielleicht kann mir das noch jemand erklären?

                Nochmals Danke
                Andreas

                Comment


                • #9
                  Weil du immer die selbe Instanz _alFigure benutzt die deine getFigure zurückgibt.

                  Die Rückgabe der Methode die du zum Beispiel v1 zuweist ist eine Referenz auf den selben Speicher wie _alFigure und keine Kopie. Wenn du also nochmal getFigure aufrufst löschst du den Inhalt von _alFigure und da v1 auf das selbe Object schaut ist da auch nix mehr da . Da du _alFigure gleich wieder füllst ist dieser Inhalt dann auch über v1 zu sehen und nach dem Aufruf dann auch über v2. Wenn du unabhängige Listen, heißt unabhängige Objekte willst, musst du auch unabhängige Objekte benutzen also in getFigure eine neue ArrayList erzeugen. Ich vermute mal du kannst die Klassenvariable _alFigure einfach sterben lassen und durch eine lokale Variable in der Methode ersetzen und da dann auch gleich erzeugen anstatt die Klassenvariable zu clearen.

                  PS. ArrayList ist schon lange nicht mehr 'State of the Art'. Nimm stattdessen eine generische Liste. Hier am ehesten erstmal eine List<Vector2>.

                  Comment


                  • #10
                    Moin,

                    super erklärt, nun habe ich es verstanden. Danke Ralf.
                    Der Vorteil einer AL ist in meinem Fall das ich verschiedene Variabel Typen speichern kann, in einer <List> aber nicht (meines Wissens?).

                    Danke nochmal
                    Andreas

                    Comment


                    • #11
                      Originally posted by Smoky View Post
                      ..Der Vorteil einer AL ist in meinem Fall das ich verschiedene Variabel Typen speichern kann..
                      Das ist eher ein Nachteil. Du bekommst keine Fehlermeldung vom Compiler, wenn Du was falsch machst.
                      Günther

                      Comment

                      Working...
                      X