Kurven mit Timer und Left-> += x;

#1

Hallo,

bei meinem TowerDefense hänge ich schon seit sehr langem an einem Problem.Die Situation sieht insgesamt so aus:

                                                                                                                                                             (Ein Timer ist aktiviert der folgendes Testet: if(Spieler->Left < Wand->Right - 5)                                                                                                                                                                                                                                                                        X(Wand)                          <-(Spieler), falls der Spieler auf die Wand auftrifft wird ein Timer aktiviert, der folgendes ausführt: Spieler->Top += 15;

(Ein Timer wird aktiviert, wenn der Spieler auf Wand2(Von oben, also Top) trifft, der folgendes ausführt: Spieler->Left += 15;[Hier ist das Problem der Spieler geht ständig nach Links und Rechts, doch wenn ich Spieler-> Left -= 15; eingebe kommt kein Problem.Der Spieler bleibt über Wand2]XXXX(Wand2).

Falls etwas nicht verständlich ist, kann ich ein Projekt erstellen.

#2

welche Programmiersprache und evtl. Frameworks setzt du zum Verständnis voraus?
dass ‘Spieler->Left’ in der Zeigerwelt C eine gewisse Bedeutung ‘Variable Left von Objekt/ Einheit/ Ding Spieler’ hat, kann ich mir noch vorstellen,
aber X(Wand) und XXXX(Wand2)?


hast du da übrigens etwas leicht vertauscht?, im ersten (-Satz geht es um links und rechts, dann solltest du im Timer Spieler->Left ändern, nicht Spieler->Top,

im zweiten (-Satz andersrum? allerdings sprichst du dort auch von ‘geht ständig nach Links und Rechts’, dass will so gar nicht zu Wand2(Top) passen,
nochmal neu sortieren oder näher erläutern wann links, rechts, Top, Wand und Wand2 wie zusammenhängen?


grundsätzlich der Holzhammer, der zu jedem Problem passen könnte :wink: :
im Programm genauer anschauen was los ist wenn nicht eh schon,

wenn du eine Variable um 15 veränderst (welche Variable auch immer, ob plus oder minus…) dann sollte sie danach auch um 15 von vorher abweichen,
das passt nicht recht zu ‘bleibt über Wand2’

da kann man nicht einfach meckern, sondern sollte exakt nachvollziehen, zu jedem denkbaren Zeitpunkt, wann die Variablen weiter verändert werden von wem,
es wird ja wohl keine unerklärlichen Wert-Sprünge geben?

im Falle recht offener Variablen wäre aus Java-Sicht ein Weg, die Sichtbarkeit einzuschränken, nur Zugriff über eine Methode,
die exakt jede Verwendung zusammen mit Aufrufer, evtl. schriftlicher Begründung und Passwort-Nachfrage :wink: loggt

#3

Mein Tipp: x(wand) heißt “Die x-Position von ‘wand’”. Auf Indonesisch wäre das dann wohl wall.getX()

#4

Genau das " recht zu ‘bleibt über Wand2’ " ist das Problem.Wenn der Spieler auf Wand1(rechte Seite) trifft, dann werden 2 Timer aktiviert, der 1 Timer(300Milisekunden Takt) führt aus das der Spieler nach unten geht(Top +=15; ) der 2 Timer(10milisekunden Takt) überprüft ob der Spieler auf Wand2 trifft(von oben aus), wenn der Spieler auf Wand2 trifft wird ein zusätzlicher 3 Timer aktiviert(300Milisekunden Takt) der den Spieler nach rechts führt(Left += 15;(Wenn ich aber Left -= 15; schreibe geht alles, doch wenn Left +=15; steht dann bleibt der Spieler über Wand2.)).

EDIT:Ich arbeite mit Windows-Forms und NET 4.5

#5

da hast du aber eine wirklich bemerkenswerte Kombination von komplizierten Programm + deine komplizierte Ausdrucksweise
(Left += 15;(Wenn ich aber Left -= 15; schreibe geht alles, doch wenn Left +=15; steht dann bleibt der Spieler über Wand2.))
wir kommt man auf solche ineinander verschachtelten, immerhin korrekt geklammerten, Sätze?

sieht so aus als stellt Wand1 die Begrenzung rechts des Spielers da, das Auftreffen scheint noch nicht ‘drüber’ zu sein, noch alles ok,
jetzt wird zur Ausweichung nach unten gegangen? von Draufsicht eine 90 Grad-Drehung im Uhrzeigersinn?

Wand2 ist also die Begrenzung unten,
durch die reale Bewegung von 15 durch den ersten Timer könnte ja schon in die Wand hinein gegangen worden sein (vorher ca. in der Ecke),
auch ohne die weiteren Timer ein Problem, falls blind ausgeführt

wenn dann weiter nach rechts, ist das dann nicht ein Problem, in die Wand1, die rechte Wand hineinzugehen (nicht Wand2)?


jede Bewegung sollte vor Ausführung geprüft werden, der erste Timer schlägt nur 15 nach unten vor, nix weiter,
egal wann ausgeführt wird dort neues Problem festgestellt und wiederum anderer Weg ausgeführt,

falls Ausweichen nach rechts normaler Vorschlag, in der Ecke dann wieder Ausweichen nach unten, wieder nach rechts, wieder nach unten usw.,
dann sieht es natürlich nach Deadlock aus,

dafür braucht es

  • entweder höhere Aufpass-Logik, die so eine Ecke erkennt und dann doch nach links statt rechts ausweicht,
  • oder ein Ausweichen immer im Uhrzeigersinn (bzw. immer entgegengesetzt) das hieße auf Weg nach unten Ausweichen nach links, nicht nach rechts!
    (äh, also ich meine auf Weg nach Süden Ausweichen nach West, nicht nach Ost, mit links und rechts kommt es ja auf dem Blickstandpunkt an,
    im Uhrzeigersinn biegt man real durchaus immer nach rechts ab, nach rechts von der vorherigen Richtung)

wenn die Figur nur eine Variable für Waagerecht/ Senkrecht hat, die mit + und - verändert wird, dann benenne sie lieber x + y oder waagerecht + senkrecht, statt Left + Top…