| |||||||
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) |
| ° Registriert seit: Aug 2002 Ort: Baden-Baden
Beiträge: 3.962
| Bitmap, BitmapData, onEnterFrame und der Speicher
Hi, ich habe ein kleines Script gemacht, dass die Spuren von ein paar Vektor Sprites auf der Bühne verfolgt. Bei jeder Iteration wird die stage abfotografiert und das Foto wieder in den Hintergrund gelegt. Dadurch ergeben sich Bewegungspfade der Sprites. Mein Problem ist jetzt, dass die Speicherauslastung zu rucklern führt, aber nicht, weil der Speicher irgendwann dicht ist, sondern weil er dicht gemacht wird, sich dann aber wieder entleert. Dieses entleeren sorgt für die Ruckler. Für mich sieht das nach einem Problem der System.gc() aus. Ich versteh allerdings auch nicht, wie das sein kann. Ich überschreib doch das Bitmap immer wieder? Script sieht so aus: Code: private function drawer (ev:Event = null):void {
var bmpneu : BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x00555555);
bmpneu.draw(stage);
var bneu:Bitmap = new Bitmap(bmpneu);
var tempSprite : Sprite = new Sprite();
tempSprite.addChild(bneu);
_mySprite.addChild(tempSprite);
if (iterationvar > 0) {
var ref:Sprite = _mySprite.getChildAt(0) as Sprite;
_mySprite.removeChildAt(0);
ref = null;
System.gc();
}else {
iterationvar++;
}
} Danke echo |
| | |
| | #2 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Find die ganze Konstruktion etwas seltsam. Jedes mal neue Instanzen zu erzeugen und dan per getChildAt(0) zu entfernen ist jedenfalls nicht wirklich ressourcenschonend. Wieso benutzt Du nicht einfach nur 1 BitmapData, dass Du bei Event.ENTER_FRAME einfach leerst und dann die Bühne hineinzeichnest? Die ganze Instanzen-Erzeuger- und Austauscherei wird damit überflüssig!
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #4 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Das kann so leider nicht funktionieren, weil draw keinen Rückgabewert hat. Versuch's mal so: PHP-Code:
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #5 (permalink) |
| in the boondocks Registriert seit: Feb 2006 Ort: Augsburg
Beiträge: 3.496
|
hi, martins code funktioniert so tadellos. nur ein kleiner nachtrag zum verständnis: der speicher läuft dir voll, weil bitmapdata nicht wie instanzen anderer klassen einfach in der gc landen. die müssen von hand mit dispose() zuvor entleert werden. mfg sx |
| | |
| | #6 (permalink) | |
| ° Registriert seit: Aug 2002 Ort: Baden-Baden
Beiträge: 3.962
|
jungs, ihr seid klasse! das mit dem dispose muss man auch erstmal wissen. der code funktionert, ich hab nur das fillRect rausgenommen, weil sonst das bmp jedesmal zurück setzt. nur zum abschließenden verständnis: was macht das IBitmapDrawable jetzt genau? Die Lifedocs geben mir dazu nur das hier aus Zitat:
danke echo | |
| | |
| | #7 (permalink) | |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.868
| Zitat:
die IBitmapDrawable-Schnittstelle ist keine Schnittstelle in der eigentlichen Bedeutung, sondern sowas wie ein Marker, um die Parameter Typsicher zu machen. IBitmapDrawable beinhaltet alle DisplayObjekte und BitmapData. Das Interface wird verwendet um BitmapData und DisplayObject in einer gemeinsamen Gruppe zusammenfassen zu können. noch ne kleine Rechnung, um dir zu zeigen, wieso dir dein Speicher vollgelaufen ist: speicherVerbrauch für ein BitmapData-Objekt speicherVerbrauch = (bmd.width*bmd.height)pixel *32Bit/pixel * 1Byte/8Bit bei 640*480 Pixel sind das 1228800 Byte oder 1,17MB (pro BitmapData) und wenn du das 25x pro Sekunde machst, kommst du auf ~30MB/Sekunde die du erzeugst, und die die GC wieder fortschaffen muss. | |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| bitmap aus library laden & bitmapdata | dabinjo | ActionScript 3 | 4 | 11-03-2009 16:25 |
| bitmapdata speicher problem | kakktus | ActionScript 3 | 3 | 25-02-2009 14:43 |
| new BitmapData(...) macht Speicher voll? | Perpetuum | ActionScript 3 | 4 | 10-12-2008 00:14 |
| BitmapData -> Bitmap Font Table... | Zett | Flash 8 | 1 | 17-12-2006 17:44 |
| externes Bitmap in BitmapData laden | jmora | Flash 8 | 5 | 06-05-2006 16:36 |