Kreise sollen Insel nicht verlassen (Denkhürde)
Übersicht

![]() |
NexhmijeBetreff: Kreise sollen Insel nicht verlassen (Denkhürde) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Also, ich arbeite gerade an der Umsetzung einer kleinen Spielidee und habe schon sinniges vollbracht. Jetzt stehe ich aber vor folgender Denkhürde: Ich habe einen Haufen Smileys. Diese Smileys werden auf eine Insel gesetzt. Diese Insel ist nicht rund und nicht quadratisch, sondern wie eine richtige Insel mit Buchten, Ecken, Klippen (also jetzt form-mäßig ^^). Es gibt nur festen Boden und das Meer (jeweils durch eine Farbe dargestellt). Beim Starten des Programms werden viele (1500+) Smileys auf diese Insel gesetzt. Damit sie nicht gleich am Anfang im Wasser landen, überprüfe ich beim Erstellen ob der jeweilige Smiley mit dem Meer-Bild kollidiert, wenn ja, wird randomly eine neue Position gesucht. Ich weiß, dass ImagesCollide und der ganze Kram ziemlich langsam ist, aber 15 Sekunden Ladezeit kann ich verkraften. Das Problem: Es ist unverzichtbar, dass die Smiley sich frei bewegen können (so wie es Smiley eben tun! ![]() Und sonst habe ich keine Idee, und die Lösungen bzw. Techniken für eine Lösung rall ich beim besten Willen nicht. Ich hoffe irgendjemand kann mir weiterhelfen, bin für jedes bisschen dankbar ![]() |
||
battlegorge |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du schon einen 2-dimensionalen array als tilemap?
Wenn sich die Smileys kästchenweise bewegen sollen, musst du nur die 8 tiles um den Smiley überprüfen. Wenn sie sich frei bewegen sollen, reicht auch eine Rechteckskollisionsabfrage, is sicher schneller als image_collide. So z.b.: b1 oder b2 steht für hitbox/2, weil die Kollision vom Mittelpunkt aus gerechnet wird. 'collision detection Function f_collision(x1,y1,b1,x2,y2,b2) If y1+b1<y2-b2 Return If y1-b1>y2+b2 Return If x1+b1<x2-b2 Return If x1-b1>x2+b2 Return Return 1 End Function |
||
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Zahlen, die du nennst, sind kaum glaubhaft. ![]() 15 Sekunden Ladezeit?! Das kann man wohl nicht mehr "Ruckeln" nennen. 2000 Smileys?! Selbst wenn dein Smiley nur 20 mal 20 Pixel groß wäre, würden 2000 von ihnen nebeneinander 800000 Pixel bedecken, was einer Fläche von 1000 mal 800 Pixeln entspricht, also im Grunde fast einem kompletten Bildschirm und so groß wird deine Insel ja nicht sein. Ich denke, dass da eine Vielzahl von Smileys aufeinanderkleben, ohne dass du es siehst bzw. ohne dass das viel Sinn hätte. Bezüglich der Randprobleme hier eine Idee: Man könnte eventuell für deine Insel eine Art approximierte "Schablone" entwerfen, etwa so: ______XXX___XX______ ___XXXXXXXXXXXX___ _XXXXXXXXXXXXXXXX XXXXXXXXXXXX______ ____XXXXXXXXXX____ _______XXXXXX______ Wobei X für eine (je nach Feinheit der Buchten etc.) feste Flächengröße steht. Zu vergleichen wären dann lediglich, ob die Position eines Smileys mit einem X-Eintrag dieser zweidimensionalen Matrix übereinstimmt. Nicht schlecht wäre es auch, zwecks Abwechslung die Inselform beim Programmstart variabel zu halten, d.h. nicht von einem festen Bild auszugehen, sondern umgekehrt die Insel aus einer zufälligen Schablone heraus durch kleine Einzelbilder zusammenzubauen. Nur so als Anregung... |
||
![]() |
Nexhmije |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Die Zahlen, die du nennst, sind kaum glaubhaft.
Sagt der der weder Spiel noch Code bisher gesehen hast. Sorry. ^^ Zitat: 15 Sekunden Ladezeit?! Das kann man wohl nicht mehr "Ruckeln" nennen.
Was ist das Problem mit 15 Sekunden Ladezeit? Du hast sicher schon mehrere Spiele gespielt, in denen man länger warten musste, bevor man spielen konnte ![]() Zitat: 2000 Smileys?! Selbst wenn dein Smiley nur 20 mal 20 Pixel groß wäre, würden 2000 von ihnen nebeneinander 800000 Pixel bedecken, was einer Fläche von 1000 mal 800 Pixeln entspricht, also im Grunde fast einem kompletten Bildschirm und so groß wird deine Insel ja nicht sein.
Die Insel(n) sind zusammen wesentlich grösser als ein gesamter Bildschirm. Man kann ja immerhin umherscrollen <: Zitat: Ich denke, dass da eine Vielzahl von Smileys aufeinanderkleben, ohne dass du es siehst bzw. ohne dass das viel Sinn hätte.
Dass Smileys sich mal pixelgenau überschneiden kommt nicht permanent, aber auch nicht selten vor. Trotzdem ist diese Situation wesentlich für die Spielidee. Eure Anregungen sind sehr nützlich. Ich werd' jetzt mal versuchen, eine Kombination aus euren beiden Ideen zu realisieren, ich hoffe es klappt ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das einfachste ist garnet alle smileys zu bewegen sondern nur die die man sieht und potentiell demnächst sieht. vom rest bekommt man eh nix mit also braucht man es auch net zu ändern. Das kostet nur unsinnig performance
kollision mit dem wasser zu checken wird relativ unmöglich sein vor allem mit deinem ansatz. Da musst du dir schon ein TileSystem schreiben damit du nur die umliegenden tiles prüfen musst, sonst is da nix zu holen. (egal ob sich deine figuren frei oder nur in tiles bewegen können) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
F |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde den Mittelpunkt der Insel herausfinden. Danach schau ich bei welchem Winkel welche Entfenung zum Inselrand besteht. Man Muss dann nur abfragen ob beim jeweiligen Winkel die Entfernung nicht überschritten wird. Die Insel muss dafür aber keine Seitlichen einbuchtungen vorweisen.
Es währe natürlich auch möglich die Umrisse der Insel per Linien festzulegen und dann abzufragen ob der Kreis (Smileys sind Rund) mit den Linien Kollidiert. ![]() |
||
Signatur? Noch nie Gehört... |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde ein array erstellen mit der größe (inselx/50,insely/50) und da ein true reinpacken wenn der abschnitt nur land enthält oder ein false wenn auch wasser da ist. nur wenn false ist musst du dann imagecollide machen | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
F |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oder gleich 3 States : Nur Wasser,Wasser und Land, Nur Land ![]() |
||
Signatur? Noch nie Gehört... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group