'ne idee zu wegschießbarem gelände
-
Hi,
nachdem ich letztens mal wieder Worms gezockt habe, hab ich mich gefragt, wie ie das mit dem gelände machen...also, dass man das wegschießen kann. nun habe ich mir mal ein paar gedanken dazu gemacht:fürs erste braucht man zwei gleichgroße bilder. das eine stellt die landshaft dar (die eigentliche umgebung) und das andere wird zur kollisionserkennung genutzt. das zweite bild sollte dann irgendwie schwarz-weiß oder so sein.
bsp:
mapimage:
http://www.slin-online.de/Tutorials/img/map.jpgkollissionsimage:
http://www.slin-online.de/Tutorials/img/collisionmap.jpggut.
nun erstellen wir uns eine virtuelle bitmap der gleichen größe auf welche dann alles gezeichnet wird und laden die beiden erstellten images (map und kollision). nun wird in jeder runde das mapimage (wenn man will auch mit transparenz) auf die virtuelle bitmap gezeichnet. dann kommen dort die objekte (wenn man hat) der map und die spieler drauf. dann wird das ganze was wir auf die map gezeichnet haben an die gleiche position auf die kollisionsmap gezeichnet (mit einer farbe, an der man erkennt, dass man dort nicht vorbeikommt). so, dann dürfte alles vorbereitet sein. nun kann man in jedem frame checken, ob das gewünschte objekt auf der kollisionsmap mit der farbe für undurchdringliches in berührung kommt (kollision) und darauf entsprechend reagieren. wenn nun jemand schießt und das gelände trifft, wird auf dem map image dort wo die explosion ist einfach ein kreis (falls sie kreisförmig ist) gezeichnet. wenn die explosion vorbei ist, bleibt dort ein loch im gelände zurück, welches möglichst so aussieht wie der hintergrund. (in nem spiel, welches von der seite gesehen wird). den gleichen kreis zeichnen wir mit schwarz (oder was ihr als hintergrund
der kollisionsmap gewählt habt) in das image rein, wo wir die kolissionen erkennen.
und das wars auch schon, jetzt haben wir eine welt mit loch drin und dieses loch wird gleichzeitig auch in derkollisionserkennung erkannt (*g*).hier das endergebnis:
mapimage:
http://www.slin-online.de/Tutorials/img/map2.jpgkollissionsimage:
http://www.slin-online.de/Tutorials/img/collisionmap2.jpgso, das war nur eine idee dazu, kann man natürlich auf viele wege machen. nur dieser kommt mir einigermaßen gescheit vor.könnt ihr mir sagen, was ihr davon haltet und ob das ganze überhaupt gescheit anwendbar ist?
danke
mfg
Black Sting
-
Hmm.. Die Collisionsmap-bilder sind beide gleich. Ist das beabsichtigt? Ansonsten find ich das ne gute idee! So ähnlich hab ich mir das auchschon gedacht. Bei worms gibts außerdem noch ränder wo das terrain aufhört (weiß nicht, wie ich das genau sagen soll, schaut euch einfach mal worms an) Vielleicht könntest du dazu auch noch ne anregung geben (ich hab keine ahnung *grinz*)
geloescht
-
hi,
nö, sind nich beide gleich...im einen is ein loch in der landschaft im anderen nich *gg*.
meinst mir den rändern die gestreifen teile um die karte rum, wo man nich drüberschießen/laufen/usw kann?
mfg
Black Sting
-
Sorry, bei mir sind http://www.slin-online.de/Tutorials/img/collisionmap.jpg und http://www.slin-online.de/Tutorials/img/collisionmap2.jpg beide tiefschwarz, und zwar die ganze Fläche... Ich schau später mal mit nem Grafikprogramm nach. (Auf den anderen beiden Bildern kann ich das Loch sehen)
Das mit den Rändern mein ich anders, ist ein bisschen kompliziert. Von Worms kann man leider keine richtigen Screenshots machen (Psycho-Farben), auf nem screenshot könnt ichs zeigen.
geloescht
-
Zu diesem Thema kann ich nur auf mein letztes Spiel verweisen, zu finden hier:
http://games.acont.de/Detailed/34.htmlIch habe keine Extra Kollisionsmap benutzt, sondern einfach die Farbe Schwarz (0x000000) als keine Kollision gewertet, und alle anderen Farben als Kollision.
Falls dann etwas getroffen wurde wird an der Stelle ein anderes Bild im Hintergrund gezeichnet das die Zerstörung darstellt.
-
@geloescht
hm, kann sein. die beiden bilder haben nen schwarzen hintergrund und ein ziemlich dunkles grau im vordergrund....
@0x00000001
dein spiel hab ich schon früher mal gesehen...nur hab ich keine texte im menu dastehen *gg* (vodoo banshee grafikchip)
mfg
Black Sting
-
Ich denke das kann man so machen, solange die Kollisionsmap nicht zu groß wird.
Bye, TGGC (Der Held ist zurück)
-
@Black Sting
Du sagtest[quote]nun kann man in jedem frame checken, ob das gewünschte objekt auf der kollisionsmap mit der farbe für undurchdringliches in berührung kommt (kollision) und darauf entsprechend reagieren[/quote]
Wie geht das?
Also wie kann ich prüfen, ob ein Objekt eine Fläche von bestimmter Farbe berührt?
-
also, bei allegro geht das mit ner funktion getpixel (oder so ähnlich). ansonsten gibt es garantiert in jeder library ne funktion um die farbe eines einzelnen pixels herauszufinden...und das machste halt und schaust dann welche farbe des is...
mfg
Black Sting
-
Man muss ja auch die "virtuelle bitmap" ("collisionsmap") nicht als Bild speichern, sondern einfach als Array. Dann ist man nicht auf die GrafikLib beim Zugriff angewiesen.
Bye, TGGC (Der Held ist zurück)
-
Nachdem ich mit nem Grafikprog den Kontrast und die Helligkeit verändert hab, konnte ich es sehen
geloescht
-
TGGC schrieb:
Man muss ja auch die "virtuelle bitmap" ("collisionsmap") nicht als Bild speichern, sondern einfach als Array. Dann ist man nicht auf die GrafikLib beim Zugriff angewiesen.
Bye, TGGC (Der Held ist zurück)
ja, geht auch. nur wollte ich mit meiner methode die zugriffszeiten verkürzen...ka was schneller geht (bei genauerem überlegen wohl doch das array *gg*)
mfg
Black Sting
-
Also wenn du 'ne Grafk Lib hast, wo du das alles als Offscreen Surface im RAM handeln kannst, ist's letztendlich das gleiche. Kannst dann natürlich deren Kreisfunktionen usw benutzen.
Bye, TGGC (Der Held ist zurück)