Kollisionsabfrage von zufällig verteilten Körpern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Nuramor

Betreff: Kollisionsabfrage von zufällig verteilten Körpern

BeitragFr, Aug 08, 2008 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Smile
also bei einem weltraumspiel 2D
steuert man ein Schiff und muss durch die Meteorieten steuern...

Wie frage ich aber die Kollision dieser ab, da ich ja keinen festen Standtpunkt habe ... bzw. wie verteile ich diese überhaupt?
Bitte nur Denkanstöße und Vorschläge, aber keinen Code Smile Möchte bei der Sache ja was lernen und nicht einfach kopieren einfügen!
 

BadDeath

BeitragFr, Aug 08, 2008 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
endlich mal wieder einer, der keine fertigen spiele haben will ^^

gucke dir mal in der hilfe die 2d-garfik befehle an, wie:
https://www.blitzforum.de/help/ImagesCollide
https://www.blitzforum.de/help/ImagesOverlap

PS: Du kennst nicht zufällig das Buch "Die Elfen" von James A. Sullivan?
-~= real coders just code in binary =~-

BigMaexle

BeitragFr, Aug 08, 2008 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
(Immer dieses plumpe in-die-Hilfe-oder-zu-Robsite-verweisen-obwohl-es-gar-nix-bringt)

Also: Du hast jetz dein Schiff

SchiffX und SchiffY

Jetz haste 30 Asteroiden, die du am Anfang zufällig verteilst und weil du schlau bist in Arryas verpackst.

Jetz machste ne For-Schleife von 1 bis 3: For HV=1 to 30

Und jetz nimmste immer die X und Y Koordinaten des aktuellen Asteroiden (AsteroidX(HV)) und überprüft mit Imagecollide, ob das Schiff und der Asteroid sich berühren.

Wenn ja, dann BUMM und so Wink
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Aug 09, 2008 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke das hier weniger das Problem ist, ob man es überhaupt machen kann, sondern eher, ob es nicht zu erheblichen Performenceverlusten kommt, da jedes Objekt mit dem Schiff überprüft werden muß. Auf einer Tilemap kann man zum Beispel ganz einfach nur auf die relewanten überhaupt möglichen umliegenden Überprüfen, da die Playerposition die skalierte Mapposition ist. Auf einem freiem Feld sieht das ganze weniger gut aus. Wenn da mal 100 Meteoriten (nichtmal viel) rumschwirren, dann ist eine Kollisionsüberprüfung recht mühselig für den Rechner. Je nachdem wie der Levelaufbau ist, könnte man daher die Map in Sektoren aufteilen, die angeben mit welcher Warscheinlichkeit (welche Dichte) ein Sektor mit Meteorieten vollgestopft ist. Kommt man dann in so einem Bereich, werden einfach kurz über dem sichtbaren Bildschirm ein paar Meteoriten zufällig erstellt (Types) auf welche dann auch eine Kollision geprüft wird. Fliegen diese Meteoriten aus dem sichtbaren Bildschirm wieder raus, so werden diese auch wieder gelöscht.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Nuramor

BeitragSa, Aug 09, 2008 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@BadDeath ja kenn ich Smile


@BigMaexle
mh... ich versteh noch nicht ganz wie ich die zufällig verteile...
also ich möchte z.b. 30 Asteroiden haben...
dann brauch ich ja ein Array mit 30,2 für X und Y Koordinaten oder?
.. mein Problem ist noch wie ich jetzt das zuteile und dann male...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Aug 09, 2008 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
1.) Objekte in einem Level sollten in Types gespeichert werden, da man ja je nach Level unterschiedlich viele von gebraucht. Da ein Array nun statisch ist, ist es für solche Sachen garnicht gedacht.

2.) Du beschreibst ein ''fortschreitendes'' Problem, hast aber anscheinend nicht mal die Grundlagen fertig oder dir zumindest darüber Gedanken darüber gemacht.

Logik:

Jeder Meteor bekommt eine X und eine Y -Position, als auch jeweils eine X und eine Y -Geschwindigkeit. Wenn nun jeden Schleifendurchlauf die Geschwindigkeit an die Position hinzuaddiert wird (Energieerhaltungssatz), dann fliegen die Meteorieten auch schon durch den Bildschirm. Vorraussetzung ist natürlich, jeder Meteor wird an seiner entsprechenden Position auch eingezeichnet.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Jo0oker

BeitragSa, Aug 09, 2008 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
So in etwa:

Code: [AUSKLAPPEN]

MeinSpieler = LoadImage("mein relativer pfad/MeinSpieler.bmp")


Type FliegdingsImWeltall

Field Name$
Field Image
Field x%
Field y%

End Type

Global NeuFL.FliegdingsImWeltall

CreateFLiegDing("Bildpfad", 30, "Grosses DingImWeltAll")

;FliegdingsImWeltall erstellen

For NeuFL = Each FliegdingsImWeltall

   If ImagesOverlap (MeinSpieler, x, y,NeuFL\Image ,NeuFL\x%, NeuFL\y%) Then
   
   ;BOOOOM etwas geht kaputt
   
      
   EndIf
DrawImage NeuFL\Image,NeuFL\x%, NeuFL\y%


Next

Function CreateFLiegDing(image, anzahl%, Name$)

   For i = 1 To anzahl
   
   ;Hier die Types erstellen
   
   Next

End Function


Meintest du sowas in der art?

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Aug 09, 2008 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sieht doch schon gut aus. Es fehlt nur noch eine Geschwindigkeitsangabe und eine pixelgenaue Kollisions nach dem ImagesOverlap.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Nuramor

BeitragSa, Aug 09, 2008 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
@ hectic
mit den Grundlagen hab ich mich sehrwohl beschäftigt, aber von Types stand da meiner Meinung nach nichts drin...
Wo kann ich das nachlesen?
auch der Begriff Field ist mir nicht geläufig...
naja schreib einfach wo man das nachlesen kann dann hol ich das noch nach Smile
und dann weiter mit dem Problem ^^

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Aug 09, 2008 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, das kam aber so rüber, da du überhaupt nicht auf meine Hilfestellung eingegangen bist. Das Problem ist, dass eben eine Kollisionsabfrage eben relativ langsam ist. Bei nur 30 Objekten überhaupt im Level sollte es noch machbar sein. Sollten aber mehr Objekte in einem Level vorhanden sein (nicht unbedingt zur gleichen Zeit auf dem Bildschirm sichtbar), dann sollte man sich Gedanken drüber machen, wie man es gescheit zu lösen vermag. Bei einer Tilemap ist es im Unterschied ganz einfach nur die umliegenden Tiles (4 bis max 9 Tiles) zum Player zu überprüfen. Da es hier aber kein Tilessystem ist, sondern frei rumschwirrende Objekte, ist es allerdings etwas schwiriger. Daher könnte man es so lösen, wie ich es ganz oben beschrieben hatte.

Informationen über Types findest du in der deutschen OH zum Beispiel unter Type und natürlich die darauf weiter führende Links, die einem ganz unten jeder Seite vorgeschlagen werden. Einen guten Ansatz hat bereits Jo0oker in seinem Beispiel gemacht.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Nuramor

BeitragSo, Aug 10, 2008 11:16
Antworten mit Zitat
Benutzer-Profile anzeigen
kk danke ich werd mir das mal zu gemüte führen ^^

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group