Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.04.2016, 20:49

PYTHON: "Kollision" von zwei Bällen erkennen

Hallo Forum,

ich bin Python-"Einsteiger" und muss für die Schule ein kleines, kurzes Spiel programmieren:

-IDEE-
Es gibt einen Ball (einfacher Kreis) der vom Spieler mithilfe der Maus gesteuert wird. Ziel des Spiels ist es letztendlich nur, dass der eigene Ball einen anderen, zufällig generierten Ball berührt. Mit dieser Berührung "frisst" er ihn theoretisch auf. (Der Kreis bewegt sich nicht, sondern bleibt an seiner Stelle)
Das war's im Grunde schon... weitere Details werde ich wahrscheinlich später noch programmieren.

-UMSETZUNG-
Den vom Spieler bewegten Ball und den zufällig programmierten Ball habe ich bereits fertig.
Jedoch weiß ich nicht, wie ich es hinbekomme, dass, wenn ich mit meinem selbstgesteuerten Ball den festen Ball berühre, dass dieser verschwindet. Ich habe schon versucht, dies mithilfe der Koordinaten hinzubekommen, aber irgendwie schaffe ich das nicht.

Wäre nett, wenn Ihr mir helfen könntet... falls Ihr etwas nicht verstanden, fragt gerne nach!

LG
fragezeichen123

2

07.04.2016, 22:04

Hey, ich weiß nicht, ob ich dich richtig verstehe, aber du scheinst ein Problem damit zu haben zu erkennen, ob sich 2 Kreise berühren?
Das ist eigentlich ganz einfach.
Du hast sicherlich den Mittelpunkt beider Kreise und natürlich auch den Radius. Jetzt ermittelst du die Distanz von Mittelpunkt Kreis 1 und 2 (mittel Pythagoras) und musst dann nur noch prüfen, ob die Distanz <= Radius1 + Radius2 ist.

mfg

3

07.04.2016, 22:07

Hallo Fragezeichen123 !

Ich empfehle dir Pygame zu installieren damit hast du Zugriff auf eine Rectangle Klasse die dir einige Funktionen bietet.

--> http://www.pygame.org/docs/ref/rect.html

zb. contains(). Damit kannst du prüfen ob ein Rectangle in dem anderen ist. Das heißt du machst 2 kleine Rechtecke um die Bälle und dann kannst du prüfen ob diese Kollidieren.

Ansonsten könntest du noch folgende Themen Googlen.

Rectangle Collision
Circle Collision

Viele Grüße

CreatingDreams

4

07.04.2016, 22:09

Ok... werde das ganze morgen mal versuchen. DANKE! :)

5

08.04.2016, 18:45

ich mach es in antiminer etwa so wie anti-freak beschreibt.

C-/C++-Quelltext

1
2
3
4
5
6
dx = a.x-b.x;
dy = a.y-b.y;

if(dx^2 + dy^2 <= (a.r+b.r)^2){
//collision
}

6

08.04.2016, 18:50

Ist natürlich ne gute Idee, die Wurzel raus zu nehmen. Danke dafür ;)

7

14.04.2016, 18:05

Hallo Leute,

danke für die ganzen Tips... habe das ganze jetzt mit dem Satz des Pythagoras ausgerechnet... und lasse mir erstmal die X und Y Distanz zwischen den beiden Bällen anzeigen (printen). Jedoch ist jetzt mein Problem, dass wenn ich meinem Ball unterhalb oder rechts neben den zufällig erstellten Ball setze, er mir eine Fehlermeldung ausgibt (ValueError: math domain error). Grund dafür ist wahrscheinlich, dass die Distanz jetzt im Minus-Bereich liegt, und so der Satz des Pythagoras nicht mehr angewendet werden (wegen Wurzel und dem Hoch2)... kann man das irgendwie ändern, sodass er es in beiden Richtungen als + ansieht?

Schon mal danke im Voraus für Eure Hilfe!!! :)

8

14.04.2016, 18:14

also grundlegend ist der Satz ja A²+B²=C². D.h. die ausgerechneten Werte können gar nicht in den - Bereich, da - x - = + ergibt. Vll gibst du uns ja auch mal ein bisschen Code und zeigst uns, wie du das umgesetzt hast.

9

14.04.2016, 18:20

DistanzX = math.sqrt(ZufallsBall1X - xKoordinateBallNeu)**2
DistanzY = math.sqrt((ZufallsBall1Y) - (yKoordinateBallNeu))**2

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

14.04.2016, 18:39

Reihenfolge von Operatoren beachten. Grundlagen der Mathematik beachten.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige