2009-07-20 5 views
0

Ich erstelle ein Weltraumspiel in ActionScript/Flex 3 (Flash). Die Welt ist unendlich groß, weil es keine Karten gibt. Damit dies funktioniert, muss ich den Hintergrund dynamisch (programmatisch) rendern, der wie offener Raum aussehen muss.Howto dynamisch Raumhintergrund in actionscript3 rendern?

Um die Welt wahr werden zu lassen und bestimmte Orte anders aussehen zu lassen als andere, muss ich in der Lage sein, Filter wie Farbunterschiede und vielleicht sogar eine neblige Art von Transformation hinzuzufügen - diese würden dann zufällig hinzugefügt und geändert werden.

Der Spieler kann die "Karte" scrollen, indem er zu den Seiten des Bildschirms fliegt, so dass ein bestimmter Teil der Welt nur auf einmal sichtbar ist, aber der Spieler kann überall hingehen. Das Scrollen funktioniert, indem alle Objekte mit Ausnahme des Spielers in die entgegengesetzte Richtung bewegt werden, so dass es so aussieht, als wäre es der Spieler, der sich in diese Richtung bewegt hat. Der Hintergrund muss ebenfalls verschoben werden, muss jedoch auf dem neu entdeckten Gelände anders sein (dynamisch erstellt).

Nun ist meine Frage, wie ich so etwas machen würde, welche Art von Dingen brauche ich und wie implementiere ich sie? Leistung muss auch berücksichtigt werden, da viele weitere Objekte im Spiel sein werden.

Antwort

1

Sie sollten nur Ansichten für Objekte im sichtbaren Bereich haben. Vielleicht möchten Sie dafür einen quad tree verwenden.

Der Hintergrund sollte vielleicht aus einer Reihe von Kacheln bestehen, die Sie mehr oder weniger zufällig wiederholen können (brauchen Sie wirklich einen Hintergrund? Würden einige Partikel nicht ausreichen?). Verwenden Sie die gleiche Technik, die Sie für die Objekte verwenden.

Am Ende haben Sie also ein Modell für Objekte und Kacheln oder Partikel (die Sie am Anfang erzeugen würden). Auf diese Weise werden Sie nur ein paar Floats hinzufügen (Sie können zusätzliche Leistung erzielen, wenn Sie keine Positionen von Objekten berechnen, die weit entfernt sind. Der Quad-Tree sollte Ihnen dabei helfen, aber ich denke, das sollte nicht notwendig sein) Wenn ein Objekt mit einer Ansicht die Bühne verlässt, geben Sie die Ansicht frei und überprüfen Sie anhand des Quadbaums, ob neue Objekte angezeigt werden.

Wenn Sie eine Menge von Objekten/Partikel zu verwenden, sollten Sie eine object pool verwenden. Wenn sich Objekte nur bewegen und nicht gedreht/skaliert werden, sollten Sie die Verwendung von DisplayObject::cacheAsBitmap in Erwägung ziehen.

+0

Danke nochmal. Ich verwende Techniken, um nur Objekte in der Nähe zu laden, und Objekte, die den sichtbaren Bereich verlassen, werden ebenfalls gelöscht. Könnten Sie bitte erklären, wie man einen solchen dynamischen Hintergrund erzeugt? – Tom

+0

Ich meine etwas wie http://flashden.net/item/dust-particles-effect-background-animation/30399 - nur dass der Hintergrund sich nicht bewegen sollte, wenn der Spieler still steht. – Tom