Hallo, liebe Gemeinde!
Habe folgendes Problem: Ich habe eine dynamische Bildergalerie gebastelt (aus diversen Scripts zusammengestückelt und verändert).
Wie gesagt, werden dynamisch Bilder geladen (als Button) und beim Klick darauf werden Sie in einen MC in der Mitte der Galerie geladen.
Funktioniert ganz gut, aber leider kriege ich den MC nicht mehr entladen, d. h. er "stapelt" einfach alle Bilder übereinander und wird dadurch mit jedem Bild langsamer.
Habe eine Smooth-Funktion für die Bilder, die diese in den MC lädt. Setze ich jetzt davor die unloadMovie-Funktion, funktioniert das reinladen per Smooth-Funktion nicht mehr. Mit ohne Smooth-Funktion, also ganz normal mit loadMovie geht es.
Wo steckt der Fehler?
Habe mal das AS hier angehangen (ist etwas chaotisch), ganz unten ist die entsprechende Stelle:
PHP-Code:
import flash.display.*;
function loadBitmapSmoothed(url:String, target:MovieClip) {
// Create a movie clip which will contain our
// unsmoothed bitmap
var bmc:MovieClip = target.createEmptyMovieClip(
"bmc",
target.getNextHighestDepth());
// Create a listener which will notify us when
// the bitmap loaded successfully
var listener:Object = new Object();
// Track the target
listener.tmc = target;
// If the bitmap loaded successfully we redraw the
// movie into a BitmapData object and then attach
// that BitmapData to the target movie clip with
// the smoothing flag turned on.
listener.onLoadInit = function(mc:MovieClip) {
mc._visible = false;
var bitmap:BitmapData = new BitmapData(
mc._width,
mc._height,
true);
this.tmc.attachBitmap(
bitmap,
this.tmc.getNextHighestDepth(),
"auto",
true);
bitmap.draw(mc);
};
// Do it, load the bitmap now
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(listener);
loader.loadClip(url, bmc);
}
///Haupt-MC erstellen:
this.createEmptyMovieClip("container_big", getNextHighestDepth());
container_big._x = Stage.width / 2 - container_big._width / 2;
container_big._y = Stage.height / 2 - container_big._height / 2;
container_big._alpha = 100;
///Schatten für Haupt-MC (Abstand, Winkel, Farbe, Intensität, Weichzeichner x, Weichzeichner y, Übergriff, Aussparung)
import flash.filters.DropShadowFilter;
var dropShadow:DropShadowFilter = new DropShadowFilter(0, 45, 0x000000, 0.3, 20, 20, 2, 3);
container_big.filters = [dropShadow];
///Platzhalter (container_big_innen) im Haupt-MC erstellen
container_big.createEmptyMovieClip("container_big_innen", getNextHighestDepth());
container_big.onEnterFrame = function() {
if (this.container_big_innen._height) {
delete this.onEnterFrame;
this._x = (1600-Stage.width)/2+(Stage.width-this.container_big_innen._width)/2;
this._y = (1000-Stage.height)/2+(Stage.height-this.container_big_innen._height)/2-64;
}
};
/////Smooth Funktion Teil 1 ---------------------------------------
MovieClip.prototype.smoothContent = function ():Void {
var m:MovieClip = this;
var name:String = m._name;
var depth:Number = m.getDepth();
var parent:MovieClip = m._parent;
var b:flash.display.BitmapData = new flash.display.BitmapData(m._width,m._height);
b.draw(m);
m = parent.createEmptyMovieClip(name,depth);
m.attachBitmap(b,0,"manual",true);
}
////////////--------------------------------------------------------
var that = this;
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
target_mc._x = (0 - target_mc._width) / 2;
target_mc._y = (0 - target_mc._height) / 2;
};
var image_mcl:MovieClipLoader = new MovieClipLoader();
/// Smooth Funktion Teil 2-------------------------------
var o:Object = new Object();
image_mcl.addListener(o);
o.onLoadInit = function (target:MovieClip) {
target.smoothContent();
target._width*=0.28;
target._height*=0.28;
}
///---------------------------------------------------------------
/// Laden des ersten Bildes der Galerie: -----------------------------------
image_mcl.addListener(mclListener);
_root.container_1.createEmptyMovieClip("platzhalter", 1);
image_mcl.loadClip("gallery/1.jpg", container_1.platzhalter);
loadBitmapSmoothed("gallery/1.jpg", container_big.container_big_innen);
/// Buttonfunktion für erstes Bild der Galerie
_root.container_1.onRelease = function()
{
///Geglättetes Bild in den Haupt-MC laden:
loadBitmapSmoothed("gallery/1.jpg", container_big.container_big_innen);
container_big.onEnterFrame = function() {
if (this.container_big_innen._height) {
delete this.onEnterFrame;
this._x = (1600-Stage.width)/2+(Stage.width-this.container_big_innen._width)/2;
this._y = (1000-Stage.height)/2+(Stage.height-this.container_big_innen._height)/2-64;
}
};
};
/// Laden + Buttonfunktion der restlichen Bilder
var bilder_array:Array = new Array(33);
var aktuelles_bild:Number = 0;
aktuelles_bild ++;
Laden();
function Laden() {
if(aktuelles_bild < bilder_array.length){
var nummer = bilder_array.length - bilder_array.length + aktuelles_bild +1;
_root["container_"+nummer].createEmptyMovieClip("platzhalter", 1);
image_mcl.loadClip("gallery/"+nummer+".jpg", "_root."+["container_"+nummer+".platzhalter"]);
_root["container_"+nummer].onRelease = function()
{
/// Geglättetes Bild laden:
Hier versuche ich unloadMovie:
container_big.container_big_innen.unloadMovie();
//Mit loadmovie würde es gut funktionieren, aber leider sind dann die Bilder nicht geglättet:
//loadMovie("gallery/"+nummer+".jpg", container_big.container_big_innen);
//Leider funktioniert das ganze nach dem unloadMovie nicht mehr mit der Smooth-Funktion: [/SIZE]
loadBitmapSmoothed("gallery/"+nummer+".jpg", container_big.container_big_innen);
};
aktuelles_bild ++;
Laden();
}
else{
}
}