C# Location stimmt nicht bei Spiel

marivuko

Cadet 3rd Year
Registriert
Mai 2013
Beiträge
48
bild.png


Hallo allerseits,

erstmal habe ich euch ein Bild hochgeladen, damit ihr nachvollziehen könnt wovon ich rede.
Ich versuche ein Spiel darzustellen, mein Panel soll das Wasser entsprechen, meine 3 PicureBoxen sollen Felsen entsprechen und einen Spieler.
Spielablauf: Mein Spieler/Gamer soll sich von einem Felsen zum Anderen bewegen ohne dabei ins Wasser zu fallen, die Felsen bewegen sich von rechts nach links und wenn sie am Ende des Panels sind fängt die Bewegung wieder von vorne an.
Falls mein Spieler jedoch ins Wasser fallen sollte wird er auf die Startposition gesetzt.
Habe dazu einen Code geschrieben, nun habe ich aber das Problem, dass mein Code die Felsen gar nicht berücksichtigt,
egal was ich mache, mein Gamer wird auf die Startposition zurückgesetzt.
Kann mir vielleicht einer sagen warum.
Wäre für jede Hilfe dankbar :)
mein Gamer Startposition ist die 203/237

Code:
            if (gamer.Bounds.IntersectsWith(panel.Bounds))
            {  Console.WriteLine("Leben weg"); player.Location = new Point(203, 237); }
            if (gamer.Bounds.IntersectsWith(felsen.Bounds))
            {  gamer.Location = felsen.Location; }
 
Zuletzt bearbeitet:
Du fragst ja zuerst ob dein Spieler sich auf das Panel bewegt. Das macht er, auch wenn er auf einen Stein springt. Daher wird er in jedem Fall auf die Startposition zurückgesetzt. Die zweite Abfrage ist dann natürlich immer false.
 
also ich den Code { gamer.Location = felsen.Location; } einfach drin lassen und mit false ergänzen, aber ich wüsst net wo :(
 
Ich würde zuerst abprüfen ob der Spieler auf einen Felsen trifft. Im Else-Zweig ihn dann zurück teleportieren.
 
Du musst dir einfach mal Zeile für Zeile vornehmen und dir klar machen was dort passiert und was dann dein neuer "Zustand" ist.
Nehmen wir mal an du bist auf einen Stein gesprungen und jetzt kommst du im Code zu der Stelle die du eingangs gepostet hast, dann passiert folgendes:
Zeile 1: Die Bedingung prüft ob sich die Fläche des Panels mit der deiner Spielfigur überschneidet. Das ist der Fall, da auch alle Steine im Bereich des Panel liegen. Das führt dazu, dass Zeile 2 ausgeführt wird.
Zeile 2: Setzt deine Spielfigur wieder auf den Startpunkt.
Zeile 3: Da deine Spielfigur bereits wieder auf dem Startpunkt steht ist diese Bedingung nie erfüllt und Zeile 4 wird nicht ausgeführt.

Du müsstest also nachdem du überprüft hast ob deine Spielfigur im Panel ist noch testen ob sie sich auf einem Stein befindet bevor du sie zurücksetzt. Ist das nämlich der Fall darfst du sie nicht zurücksetzen.
 
also zuerst prüfen ob meine Spielfigur im Panel ist mit
Code:
if (gamer.Bounds.IntersectsWith(panel.Bounds))
dann ob sie sich auf einem Stein befindet mit
Code:
 else if  (gamer.Bounds.IntersectsWith(felsen.Bounds))
dann spieler zurücksetzen mit
Code:
gamer.Location = new Point(203, 237);
habe ich das so richtig verstanden ?
aber wie packe ich das ganze in eine Funktion
 
Ne, wenn du es mit else machst, dann müsste sich der Spieler auf einem Stein, aber nicht im Panel befinden. Das ist unmöglich.
Eher so ungefähr:
Code:
if (gamer.Bounds.IntersectsWith(panel.Bounds)) {
    if (!gamer.Bounds.IntersectsWith(felsen.Bounds)) {
        gamer.Location = new Point(203, 237);
    }
}
Wenn du die anderen Fälle nicht einzeln brauchst, kannst du das auch mit einem If lösen (ich übernehme keine Garantie für die korrektheit der Logikoperatoren in C#)
Code:
if (gamer.Bounds.IntersectsWith(panel.Bounds) && !gamer.Bounds.IntersectsWith(felsen.Bounds) {
    gamer.Location = new Point(203, 237);
}

In beiden Fällen wird die Spielfigur nur zurückgesetzt, wenn sich der Spieler im Panel und nicht auf einem Stein befindet.
 
habs grad probiert, läuft leider nicht mein gamer wird auch zurückgesetzt wenn er mit einem Felsen in Berührung kommt :(
 
was meinst du mit mehr Code ? mehr als das und die Timer habe ich nicht
 
Tja, könnte ich mir nicht erklären. Bist du sicher, dass du den Code genauso übernommen hast? Besonderes Augenmerk liegt auf dem ! für die Negation.
 
ich glaub ich weiß jetzt wo das Problem liegt, und zwar geht mein Gamer unter den Panel drunter, er stoßt somit mit dem Felsen nie zusammen,
aber komisch warum geht er unter dem Panel drunter und net von oben?
 
Da bin ich vermutlich überfragt, da ich von C# ansich keine Ahnung hab. Ich hätte mir vorgestellt, dass jedes Rechteck von jeweils 2 2D Punkten repräsentiert wird und es gar kein drüber oder drunter gibt. Wenn das nicht der Fall ist musst du gucken wie sie definiert sind und wie der Schnitt berechnet wird. Dann sollte klarer werden warum der Schnitt mit den Steinen nicht passt.
 
Zurück
Oben