Scratch Beginner Braucht nen bissl Hilfe?
Hey Leute ich arbeite schon länger an einem Ping Pong in Scratch ich habe den größten teil fertig
mein Problem ist dass wenn der ball zu spitz auf die Blöcke Kommt er Manchmal Durch die Blocke geht (das Passiert Manchmal auch so)
Falls sich jemand dass mal ansehen kann/möchte und mir helfen kann hier ist der Link
https://scratch.mit.edu/projects/1077747983
Vielen Dank Schonmal in vorraus
1 Antwort
Ich konnte den Fehler jetzt nicht nachstellen.
Du nutzt aber die eingebauten Funktionen zur Kollisionserkennung, das sollte an und für sich ausreichen.
Ich denke, entweder wird die Kollision auch im unsichtbaren Bereich des Sprits passieren (z.B. Im Viereck um den Ball herum) oder sie ist einfach ungenau.
Oder aber es funktioniert alles korrekt, sieht aber falsch aus.
Wenn es nicht am unsichtbaren Bereich liegt, würde ich davon ausgehen und schauen, dass ich trickse, damit es besser aussieht. Das würde auch dann helfen, wenn die Kollisionserkennung z.B. ungenau ist.
Du könntest beispielsweise die Kollisionserkennung auf Sprits machen, die ganz wenig größer sind als das, was der Nutzer sieht. Das sollte dann zumindest das Problem mit den Ecken lösen.
Muss Jetzt erstmal los gucke hier in so ca. Ner Stunde wieder rein
Mit der Kolisierungserkennung der Sprits meinst du dass wenn der ball die berührt senden die ein Signal dass dem Ball sagt umdrehen richtig?
Genau. Bzw. eigentlich meine ich sogar nur die Erkennung der berührung.
Denke jetzt schon etwas länger darüber nach habe aber keine Ahnung wie ich das in Scratch umwandeln kann mit dem einheitskreis kannst du dir das vielleicht mal angucken und mir in Blöcken zeigen wie dass geht?? Das wäre nett
Mein Problem ist gerade, dass ich nicht weiß, wie ich erkennen soll, welche Wand des Würfels mit dem Ball kollidiert. Das muss man aber wissen, sonst kann man die Kollision nicht richtig berechnen.
Ich denke du wirst den Wänden jeweils einzelne Farben geben müssen oder die Kollisionserkennung selber implementieren müssen.
Bzw. evtl. kannst du auch irgendwie über die Position auswerten, welche Kante es nun genau ist.
Wenn du die Kante hast, dann musst du eine Fallunterscheidung machen. Bei oben/unten negierst du die y-Achse, bei links/rechts die x-Achse (oder andersherum, je nach orientierungd es Koordinatensystems).
Du hast als Block die Funktionen cos, sin, acos und asin.
Du musst also eines der folgenden tun:
Winkel_neu = asin(-x) = asin(-sin(Winkel));
Winkel_neu = acos(-y) = acons(-cos(Winkel);
Also quasi erst x bzw. y-Wert bestimmen mittels Sinus bzw. Kosinus. Dann negieren und dann daraus wieder den Winkel berechnen.
Für den Sinus lässt sich das auch vereinfachen:
Winkel_neu = asin(-sin(Winkel)) = -asin(sin(Winkel)) -Winkel;
Ich habe selber versucht den Bug so schwer wie möglich zu machen aber es passiert bei mir bei jedem dritten Versuch oder so
es passiert wenn der Ball in einem Spitzen Winkel von der Seite auf einen Block Knallt dann wird der ball (nach code) in der Richtung mal-1 und dann -180° gedreht dass Problem wenn mal z.b. einen 90 grad Winkel hat heißt das 90 mal -1=-90 -180°=90 also bleibt er das selbe passiert auch bei 91 92 93 usw
Was für ein „unsichtbarer Bereich“? Bin noch ziemlich neu und hab mir alles selber beigebracht
Der ball ist rund. Vorliegen tut der aber als viereckige Grafik. Der Bereich um den Ball herum ist quasi unsichtbar.
Wobei das nicht zum Problem passt, ich denke es wird an etwas anderem liegen.
Wenn du auf dem Ball Sprite Die Unteren Linken Sachen löst so dass sie sich nicht aktivieren kannst du den Bug einfach hervorrufen
Hm, wobei das vielleicht doch sein kann, wenn ich mir das jetzt noch einmal anschaue.
es passiert wenn der Ball in einem Spitzen Winkel von der Seite auf einen Block Knallt dann wird der ball (nach code) in der Richtung mal-1 und dann -180° gedreht dass Problem wenn mal z.b. einen 90 grad Winkel hat heißt das 90 mal -1=-90 -180°=90 also bleibt er das selbe passiert auch bei 91 92 93 usw
Also bei mir ändert der Ball nach jeder Kollsion die Richtung, soweit ich das sehe.
Aber wenn du es richtig machen möchtest, eigentlich willst du nur das Objekt drehen und solltest nicht die geschwindigkeit verändren müssen. Der Ball soll sich quasi vom Objekt wegdrehen.
Mit Vektoren wäre das vergleichsweise einfach, ich müsste erst schauen, wie da smit dem drehen passend umzusetzen wäre.
Ich meinte damit die Richtung nicht die Geschwindigkeit
Wenn du auf dem Ball Sprite Die Unteren Linken Sachen löst so dass sie sich nicht aktivieren kannst du den Bug einfach hervorrufen
Ich weiß nicht, welche genau, und ich glaube, ich kann das selbst auch nicht tun bei deinem Projekt.
Ich meinte damit die Richtung nicht die Geschwindigkeit
Hn, stimmt. Ich gucke mal.
Das sind die Ganz unten Links 2 und die 2 rechts daneben die heßen sowas wie wenn i recive start repeat forever if direction < then bla bla bla
und du kannst ja sagen ins Projekt reinschauen und dann Sachen ändern die dann nur für dich geändert werden
Also an und für sich musst du unterscheiden, welche Seite der Würfel getroffen werden, dann den Ball passend drehen.
Es handelt sich dabei um eine Spiegelung, nicht um eine Drehung, das macht es schwerer.
Du kannst es dir einmal am Einheitskreis anschauen:
https://de.wikipedia.org/wiki/Einheitskreis
Stell dir vor, du hast einen Winkel oben rechts. Wenn du an deine Kiste oben oder unten anstößt, dann soll es ein Winkel oben links werden. Wenn du links oder rechts anstößt, dann soll es ein Winkel unten rechts werden.
Am Einheitskreis ist
x = sin(Winkel);
y = cos(Winkel);
Bei der Spiegelung an einer der hauptachsen (an einer der Seiten des Quaders) negieren wir eine der Achsen. Entweder die x-Achse oder die y-Achse.
Es gilt:
-x = sin(-Winkel);
-cos(90 - Winkel) = cos(90 + Winkel);
Die Spiegelung an der y-Achse (x negieren) ist also einfach, da muss man nur den Winkel negieren.
Die Spiegelung an der x-Achse ist schwerer.
Für die Spiegelung an der x-Achse musst du entweder 90° addieren oder subtrahieren.
Was von beiden, kann man entweder lösen, indem man mit Kosinus und Sinus arbeitet, oder man macht eine Fallunterschiedung.
Habe Nur die Hälfte verstanden aber ich denke die Hauptsachen verstehe ich
Ich werde mal gucken ob ich das schaffe zu implementieren aber danke ich werde mich melden wenn es sowohl funktioniert als auch nicht funktioniert
Das Problem ist ich habe in der Schule nie Cos und Sin verstanden :=( xD
Naja, im wesentlichen musst du nur verstehen:
Eine Richtung lässt sich in einen Winkel umwandeln. Dafür braucht es Cosinus oder Sinus.
Eine Richtung ist mit einer x und einer y-Koordinate angegeben und hat die Länge 1.
Deine Richtung ist also quasi ein Punkt auf dem Einheitskreis. Die x-Achse der Richtung ist der Sinus des Winkels, die y-Achse der Kosinus des Winkels.
Wobei du eigentlich nicht einmal das brauchst. Wie gesagt, die Spiegelung an der einen Achse ist trivial (nur negieren) und die Spiegelung an der anderen Achse lässt sich durch Fallunterscheidung lösen (müsste zwei mögliche Fälle geben).
Mit der Kolisierungserkennung der Sprits meinst du dass wenn der ball die berührt senden die ein Signal dass dem Ball sagt umdrehen richtig?