Eine einfache Kollision in Processing Java zB Schuss und spieler?
Hallo,
Ich versuche die ganze Zeit eine Kollision zu progammieren aber es funktioniert nicht wie ich es möchte.
Schussx = 25;
Schussy + 2.5;
Spielerx = 20;
Wenn ich Pfeiltaste rechts drücke passiert {
Spielery +1
}
Ich hab es mit einem boolean ausprobiert:
Siehe Bild

1 Antwort
1) Schau mal, wieso deine Variablen rot unterstrichen werden. Sind das Syntaxfehler oder liegt es nur an der Rechtschreibkorrektur?
2) Was meinst du, passiert in diesen Zeilen:
Schussy + 2.5;
Spielery +1
?
In jedem Fall wird der Wert der Variablen mit dem konstanten Wert (2,5 oder 1) addiert und danach wieder weggeschmissen.
3) Deine Logik ist falsch. Angenommen, der Schuss befindet sich in S(1/2) und der Spieler befindet sich bei P(2/1). In beiden Fällen ist die Summe aus x- und y-Koordinate 3, doch beide Punkte kollidieren nicht miteinander.
Prüfe in der draw-Funktion, ob die Koordinaten beider Punkte gleich sind. Arbeite dabei aber nicht mit Fließkommazahlen sondern dem Integer-Typ, da sollte völlig ausreichen und erspart dir das Risiko von Rundungsfehlern.
Wird es aber nicht, das habe ich dir bereits in meiner ersten Antwort oben erklärt.
Ich hab hier ein beispiel gemacht:
float balkenx;
float balkeny;
float schussx;
float schussy;
void setup() {
size(500,500);
background(0);
balkeny = 230;
balkenx + 1;
schussx = 200;
}
void draw(){
schussy = 2.5;
rect(schussx,schussy,20,20);
rect(balkenx,balkeny,20,20);
if(mousePressed){
balkenx = balkenx + 1;
}
}
Wo ist da ein Koordinatenvergleich und noch viel wichtiger: Wo bewegt sich da etwas, außer die horizontale Position des Balkens bei Drücken der Maustaste?
Ein Punkt kann sich nie mit einem anderen Punkt überschneiden, wenn er nicht die gleichen Koordinaten erreicht. Das hättest du spätestens dann gesehen, wenn du dir, wie ich dir geraten habe, die Werte zur Laufzeit einmal über die Konsole hättest ausgeben lassen.
Ok werde ich machen
Wie würdest du den machen ?
Ganz simple
Mit freundlichen Grüßen
Genauso- Wort für Wort, wie ich es im letzten Absatz geschrieben habe.
ich habs mal so ausprobiert:
if((schussx1 == balkenx) && (schussy1 == balkeny)){
}
aber funktioniert nicht :(
ich wäre dir extrem dankbar wenn du mir ein SourceCode schreiben würdest :)
Das kann nur bedeuten, dass eine Überschneidung der Werte nie zutrifft. Lass dir doch einmal die Werte der Variablen zur Laufzeit in der Konsole ausgeben und überprüfe vor allem, ob sie sich überhaupt einmal in die gewünschte Richtung verändern.
sie bewegen sich in die gewünschte richtung
schussy1 + 2;
das heisst in dem fall, dass es sich nach unten bewegt
balkenx +1;
das heisst, dass der spieler nach rechts bewegt
ich werde noch wahnsinnig
ich hab so viele möglichkeiten ausprobiert aber ohne erfolg
soll ich dir am besten den ganzen code schicken?
Schussy + 2.5; anstatt Schussy = 2.5;
Es soll sich ja bewegen