Kollisionsabfrage von zufällig verteilten Körpern
Übersicht

NuramorBetreff: Kollisionsabfrage von zufällig verteilten Körpern |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo ![]() 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 ![]() |
||
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
(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 ![]() |
||
--------------------------------------
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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@BadDeath ja kenn ich ![]() @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... |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ 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 ![]() und dann weiter mit dem Problem ^^ |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Nuramor |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
kk danke ich werd mir das mal zu gemüte führen ^^ | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group