Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-01-2005, 16:56   #1 (permalink)
Neuer User
 
Benutzerbild von Sanjarok
 
Registriert seit: Aug 2003
Beiträge: 62
Jump 'n Run wird von Level zu Level langsamer

Hallo,

die Überschrift sagt schon alles- ich bin gerade darüber, ein Jump 'n Run-Spiel zu programmieren, und je höher das Level ist, desto grösser ist die Prozessorlast. Das Spiel scheint immer mehr Abfragen zu machen.
Die Level liegen in einem Film, der auf der Bühne liegt, hintereinander- d.h. wenn ein Level vorbei ist, springt der Film an eine spätere Stelle, z.B. von "Level1" zu "Level2".

Nachdem ich zwei Ebenen gelöscht hatte, auf denen der Grossteil aller Hittest-Abfragen liegen, funktionierte das Spiel wieder schneller.

Allerdings verstehe ich nicht, warum- hat Flash keinen Garbage Collector, der die Instanzen einer Ebene löscht, wenn der Film an eine Stelle springt, wo die Instanzen der älteren Level nicht mehr gültig sind? Muss ich nun alles per attachMovie und RemocveMovieClip regeln, das würde ich gerne vermeiden.

Vielen Dank!
Liebe Grüße,
Mira
Sanjarok ist offline   Mit Zitat antworten
Alt 23-01-2005, 17:22   #2 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Hallo,

imho werden die Instanzen auch entladen, wenn Du sie von der Bühne entfernst.
Du darfst sie nur nicht unsichtbar machen oder neben der Bühne weiterlaufen lassen.
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 23-01-2005, 18:05   #3 (permalink)
Neuer User
 
Benutzerbild von Sanjarok
 
Registriert seit: Aug 2003
Beiträge: 62
Zitat:
Zitat von Billi_I
Hallo,

imho werden die Instanzen auch entladen, wenn Du sie von der Bühne entfernst.
Du darfst sie nur nicht unsichtbar machen oder neben der Bühne weiterlaufen lassen.
ja, ich habe z.B. das Gold, das das Männchen auf seinem Weg einsammelt, einfach dadurch entfernt, dass ich den _x-Wert der Goldstücke einfach auf -5000 gesetzt habe, wenn das Männchen sie berührt.
Daran kann es allerdings nicht liegen, denn ich habe es jetzt so umgeändert, dass der x-Wert bei 50 liegt, sprich noch auf der Bühne ist- und trotzdem ist der Fehler noch da.
Sanjarok ist offline   Mit Zitat antworten
Alt 23-01-2005, 19:20   #4 (permalink)
Flash-holic
 
Benutzerbild von DeMoehn
 
Registriert seit: Nov 2003
Ort: Neunkirchen(Saar)
Beiträge: 988
Naja, zumindest sind dann trozdem noch die goldstücke auf der Bühne -5000 oder 50 is doch wurscht. Intervalle am laufen? Kanns sein das du imemr neue intervalle startest oder so?
__________________
Wer Großes versucht, ist bewunderswert, auch wenn er fällt.
Lucius Annaeus Seneca
(ca. 4 v. Chr - 65 n. Chr.)


DeMoehn ist offline   Mit Zitat antworten
Alt 23-01-2005, 23:12   #5 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Genau das meinte ich. Es nützt dem Speicher nichts, wenn Du die Clips nur in den unsichtbaren Bereich verschiebst.
Also entweder der Clip ist nicht mehr auf der Zeitleiste wenn er nicht gebraucht wird oder Du must dynamisch laden/entladen.
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 24-01-2005, 10:33   #6 (permalink)
Neuer User
 
Benutzerbild von Sanjarok
 
Registriert seit: Aug 2003
Beiträge: 62
Nein, Intervalle starte ich nicht, falls es um die Funktionen setIntervall und ClearIntervall geht.

Die Clips eines Levels sind im nächsten Level nicht mehr auf der Zeitleiste, weil entsprechende Keyframes gesetzt sind (sorry, ich habe die letzte Frage falsch verstanden, um zu viele Ecken gedacht..).

Ein Beispiel für eine Sache, die das Spiel langsamer macht, ist folgende: es gibt in jedem Level die Instanzen r1, r2 und r3. Wenn das Männchen an eines stösst, wird die Instanz auf X: -5000 verschoben.
Da diese Instanz im nächsten Level allerdings nicht mehr gültig ist (es gibt wieder Instanzen namens r1, r2 und r3, auch auf der gleichen Ebene, aber das sind neue), frage ich mich, warum das Spiel trotzdem mit der Zeit langsamer wird.
Sanjarok ist offline   Mit Zitat antworten
Alt 24-01-2005, 19:54   #7 (permalink)
Flash-holic
 
Benutzerbild von DeMoehn
 
Registriert seit: Nov 2003
Ort: Neunkirchen(Saar)
Beiträge: 988
Tja, das hatte ich auch ma in nem Spiel, -1000 oder so .
Is villeicht nich ganz geschickt, aber stört jetzt vllt auch nich.
Hmmmm, was kanns denn sein?
Kannste villeicht ein klein bisserl Code posten, bei dem du denkst es könnte was sein?
__________________
Wer Großes versucht, ist bewunderswert, auch wenn er fällt.
Lucius Annaeus Seneca
(ca. 4 v. Chr - 65 n. Chr.)


DeMoehn ist offline   Mit Zitat antworten
Alt 24-01-2005, 21:54   #8 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Leider bist Du einem Irrtum aufgesessen, wenn Du meinst, dass Deine neuen Instanzen die Alten ersetzen.
Hab mal ein Experiment angefügt. Lass es im Testmodus laufen und lass Dir am Ende die Objekte auflisten.
Es sind 2!. Eins auf der Bühne und eins im Abseits. Beide heißen "r1". Die Instanz wird also nicht "ungültig", nur weil Du den Namen recyclest.

Dagegen kannst Du die ganze Instanz recyclen. Wenn z.B. ein Objekt irgendwo aus dem Bild rausfliegt, kannst Du es umpositionieren, so das es woanders wieder reinkommt.
Die Hauptsache ist, die Dinger werden nicht immer mehr.
Angehängte Dateien
Dateityp: zip test.zip (4,2 KB, 12x aufgerufen)
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 25-01-2005, 12:13   #9 (permalink)
Flash-holic
 
Benutzerbild von DeMoehn
 
Registriert seit: Nov 2003
Ort: Neunkirchen(Saar)
Beiträge: 988
Das problem ist bei ihm wohl ganz einfach das er die Levels statisch macht, also auch die Objekte statisch positioniert, deswegen kann er die objekte auch nicht wieder verwenden, sonst wäre ein removeMovieClip ja das einfachste, aber ohne attacheMovie gehts eben nich
__________________
Wer Großes versucht, ist bewunderswert, auch wenn er fällt.
Lucius Annaeus Seneca
(ca. 4 v. Chr - 65 n. Chr.)


DeMoehn ist offline   Mit Zitat antworten
Alt 25-01-2005, 21:57   #10 (permalink)
Neuer User
 
Benutzerbild von Sanjarok
 
Registriert seit: Aug 2003
Beiträge: 62
Mein Mitprogrammierer und ich haben inzwischen einiges ausprobiert. Erst, nachdem wir einen Teil der Objekte dynamisch geladen und wieder -entladen haben, geht es inzwischen wenigstens etwas schneller- also wirds wohl mit attachMovie/removeMovieClip laufen.
Wir vermuten, es handelt sich entweder um einen Flash-Bug, bei dem der Garbage-Collector nicht richtig arbeitet (wobei das immer eine starke Behauptung ist..). Oder es liegt daran, dass wir das Spiel an sich in einer bestimmten Instanz drinnen haben, die wir allerdings von aussen steuern- d.h., könnte es sein, dass wenn man von Punkt A nach Punkt B in einem Movieclip springt, diesen Sprung aber von aussen steuert- dass dann die Instanzen von A nicht aufräumt werden, obwohl sie bei Punkt B nicht mehr gültig sind?

@Billi_I: Vielen Dank für die Datei! Ich habe sie so umgeändert, wie es in meinem Spiel ist, und angehängt- die Instanzen sind tatsächlich nicht nebeneinander gültig. Die Testdatei hat mich jedenfalls weitergebracht.
Angehängte Dateien
Dateityp: zip test.zip (5,0 KB, 13x aufgerufen)
Sanjarok 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 17:35 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele