Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zusammenprall von Objekten
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Thong



Anmeldungsdatum: 06.06.2005
Beiträge: 8
Wohnort: Basel

BeitragVerfasst am: 06.06.2005, 21:27    Titel: Zusammenprall von Objekten Antworten mit Zitat

Hallo Leute ,
Ich habe ein Problem:
wie macht man,
dass wenn ein Objekt zum Beispiel auf ein Hinderniss trifft , dass es dann zum beispiel explodiert oder so. und wenn möglich sogar eine Kettenreaktion auslöst an den hintenstehenden Objekten.

(ich bin ein qbasic anfänger , wenn ihr euch fragt was dass für eine Frage sein soll)

mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 06.06.2005, 21:32    Titel: Antworten mit Zitat

Ähnliches Thema mit ähnlichen Fragen die ich mal gestellt habe:

http://forum.qbasic.at/viewtopic.php?t=400&highlight=
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 06.06.2005, 22:02    Titel: 2D-Kollisionen Antworten mit Zitat

Es kommt immer darauf an, wie präzise die Kollisionsabfrage sein soll.

Die früheren Commodore-Rechner (C 64 und Amiga) hatten eine präzise Kollisionsabfrage in ihrer Video-Hardware implementiert, welche wirklich nur dann das Bit auf 1 setzte, wenn ein Pixel mit dem Hintergrund überlappte.

All dies fehlt natürlich beim PC, so dass man dies softwaremässig lösen muss. Für einfache Ansprüche genügt der Rechteckumriss-Koordinatenvergleich. Wenn es dagegen C 64-mässig ebenfalls präzise sein muss, so würde ich eine Art Kollisionsbitmap generieren: Unsichtbarer Bildbereich (z.B. nicht dargestellte Seite in SCREEN 7), wo jeder Pixel einem bestimmten relativen Abstand der beiden Sprites entspricht und entweder 0 oder 1 als Farbe besitzt => diese Bitmap als einmalige Initialisierung zu Beginn des Spiels berechnen. Tipp dazu: Sihouetten bilden, die eine Farbe 1 und die andere Farbe 2, beide jeweils mit XOR übereinanderPUTten und nach POINT(x,y)=3 im Überlappungsbereich suchen.

Im Spiel selber würde ich den Rechteckvergleich anwenden. Trifft dieser zu, so würde ich das zum relativen Abstand der beiden Sprites zugehörige Kollisionsbitmap-Pixel mit POINT() abfragen und entsprechend -1 (TRUE) oder 0 (FALSE) zurückgeben.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Distelpalme



Anmeldungsdatum: 15.10.2004
Beiträge: 34
Wohnort: Basel

BeitragVerfasst am: 08.06.2005, 16:05    Titel: hmm ja Antworten mit Zitat

Öm... grinsen
Wenn ich jetzt aber z.B. ne Bowlingsimulation HÄTTE (!!!) zwinkern und fragen will, ja, trifft denn der ball den kegel? Ich hab eine kollisionsabfrage geschrieben die abfragt ob die kreise punktgenau aufeinander treffen, also so: OO (bumm zwinkern)
aber wenn die kugeln schräg aufeinander treffen klappts nicht weinen mit dem Kopf durch die Mauer wollen durchgeknallt Kopf schütteln grinsen
(ich hoffe das war verständlich formuliert... hab mit thonk über skype telefoniert peinlich grinsen happy
p.s. tönkis skypename: t.tran meiner: distelpalme happy)


Zuletzt bearbeitet von Distelpalme am 08.06.2005, 16:12, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.06.2005, 16:11    Titel: Antworten mit Zitat

also eigentlich bei zwei runden Objekten ist der Abstand gleich der Wurzel der summe der quadrate der einzelnen Abstände, also
SQR(Dx^2 + Dy^2)
(D = groß-Delta, Differenz, Da = a2 - a1)
und wenn das was da rauskommt kleiner als radius1+radius2 ist stecken die Objekte ineinander.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thong



Anmeldungsdatum: 06.06.2005
Beiträge: 8
Wohnort: Basel

BeitragVerfasst am: 08.06.2005, 16:22    Titel: BISSCHEN zu kompliziert -_-° Antworten mit Zitat

Danke für die Erklährung , leider.......
ist das für einen kleinen 14 Jährigen wie mich zu kompliziert peinlich .......
und Distelpalme tscheckts auch nich weinen

Bitte um eine Ausführung......
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Distelpalme



Anmeldungsdatum: 15.10.2004
Beiträge: 34
Wohnort: Basel

BeitragVerfasst am: 08.06.2005, 16:25    Titel: dudidu... Antworten mit Zitat

grinsen jo ich checks nich grinsen mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen grinsen durchgeknallt Kopf schütteln peinlich weinen Zunge rausstrecken zwinkern lächeln happy lachen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 08.06.2005, 20:28    Titel: Antworten mit Zitat

Vielleicht spart ihr euch mal die ganzen Smilies. zwinkern

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.06.2005, 20:30    Titel: Antworten mit Zitat

ihr lol0rs xD

also, ihr habt den Kegel mit x1|y1 als Koordinaten und r1 als Radius und die Kugel mit x2|y2 als Kordinaten und r2 als Radius. dann prüfst du eine Kollision mit dem Vergleich

IF r1 + r2 <= SQR((x2 - x1) ^ 2 + (y2 - y1) ^ 2) THEN blablabla
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Distelpalme



Anmeldungsdatum: 15.10.2004
Beiträge: 34
Wohnort: Basel

BeitragVerfasst am: 08.06.2005, 21:34    Titel: aha Antworten mit Zitat

Jo grinsen grinsen grinsen ich lass die smileys weg, wie man sieht zwinkern mit den Augen rollen lachen happy grinsen cool lächeln zwinkern Kopf schütteln verlegen durchgeknallt grinsen zwinkern xD
Ok, aber was ist SQR?
und öm, habs ausprobiert und da funzt was nicht. hier der code:
Code:

cls
screen 9
x1=0
y1=0
x2=600
y2=300
r1=100
r2=200
do while r1+r2 <= SQR((x2-x1)^2+(y2-y1)^2)
'hmm... do until funzt nicht... :D
circle (x1, y1), r1
circle (x2, y2), r2
circle (x1+1, y1), r1
circle (x2-1, y2), r2
circle (x1, y1), r1, 0
circle (x2, y2), r2, 0
x1=x1+1
x2=x2-1
loop

und wenn die beiden bälle genau übereinander sind, sich aber NICHT berühren, springt er aus der DO-LOOP-SCHLEIFE... weinen
Viel spaß beim erklähren wünschen euch 2 noobs zwinkern

Disti & Tönk


Zuletzt bearbeitet von Distelpalme am 08.06.2005, 21:50, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 08.06.2005, 21:46    Titel: Antworten mit Zitat

Mit SQR ziehst du die Quadratwurzel aus einer Zahl. Bei 256 wäre das z.B. 16, oder bei 123 wäre das 11,090536506... zwinkern Genaueres in der MonFAQ.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 08.06.2005, 22:04    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Mit SQR ziehst du die Quadratwurzel aus einer Zahl. Bei 256 wäre das z.B. 16, oder bei 123 wäre das 11,090536506... zwinkern Genaueres in der MonFAQ.


Oder anders: Wurzeln ziehen ist die Gegenoperation zu x² (x*x also eine Zahl mal sich selbst aber was ², ³ etc. weist du bestimmt.) .
Beispiel:

2² (2*2) = 4
Die Wurzel aus 4 wäre dann 2! Also Wurzeln ziehen ist sozusagen fragen "Welche Zahl gibt mal sich selbst genommen die Zahl x ?" zwinkern
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Distelpalme



Anmeldungsdatum: 15.10.2004
Beiträge: 34
Wohnort: Basel

BeitragVerfasst am: 08.06.2005, 22:07    Titel: Antworten mit Zitat

[quote="Devilkevin"]
Sebastian hat Folgendes geschrieben:
Also Wurzeln ziehen ist sozusagen fragen "Welche Zahl gibt mal sich selbst genommen die Zahl x ?" zwinkern

Hu, ja danke, aber was wurzeln ziehen ist weiss ich durchgeknallt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Thong



Anmeldungsdatum: 06.06.2005
Beiträge: 8
Wohnort: Basel

BeitragVerfasst am: 09.06.2005, 21:51    Titel: mmmmmm..-_-° -_-° -_-° -_-° -_-° Antworten mit Zitat

Danke für die Erlklärung , was Wurzel ziehen ist, aber dass weiss jeder .Warum aber der Code von Distelpalme nicht funktioniert weiss ich immer noch nicht weinen mit dem Kopf durch die Mauer wollen peinlich Kopf schütteln missbilligen verlegen mit den Augen rollen traurig verwundert neutral
Weiss dass überhaupt JEMAND ????????????? mit dem Kopf durch die Mauer wollen peinlich Kopf schütteln missbilligen Zunge rausstrecken weinen durchgeknallt böse geschockt verlegen mit den Augen rollen happy cool verwundert traurig neutral grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.06.2005, 22:00    Titel: Antworten mit Zitat

Hallo.

Bitte weniger Smilies verwenden.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 09.06.2005, 22:09    Titel: Antworten mit Zitat

dann halt hier:

dreh mal die Bedingung in der DO WHILE um:

Code:
do while r1+r2 >= SQR((x2-x1)^2+(y2-y1)^2)


Habs nicht getestet, aber ich denke das isses.
_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Distelpalme



Anmeldungsdatum: 15.10.2004
Beiträge: 34
Wohnort: Basel

BeitragVerfasst am: 09.06.2005, 22:10    Titel: nochmal Antworten mit Zitat

Man tönk, hör doch mal mit den smileys auf happy

Also, ich poste hier nochmal den "defekten"
Code:
cls
screen 9
x1=0
y1=0
x2=600
y2=300
r1=100
r2=200
do while r1+r2 <= SQR((x2-x1)^2+(y2-y1)^2)
'hmm... do until funzt nicht... :D
circle (x1, y1), r1
circle (x2, y2), r2
circle (x1+1, y1), r1
circle (x2-1, y2), r2
circle (x1, y1), r1, 0
circle (x2, y2), r2, 0
x1=x1+1
x2=x2-1
loop

Und wie gesagt, die kugeln flattern meilenweit aneinander vorbei und trotzdem meint qb, ja, das war ne kollision weinen
Viel spaß beim beantworten zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 09.06.2005, 22:25    Titel: Kollisionen von Kugeln Antworten mit Zitat

Ein hübsches Beispiel, wo man sehen kann, wie ich dieses Problem seinerzeit einmal gelöst habe, findet man in

http://www.dreael.ch/Deutsch/Download/Billard-Simulation.html
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 09.06.2005, 22:47    Titel: Antworten mit Zitat

http://phpfi.com/65272

das is die kleinere Version, da funktioniert die Kollisionsabfrage mit genau der Formel die ich euch gegeben hab..

Die Kollision an sich müsst ihr dann aber selbst machen zwinkern Da bewegen die Kugeln sich nur vertikal in die entgegengesetzte richtung weiter, egal von wo sie kommen.. Oder ihr nehmt einfach dreaels programm, da is kollision auch schon drin. weiß nicht, welche ihr versteht.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Distelpalme



Anmeldungsdatum: 15.10.2004
Beiträge: 34
Wohnort: Basel

BeitragVerfasst am: 10.06.2005, 14:28    Titel: ... Antworten mit Zitat

Hey, D
Du hast da in dem code

DIM kugel(1) AS ball

Wozu ist das "AS ball" gut? Oo durchgeknallt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden AIM-Name Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz