| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Apr 2009
Beiträge: 9
| Darstellen einer großen Karte und verschieben dieser -> Performance
Hallo, ich programmiere im Moment ein Adventurespiel in dem der Protagonist via Maus oder Tastatur über eine 3072 mal 2304 Pixel große Map gesteuert wird. Von dieser Map sind immer 1024 mal 768 Pixel sichtbar. Sobald sich der Spieler in den Rand des sichtbaren Bereiches bewegt beginnt die Karte zu scrollen. Die Karte ist folgendermaßen in einem Container aufgebaut: - Grafik der Karte - Der Spieler - "Überlappungsgrafik" damit der Spieler perspektivisch hinter Häusern hergehen kann - Eine Kollisionmap Nun habe ich verschiedene Dinge ausprobiert um das Scrollen der Karte perfomant zu gestalten: - Zunächst habe ich einfach den 3072 x 2304 Pixel großen Container komplett mit der Tweeningklasse verschieben lassen, das hat erwartungsgemäß ziemlich geruckelt - Dann habe ich mit den cacheAsBitmap Eigenschaften gespielt, da die Karten aber bereits Bitmaps sind, hat das nichts gebracht. -Schließlich habe ich die Karte in 9 Teile aufgeteilt und lasse nun immer nur die maximal 4 Teile welche gleichzeitig auf dem Bildschirm sein können anzeigen. Das hat aber leider überhaupt nichts gebracht. Hat jemand einen Ansatz wie das ganze performanter zu gestalten wäre? Danke und Grüße Fabian |
| | |
| | #4 (permalink) |
| ChronoGuard Registriert seit: Mar 2002 Ort: Saarbrücken
Beiträge: 2.649
|
Sowas kannst du mit AS3 sehr zügig machen, wenn du nur den benötigten Ausschnitt der Karte renderst und überhaupt nichts bewegst (Außer die Koordinaten des zu rendernden Ausschnitts). Beispiel im Anhang. Bei mir läufts mit 41/41 fps bei ner Karte mit 2500x2500px. (Is jetzt nur schnell zusammengeschrieben, das kann man auch schöner machen). Ist allerdings etwas schwieriger, wenn du die maximale Größe eines BitmapData-Objekt sprengst.
__________________ we will stop enhancing the truth in 3, 2, ... Geändert von SpecOps-12 (07-04-2009 um 15:22 Uhr) |
| | |
| | #5 (permalink) |
| ChronoGuard Registriert seit: Mar 2002 Ort: Saarbrücken
Beiträge: 2.649
|
Hab grad erst mal die Anforderungen gesehn. 1024 x 768 ist natürlich schon deftig. In der geforderten Auflösung komm ich immerhin noch auf ca 50 fps im Browser. Bei nem "Durchschnittsnutzer" dürft es ne Ecke weniger sein.
__________________ we will stop enhancing the truth in 3, 2, ... |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Apr 2009
Beiträge: 9
|
Danke für die Anregung und das Beispielprogramm. Das mit der grösseren Auflösung ist nicht das Problem das läuft mit der Technik aus deinem Programm auf meinem Zielsystem absolut flüssig. Das Problem, dass ich jetzt habe ist allerdings, dass sich ja Dinge im zu scrollenden Bereich verändern. Das heißt der Spieler läuft über die Map, NPCs bewegen sich etc... Das heißt wenn ich das richtig verstehe müsste ich jetzt jeden Frame die Karte mit den Inhalten drauf neu zeichnen lassen mittels draw(). Das ist aber leider auch ziemlich langsam. |
| | |
| | #7 (permalink) |
| ChronoGuard Registriert seit: Mar 2002 Ort: Saarbrücken
Beiträge: 2.649
|
Nein, das draw wird nur einmal zu Beginn ausgeführt. Dann verschiebst du einfach nur die x- und y-Eigenschaft des Rectangle-Objects und führst anschließend die render-Methode aus (Was in meinem Beispiel beides von der TweenLite-Klasse übernommen wird). Das wars schon. btw. das draw brauchst du überhaupt nicht, wenn du schon ein BitmapData in der Library liegen hast. Das hab ich doch nur drin, um ein BitmapData zu haben, weil ich aus nem kleinen Bild ein großes zeichne.
__________________ we will stop enhancing the truth in 3, 2, ... Geändert von SpecOps-12 (08-04-2009 um 08:35 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |