Tetris - Spielstein wird nicht dauerhaft angezeigt

  • Antworten:37
  • Bentwortet
dwjiidnsw
  • Forum-Beiträge: 58

30.04.2018, 23:30:30 via Website

Hallo,
ich wollte eine Tetris App machen.
In einem Timer werden zufällige Steine nach unten bewegt und sie können mit den Tasten gesteuert werden. Aber immer wenn ein Stein unten ankommt und ich einen neuen Stein erstelle, verschwindet der alte Stein. Wie kann ich den alten Spielstein fest an seine Position setzen?
Schonmal Danke im vorraus.

  class  GameLoop extends TimerTask {
    Random random = new Random();

     @Override
    public void run() {

         mainactivity.runOnUiThread(new TimerTask() {

             @Override
             public void run() {
                 spielFeld.nachUnten(SpielStein); // Stein nach unten bewegne
                 if (spielFeld.nachUntenverschiebar(SpielStein) == false) {
                     SpielStein = neuerStein(); // neuen SpielStein erzeugen
                 }
                 invalidate();
             }
         });
     }

public Stein neuerStein() {
    Stein s = new Stein(random.nextInt(7) + 1);
    return s;
 }
}

— geändert am 01.05.2018, 10:48:27 durch Moderator

Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.05.2018, 10:51:39 via Website

Hallo,

du darfst den Speilstein (variable) nicht einfach überschreiben:

 SpielStein = neuerStein(); // neuen SpielStein erzeugen

Hier ordnest du der Variable SpielStein einen neuen SpielStein zu, überschreibst damit den vorherigen.
Java merkt das aktivert den GC und schmeißt den alten SpielStein raus, da darauf ja kein Objekt mehr verweist.
Du solltest deine SpielSteine evtl. in einer Liste verwalten. d.h.
bei einem neuen Stein z.b. SteinListe.add(neuerStein());
und dann immer mit dem letzen Element der Liste arbeiten.
Zudem kommt es dann auch noch darauf an, wie du deinen Steine Zeichnest. Wenn du einen Canvas und eine onDraw hast, musst du alle Steine der Liste immer neu Zeichnen, egal ob dieser isvh bewegt oder nicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
dwjiidnswswa00
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

01.05.2018, 10:44:57 via Website

Hallo,
Du müsstest vielleicht den Stein bevor du einen neuen erstellst Speichen. Dazu wäre wohl eine Methode in deiner "SpielFeld Klasse" sinnvoll.
Ich weiß nicht wie deine Klasse aufgebaut ist, auch nicht wie du das Grafisch umgesetzt hast. So das auch Steine dauerhaft angezeigt werden können oder ob deine Grafik immer von neuen gezeichnet wird.

Hilfreich?
dwjiidnsw
Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.05.2018, 10:51:39 via Website

Hallo,

du darfst den Speilstein (variable) nicht einfach überschreiben:

 SpielStein = neuerStein(); // neuen SpielStein erzeugen

Hier ordnest du der Variable SpielStein einen neuen SpielStein zu, überschreibst damit den vorherigen.
Java merkt das aktivert den GC und schmeißt den alten SpielStein raus, da darauf ja kein Objekt mehr verweist.
Du solltest deine SpielSteine evtl. in einer Liste verwalten. d.h.
bei einem neuen Stein z.b. SteinListe.add(neuerStein());
und dann immer mit dem letzen Element der Liste arbeiten.
Zudem kommt es dann auch noch darauf an, wie du deinen Steine Zeichnest. Wenn du einen Canvas und eine onDraw hast, musst du alle Steine der Liste immer neu Zeichnen, egal ob dieser isvh bewegt oder nicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
dwjiidnswswa00
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

01.05.2018, 21:05:59 via Website

Hallo,
ich habe jetzt folgendes versucht, jetzt bewegt sich der Stein aber nicht mehr nach unten:

     @Override
             public void run() {

                if(SteinListe.isEmpty()) {
                    SteinListe.add(neuerStein());
                }

                 spielFeld.nachUnten(aktuellerStein());

                if (spielFeld.nachUntenverschiebar(aktuellerStein()) == false) {
                    SteinListe.add(neuerStein());
                 }
           invalidate();
              }
         });
     }

public Stein aktuellerStein() {
    return SteinListe.get(0);
}

public Stein neuerStein() {
    Stein s = new Stein(random.nextInt(7) + 1);
    return s;
 }

Die Steine zeichne ich auf ein Canvas, in der onDraw() Methode. Wie kann ich den alle Steine von Liste neuzeichnen?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.05.2018, 21:09:04 via App

deine aktiellerStein Methode ist falsch.
Der aktuelle Stein ist der letzte in der Liste und du liest immer den an der stelle 0 also der 1. stein.
Fur den letzten:

steinListe.get(Steinliste.size()-1);

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

01.05.2018, 21:25:52 via Website

Ok, danke. Jetzt sehe ich unten in der Konsole immer die Koordinaten von den runterfallenden Steinen, aber auf dem Canvas werden sie nicht neugezeichnet

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.05.2018, 21:35:10 via App

Da braucht du eine Schleife über alle Elemente der Liste und dann das Zeichnen für einen Stein.
Also über eine Schleife für alle Zeichen

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

01.05.2018, 21:57:46 via Website

Eine Schleife die überalle Steine läuft hatte ich eben schon wenn du so etwas meinst:

 for(Stein s: SteinListe)  {
                    invalidate();
                }

Aber ich durchlaufe in meiner onDraw() Methode immer das gesamte SpielFeld und wenn der Wert im Array ungleich 0 ist wird an der entsprechenden Stelle ein Rechteck gefüllt. (in der Steinfarbe)

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.05.2018, 21:59:08 via App

Poste mal den Code ich kann das gersde nicht nachvollziehen...

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

01.05.2018, 22:04:28 via Website

Jeder Stein bekommt ja beim erstellen ein zufälligen Farbcode als Integer und jenachdem wie dieser Wert ist wird dann die Farbe gesetzt.

@Override
protected void onDraw(Canvas canvas) {
    int spielfeld[][] = spielFeld.getSpielFeld();

    super.onDraw(canvas);
    Paint p = new Paint();
    p.setColor(Color.BLUE);

    for (int a = 0; a < höhe; a++) {  // canvas(SpielFeld) durchlaufen
        for (int b = 0; b < breite; b++) {

            if (spielfeld[a][b] == 1) {
                p.setColor(Color.RED);
                canvas.drawRect(b*30, a*30, b*30+30, a*30+30,p);
            }
        if(spielfeld[a][b]==2) {
            p.setColor(Color.GREEN);
            canvas.drawRect(b*30, a*30, b*30+30, a*30+30,p); 
        }
      ... alle 7 Farbcodes

         }
      }
   }

— geändert am 01.05.2018, 22:05:25

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.05.2018, 22:09:03 via App

Und was liefert dir getSpielfeld zurück? Also der Code dahinter?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

01.05.2018, 22:17:07 via Website

Das Array aus meiner SpielFeld Klasse, wo die Steine verschoben und gedreht werden

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.05.2018, 22:19:55 via App

In dem Array müssen alle Steine drin sein.
Ohne deinen kompletten Code zu kennen kann ich dir kaum helfen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

01.05.2018, 22:24:04 via Website

Naja der Stein bleibt oben am Rand hängen und fällt nicht runter.
So wie es am Anfang hatte, wo die Steine nur immer überschrieben wurden hat es ja auch geklappt mit dem runterfallen der Steine.

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.05.2018, 22:51:30 via App

Dann ist irgenso in deiner Spielfeld Klasse ein Logikfehler...

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2018, 06:18:44 via Website

Mal eine Frage wo werden denn die Steine in das Spielfeld array eingetragen? Ich vermute das da nur ein Stein drin ist. Die getSpielfeld müßte ein array mit mehreren Steinen Rechtecke liefern. Denke das das nicht so ist. Somit kann auf dem Canvas auch nur eins auf dem Feld angezeigt werden.
Wo speicherst du die Steine? Wie sieht die getSpielfeld Methode aus?
Ist die Spielfeld Klasse auch für mehrere Steine ausgelegt?

So wie deine onDraw Methode aufgebaut ist müssen alle Steine in dem spielfeld[][] Array geladen werden.
somit muss die getSpielfeld Methode alle Steine die am boden liegen und die fallenden Steine enthalten.

Welche eigenschaften werden in der Klasse Stein gehalten?
Wo wird die actuelle Position Lage der Steine gepeichert ?
lg J

— geändert am 02.05.2018, 09:30:23

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

02.05.2018, 16:14:58 via Website

Hallo,
In der Steinklasse werden die Koordinaten gespeichert, Abhängig vom Farbcode:

public Stein(int f) {

    switch(f) { // Quadrat Rot
        case 1:
            x1=0; y1=7; x2=0; y2=8;
            x3=1; y3=7; x4=1; y4=8;
            farbcode=1;
            break;

        case 2:    // Z Teil    Blau
            x1=0; y1=7; x2=0; y2=8;
            x3=1; y3=8; x4=1; y4=9;
            farbcode=2;
            break;

....

In der SpielFeld Klasse sind Methoden um den SpielStein zudrehen und zu verschieben, mit dem aktuellen Stein als Parameter. Mit der getSpielFeld() Methode wird das SpielFeld Array zurückgegeben.

 public void löscheStein(Stein SpielStein) {
    SpielFeld[SpielStein.x1][SpielStein.y1] = 0;
    SpielFeld[SpielStein.x2][SpielStein.y2] = 0;
    SpielFeld[SpielStein.x3][SpielStein.y3] = 0;
    SpielFeld[SpielStein.x4][SpielStein.y4] = 0;
 }

— geändert am 02.05.2018, 16:15:36

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2018, 16:27:45 via Website

Hallo wenn du bei der getSpielfeld Methode dein Spielfeld löschtst kann ja nur ein Stein sichtbar sein. Wenn sie nach unten gefallen sind müssen sie im Spielfeld bleiben. Du willst sie doch Selber löschen wenn eine Reihe voll ist. Wie sieht dein Spielfeld aus?
Wie groß ist eigentlich dein Spielfeld?
Die Breite und Höhe in der ondraw ist wohl die Bildschirm Auflösung?
Wie speicherst du denn wo ein Stein ist und wie weit erfallen kann.

— geändert am 02.05.2018, 16:33:18

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

02.05.2018, 16:31:13 via Website

SpielFeld Aray: int SpielFeld[][]=new int[30][30];
Achso, das löschen der Steine ist nur dafür da um sie dann zuverschieben.

Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

02.05.2018, 16:47:17 via Website

Eine Randbemerkung :

Für Deinen Fall solltest du besser Dynamische Arrays verwenden ( z.b. ArrayList) .

Und darin kannst du deine Objekte komplett verwalten und darüber hinaus ,musst du nicht
immer die maximale Anzahl deiner Möglichkeiten statisch allociiern .

Das sieht nämlich Android resp. Java gar nicht gerne

Statische Arrays verwendet man eigentlich nicht mehr.

— geändert am 02.05.2018, 16:49:17

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
dwjiidnswPascal P.
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2018, 18:08:41 via Website

Hi
Ja das was swa00 sagt solltest du auch nochmal mit überdenken.

Wenn sich ein Stein beweget würde ich ihm im Spielfeld neu Positionieren also an der alten stelle löschen und an der neuen einpflegen . Alle anderen Steine bleiben wo sie sind.
Sind ja eigentlich keine Steine in deinen Array sondern nur Zahlen die den Stein in Form und Farbwert darstellen. Denke das du es so machst. Denn wenn die unterste zeile voll mit Zahlen ist kann sie gelöscht werden und die anderen rutschen nach. Die Spiellogik würde ich im Spielfeld machen und die Grafik nach dem Spielfeld auf bauen.

Auch würde ich nicht die Steine in der onDraw Methode zeichnen, sondern mit Drawables arbeiten.
So wie deine Methode jetzt ist kann sie bestimmt nur quadratische Steine zeichnen

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

02.05.2018, 18:56:29 via Website

Hi,
So mache ich es auch: alte Steinposition löschen und neu setzen ( alles in der SpielFeld Klasse) Keine Ahnung was du mit Drawables meinst, aber so wie ich es mache kann ich alle Steine zeichen.
Ich verstehe nur immer noch nicht warum sich die Steine nicht bewegen.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2018, 19:00:27 via Website

Du sollst nicht alle Steine löschen nur den der gerade am fallen ist und der dann an die neue Position Gesetz wird.
Wie machst du das mit der Animation?

Hilfreich?
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

02.05.2018, 21:17:25 via Website

So wie in Post 4

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2018, 21:33:42 via Website

Ja das habe ich schon gesehen nur kann ich da nirgends eine Zeitschleife oder einen timer, thread erkennen der eine Animation startet.

Hilfreich?
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

02.05.2018, 21:40:37 via Website

Achso, das mache ich mit timer.schedule() im Konstruktor.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2018, 22:09:44 via Website

Erstens hast du den Post 5 von Pascal umgesetzt?
Zweitens erzeugst du in der Run Methode bei jedem durchlauf am Anfang einen neuen Stein. Den musst du außerhalb der Run erstellen wie in deinem ersten Post.
Denn wenn bei jedem durchlauf ein neuer Stein erstellt wird ist er logischer weise immer oben an der selben Stelle. Deine Liste müsste eigentlich viele Einträge haben . Und die if abfrage ob der Boden ereicht ist dürfte nie durchlaufen werden . Das müsste mit dem Debugger gut prüfbar sein.

— geändert am 02.05.2018, 22:34:29

Hilfreich?
Pascal P.
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

02.05.2018, 22:44:10 via Website

  1. Ja
  2. Habe ich jetzt verbessert, einen Log in die If Bedingung eingebaut: Log.v("NeuerStein", ""+ SteinListe.size())
    Die If Bedingung wird immer erreicht wenn die Stein Koordinate 28 ist( die Steinkoordinaten lasse ich mir immer ausgeben), der Stein also am Boden ist. Das funktioniert also soweit. Nur die Steine bewegen sich immer noch nicht.

Muss ich die SpielFeld Klasse nochmal ändern, damit dort mehrere Steine verarbeitet werden können?

— geändert am 02.05.2018, 22:45:30

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2018, 22:54:35 via Website

Kann ich dir nicht sagen davon sehen wir hier zu wenig von der Klasse vor allen im Zusammenhang.
Frage bewegt sich den nun der Stein wieder?

Wenn nicht hast du irgendwo noch was verändert außer die Liste hinzuzufügen. Oder du benutzt nicht überall deine neue actueller Stein Methode. Sondern nur Stein wie am Anfang.

— geändert am 02.05.2018, 23:02:06

Hilfreich?
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

02.05.2018, 23:00:35 via Website

Die Steine bewegen sich nicht.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

02.05.2018, 23:15:33 via Website

Wie ich schon sagte ist es ohne Code sehr schwer zu helfen. Denn wir wissen nicht was du da machst.
Wie sieht es den in deiner getSpielfeld Methode aus ? Denn die ist ja an der Grafik beteiligt.
Wird denn da auch der Stein (Zahlen) bewegt? Das Spielfeld stellt ja ein Abbild der Grafik in Zahlen dar, so wie ich deinen Code deute.
Ohne Code kann ich dir da jetzt nicht mehr helfen.
Denkanstöße habe ich gegeben.

Ps. Ich hoffe du hast die Erstellung des ersten Stein und somit der Liste nicht nur aus der Inneren Run Methode geschoben sondern auch aus der zweiten, am besten aus dem gesamten Thread. Denn in deinem ersten Post ist der Stein schon erstellt, das machst du warseinlich wo anders . Genau dort must du auch deine Liste mit dem ersten Stein erstellen. Aber das ist natürlich wieder nur eine mutmaßung. Denn "Habe ich jetzt verbessert" sagt nicht viel aus wo und wie du es verändert hast.

— geändert am 03.05.2018, 07:32:07

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

03.05.2018, 15:21:37 via Website

Die Erstellung der Liste und den ersten Stein füge ich im Konstruktor von Tetris hinzu.

Ich poste jetzt mal den Code von der SpielFeld klasse, weil ich nicht mehr weiterkomme, die Drehung von dem Stein habe ich rausgenommen:

public class SpielFeld  {

  final int höhe=30;
     final int breite=30;

int SpielFeld[][]=new int[höhe+2][breite+2]; // +2 für die Drehbarkeit

public void setzeStein(Stein SpielStein) {
    SpielFeld[SpielStein.x1][SpielStein.y1] = SpielStein.farbcode;
    SpielFeld[SpielStein.x2][SpielStein.y2] = SpielStein.farbcode;
    SpielFeld[SpielStein.x3][SpielStein.y3] = SpielStein.farbcode;
    SpielFeld[SpielStein.x4][SpielStein.y4] = SpielStein.farbcode;
}

public void löscheStein(Stein SpielStein) {
    SpielFeld[SpielStein.x1][SpielStein.y1] = 0;
    SpielFeld[SpielStein.x2][SpielStein.y2] = 0;
    SpielFeld[SpielStein.x3][SpielStein.y3] = 0;
    SpielFeld[SpielStein.x4][SpielStein.y4] = 0;
}

public  void verschieben(Stein SpielStein,int x, int y)  {
    löscheStein(SpielStein);
    SpielStein.verschieben(x, y);
    setzeStein(SpielStein);
    Log.v("SpielStein",""+SpielStein.x1+" "+SpielStein.y1);
}

public void nachRechtsverschieben(Stein SpielStein) {
    if(nachRechtsverschiebar(SpielStein)==true) {
        verschieben(SpielStein,0,1);
    }
}

public  void nachLinksverschieben(Stein SpielStein) {
    if(nachLinksverschiebar(SpielStein)==true) {
        verschieben(SpielStein,0,-1);
    }
}

public  void nachUnten(Stein SpielStein) {
    if(nachUntenverschiebar(SpielStein)==true) {
        verschieben(SpielStein, 1, 0);
    }
}

public  boolean nachLinksverschiebar(Stein SpielStein) {
    if(SpielStein.y1>=1 && SpielStein.x4<=höhe-2) { // Stein noch nach links und  nach unten verschiebar ist
        return true; // Stein beweglich
    }
    return false; // Stein wird am Boden festgesetzt
}

public  boolean nachRechtsverschiebar(Stein SpielStein) {
    if(SpielStein.y4<=breite-2 && SpielStein.x4<=höhe-2) {
        return true;
    }
    return false;
}

public   boolean nachUntenverschiebar(Stein SpielStein) {
    if(SpielStein.x4<=höhe-2 ) {
        return true;
    }
    return false;
}

public  int[][] getSpielFeld() {
    return SpielFeld;
}

public int getHöhe() {
    return höhe;
}

public int getBreite() {
    return breite;
}

}

Hilfreich?
Jokel
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

03.05.2018, 16:37:37 via Website

Hi schön das du den Code gepostet hast. Aber das was ich sehen wolte ist leider nicht dabei. Interessanter und wichtiger ist wie du die Methoden der Klasse Spielfeld anwendet.
Vor allen ist es wichtig das du noch mal deinen timer postest wie er jetzt ist. Und auch wo du deine Liste erstellst.
Wie sind Stein und Liste Deffieniert static oder nicht. Wenn nicht gibst du auch die Instanz weiter oder erstellst du immer eine neue?
In welcher Klasse ist dein timer der ja die Animation durchführt. Denke Tetris ist deine Activity oder?

— geändert am 03.05.2018, 18:31:25

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

03.05.2018, 19:54:49 via Website

Hi,
Einen etwas "peinlichen" Fehler habe ich jetzt noch gefunden, die Steine fallen jedenfalls richtig runter und bleiben auch liegen nur, bei der Steuerung gibt es noch Probleme. Ich melde mich später nochmal.:)

Hilfreich?
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

03.05.2018, 21:07:39 via Website

So jetzt funktioniert es:)
Danke euch beiden.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

03.05.2018, 21:48:49 via Website

Schön wäre wenn du uns auch verraten würdest woran es lag.
Denke das haben wir uns wirklich verdient.;)

— geändert am 03.05.2018, 21:49:27

Hilfreich?
dwjiidnsw
Kommentieren
dwjiidnsw
  • Forum-Beiträge: 58

03.05.2018, 22:24:27 via Website

Naja nachdem ich die Verbesserungen umgesetzt hatte, fielen sehr unregelmäßig Steine runter. In der onDraw() Methode hatte ich aber nur zwischen 2 Farbcodes unterschieden (es gibt 7 Steine also 7 Farbcodes) , es wurden also immer nur 2 Steine sehr unregelmäßig gezeichnet.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

04.05.2018, 05:17:09 via Website

Schön das du uns das auch verraten hast.
Leider hast du immer auf alle Fragen ob sich der Stein denn überhaupt bewegt immer mit Nein geantwortet. Das er sich unregelmäßig bewegt hast du nicht geschrieben. Dadurch haben wir auch den Fehler an der falschen Stelle vermutet. Damit hast du dir die Sache selber schwerer gemacht.
Schön das du es gefunden hast.

Tipp für die Zukunft etwas genauer beschreiben .
LG J:)

Hilfreich?
dwjiidnswswa00
Kommentieren