Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-04-2009, 14:29   #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
takeshi ist offline   Mit Zitat antworten
Alt 07-04-2009, 14:37   #2 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
servus
was für ne fps ist eingestellt?
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 07-04-2009, 14:46   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 9
Moin,

ich hab einfach mal 48 fps eingestellt, das bricht beim Scrollen dann total ein...
takeshi ist offline   Mit Zitat antworten
Alt 07-04-2009, 15:17   #4 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
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.
Angehängte Dateien
Dateityp: zip img.zip (19,9 KB, 53x aufgerufen)
__________________
we will stop enhancing the truth in 3, 2, ...

Geändert von SpecOps-12 (07-04-2009 um 15:22 Uhr)
SpecOps-12 ist offline   Mit Zitat antworten
Alt 07-04-2009, 16:33   #5 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
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, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 07-04-2009, 17:57   #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.
takeshi ist offline   Mit Zitat antworten
Alt 07-04-2009, 20:57   #7 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
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)
SpecOps-12 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:13 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele