Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-04-2008, 19:37   #1 (permalink)
immer gerne hier
 
Registriert seit: Sep 2005
Beiträge: 347
Question attachMovie() - removeMovieClip()

Hallo

Ich habe ein problem:
Ich habe ein Weltraum spiel, für das ich verschiedene Sterne gemacht habe. Diese Sterne fliegen mit unterschiedlicher Geschwindigkeit und werden wenn sie unter den Bildschirmrand kommen sofort gelöscht.
Jetzt lass ich das teil 5 minuten laufen und es ist so langsam dass man sich nicht mehr bewegen kann... Warum? Löscht removeMovieClip nicht aus dem Speicher? Was ist falsch?

Hier noch die funktion, aber die sollte ja nicht viel bringen weil ich alles schon gesagt habe:
Code:
function drawStars() {
	_root.stars.rand = random(1000);
	if (_root.stars.rand>575) {
		_root.stars.star = "star02";
		_root.stars.yspeed = Math.random()*4+2;
	} else if (_root.stars.rand>75) {
		_root.stars.star = "star04";
		_root.stars.yspeed = Math.random()*3+3;
	} else if (_root.stars.rand>10) {
		_root.stars.star = "star05";
		_root.stars.yspeed = Math.random()*2+0.1;
	} else if (_root.stars.rand>5) {
		_root.stars.star = "star01";
		_root.stars.yspeed = Math.random()+1;
	} else {
		_root.stars.star = "star03";
		_root.stars.yspeed = Math.random()+1;
	}
	_root.stars.attachMovie(_root.stars.star, "star"+_root.stars.getNextHighestDepth(), _root.stars.getNextHighestDepth(), {_x:random(550), _y:(random(10)-10), yspeed:(_root.stars.yspeed)});
	for (var forvar:Number = 0; Number(forvar)<_root.stars.getNextHighestDepth(); forvar++) {
		if (typeof (_root.stars["star"+forvar]) == "movieclip") {
			if (_root.stars["star"+forvar]._y>385) {
				removeMovieClip(_root.stars["star"+forvar]);
			} else {
				_root.stars["star"+forvar]._y += _root.stars["star"+forvar].yspeed;
			}
		}
	}
}
Gruss
Kenji


EDIT: Was mir jetzt noch grad aufgefallen ist: es ist nicht klever, die forschleife zu _root.stars.getNextHighestDepth() zu machen, da vielleicht der "star1" grad verschwindet und es das movement somit nur für "star0" wahrnimmt, da _root.stars.getNextHighestDepth() ja 1 ist... naja da arbeite ich noch dran ;-)

EDIT2: Ich bau wohl besser ein _root.stars["star"+forvar].onEnterFrame = function() {...} für die Bewegung ein, dann muss nicht immer eine Forschleife ran...
__________________
Flashforum-Könige: der Frager und hgseib. Ein fettes Lob an die beiden für unendliche Hilfsbereitschaft.
Erfahrung mit: Actionscript 2, 3, PHP, MySQL, HTML, CSS, .htaccess, JavaScript, C++, Pascal
Interese für: Sicherheit, Kryptologie, Performance

Geändert von Kenji (26-04-2008 um 19:43 Uhr)
Kenji ist offline   Mit Zitat antworten
Alt 26-04-2008, 23:59   #2 (permalink)
Euer Nuser
 
Benutzerbild von ~pyropete~
 
Registriert seit: Apr 2004
Ort: Sand-City
Beiträge: 3.483
Wenn Du einen MovieClip removen willst, musst Du ihn erst auf eine Tiefe > 0
setzen, ansonsten schlädt removeMovieClip fehl.

Daher sicher auch das Ruckeln

ActionScript:
  1. deinclip.swapDepths(2000);
  2. removeMovieClip("deinclip");
~pyropete~ ist offline   Mit Zitat antworten
Alt 27-04-2008, 00:04   #3 (permalink)
immer gerne hier
 
Registriert seit: Sep 2005
Beiträge: 347
EDIT: Nein der FPS-Checker zeigt mir immer weniger fps an und alles wird langsam, hat wohl nichts gebracht. Habs mir doch gedacht.

Hmmm, aber get next highest depth ist doch immer positiv...
Und alle movieclips verschwinden auch unter dem bildschirm...
Aber ich probiers mal.
Danke.

Gruss
Kenji
__________________
Flashforum-Könige: der Frager und hgseib. Ein fettes Lob an die beiden für unendliche Hilfsbereitschaft.
Erfahrung mit: Actionscript 2, 3, PHP, MySQL, HTML, CSS, .htaccess, JavaScript, C++, Pascal
Interese für: Sicherheit, Kryptologie, Performance

Geändert von Kenji (27-04-2008 um 00:06 Uhr)
Kenji ist offline   Mit Zitat antworten
Alt 27-04-2008, 00:14   #4 (permalink)
Euer Nuser
 
Benutzerbild von ~pyropete~
 
Registriert seit: Apr 2004
Ort: Sand-City
Beiträge: 3.483
Hm ... wenn die Sterne verschwinden dann werden sie auch korrekt removed.

Normalerweise beginnt getNextHighestDepth() ab -16000 minus ein paar
Hundert. removeMovieClip() kann aber nur erfolgreich auf alle Tiefen > 0
angewendet werden. Aber wurscht ...

Es wäre prinzipiell am besten die Funktion für die Sterne als Intervall aufzurufen.
Jeder attachte Stern kriegt einen onEnterFrame angehängt und verschiebt/überprüft
selbst seine Position auf der Bühne und removed sich dann.

Poste doch mal eine Beispielfla (nur mit Sternen). Dann kann ich das hier
mal angucken
~pyropete~ ist offline   Mit Zitat antworten
Alt 27-04-2008, 10:48   #5 (permalink)
immer gerne hier
 
Registriert seit: Sep 2005
Beiträge: 347
Hallo

Hier ist das ganze .fla. Anhang 51947
Also die millisekunden pro Frame erhöhen sich ständig, wenn sie über 33ms/frame sind wird die FPS kleiner.

Ich würd das nicht in den Stern.onEnterFrame tun, da ich eine "pause" funktion reintun will und ich nicht jeden einzelnen Stern kontrollieren kann wenn er sich selbst bewegt.
__________________
Flashforum-Könige: der Frager und hgseib. Ein fettes Lob an die beiden für unendliche Hilfsbereitschaft.
Erfahrung mit: Actionscript 2, 3, PHP, MySQL, HTML, CSS, .htaccess, JavaScript, C++, Pascal
Interese für: Sicherheit, Kryptologie, Performance

Geändert von Kenji (11-06-2008 um 17:51 Uhr)
Kenji ist offline   Mit Zitat antworten
Alt 27-04-2008, 21:31   #6 (permalink)
immer gerne hier
 
Registriert seit: Sep 2005
Beiträge: 347
Hmmmmm. Im flashforum wirds auch immer ruhiger. Wo bleibt eigentlich "Der Frager"? Er hat mir glaube ich bei jedem Problem eine super Lösung aufgetischt


EDIT: Also DAS ist ja interessant. Wenn ich den attachten stern sofort wieder lösche bleibt die FPS konstant... SEHR interessant.
Ich glaube ich hab den Fehler: getNextHighestDepth() zählt laufend rauf, ich weiss zwar nicht wieso (wenn doch star1 entfernt ist, dann ist ebene 1 wieder frei), aber ich habs, glaube ich.

EDIT2: AHA da haben wirs! getNextHighestDepth() fängt nur wieder bei 1 an wenn kein einziger movieclip mehr in _root.stars ist. Und weil das nie der fall ist, muss die Forschleife immer weiter raufzählen.
__________________
Flashforum-Könige: der Frager und hgseib. Ein fettes Lob an die beiden für unendliche Hilfsbereitschaft.
Erfahrung mit: Actionscript 2, 3, PHP, MySQL, HTML, CSS, .htaccess, JavaScript, C++, Pascal
Interese für: Sicherheit, Kryptologie, Performance

Geändert von Kenji (27-04-2008 um 21:52 Uhr)
Kenji 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 20:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele