Scratch Beginner Braucht nen bissl Hilfe?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

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.


AGEUKE725 
Beitragsersteller
 07.10.2024, 11:33

Muss Jetzt erstmal los gucke hier in so ca. Ner Stunde wieder rein

AGEUKE725 
Beitragsersteller
 07.10.2024, 11:21

Mit der Kolisierungserkennung der Sprits meinst du dass wenn der ball die berührt senden die ein Signal dass dem Ball sagt umdrehen richtig?

Destranix  07.10.2024, 11:22
@AGEUKE725
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.

AGEUKE725 
Beitragsersteller
 09.10.2024, 12:20
@Destranix

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

Destranix  09.10.2024, 14:15
@AGEUKE725

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;
AGEUKE725 
Beitragsersteller
 07.10.2024, 11:17

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

AGEUKE725 
Beitragsersteller
 07.10.2024, 11:13

Was für ein „unsichtbarer Bereich“? Bin noch ziemlich neu und hab mir alles selber beigebracht

Destranix  07.10.2024, 11:14
@AGEUKE725

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.

AGEUKE725 
Beitragsersteller
 07.10.2024, 11:19
@Destranix

Wenn du auf dem Ball Sprite Die Unteren Linken Sachen löst so dass sie sich nicht aktivieren kannst du den Bug einfach hervorrufen

Destranix  07.10.2024, 11:22
@AGEUKE725

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.

AGEUKE725 
Beitragsersteller
 07.10.2024, 11:24
@Destranix

Ich meinte damit die Richtung nicht die Geschwindigkeit

Destranix  07.10.2024, 11:25
@AGEUKE725
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.

AGEUKE725 
Beitragsersteller
 07.10.2024, 11:27
@Destranix

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

Destranix  07.10.2024, 11:49
@AGEUKE725

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.

AGEUKE725 
Beitragsersteller
 07.10.2024, 12:14
@Destranix

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

AGEUKE725 
Beitragsersteller
 07.10.2024, 12:25
@Destranix

Das Problem ist ich habe in der Schule nie Cos und Sin verstanden :=( xD

Destranix  07.10.2024, 14:43
@AGEUKE725

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).