Bilder über XML wird nicht korrekt angezeigt

Gerri84

Mitglied
Hallo Zusammen !

Habe mir ein Panorama Script zusammen gebastelt ohne XML funktioniert das auch ganz schön ! Nur sobald sich das bild nicht mehr in der Bibliothek befindet sondern übers XML gealden wird, wird es nicht mehr korrekt dargestellt und der "Rundumblick funktioniert auch nicht mehr !

PHP:
var xmli = new XML();
      xmli.ignoreWhite = true;

      xmli.onLoad = function(status) {
          if (status && this.loaded) {
				v = Number(this.firstChild.attributes.speed);
				loadMovie(xmli.firstChild.childNodes[0].attributes.pic, bild_mc);
        }

	 }
        //xmli.load(xmlFile);
		xmli.load("img.xml");




function setzePano(obj)
{
    obj.mittelpunkt = 490;
    obj.umkehrPunkt = (obj._width - obj.mittelpunkt * 4) / 2;
    duplicateMovieClip(obj, "bild_copy_mc", 1);
    bild_copy_mc._y = obj._y;
	
    obj.onEnterFrame = function ()
    {
        this._x = this._x + (this.mittelpunkt - this._parent._xmouse) / 50;
        if (this._x < -this.umkehrPunkt)
        {
            this._x = this._x + this._width;
        } // end if
        if (this._x - this._width > -this.umkehrPunkt)
        {
            this._x = this._x - this._width;
        } // end if
        this._parent.bild_copy_mc._x = this._x - this._width;
    };
} // End of the function

fscommand("allowscale", "false");

linie.swapDepths(10);

setzePano(bild_mc);

XML FILE

PHP:
<?xml version="1.0" encoding="iso-8859-1"?>

<Bilder speed="50">
<Bild pic="panorama2.jpg"></Bild>
</Bilder>


Habe einmal einen Screenshot angehängt wie das bild dann bei mir aussieht !

Wenn mir jemamd helfen könnte, wäre sehr nett !

Danke schon mal
 

Anhänge

  • xml.jpg
    xml.jpg
    74,4 KB · Aufrufe: 33
Hi,

Dein Problem wird sein, dass das Laden des Bildes einige Zeit dauert, und die Funktion "setzePano" erst danach aufgerufen werden darf. Probiers mal so:
Code:
var mcl = new MovieClipLoader();

mcl.onLoadInit = function() {
  setzePano(bild_mc);
}

var xmli = new XML();
      xmli.ignoreWhite = true;

      xmli.onLoad = function(status) {
          if (status && this.loaded) {
                v = Number(this.firstChild.attributes.speed);
                mcl.loadClip(xmli.firstChild.childNodes[0].attributes.pic, bild_mc);
        }

     }
        xmli.load("img.xml");




function setzePano(obj)
{
    obj.mittelpunkt = 490;
    obj.umkehrPunkt = (obj._width - obj.mittelpunkt * 4) / 2;
    duplicateMovieClip(obj, "bild_copy_mc", 1);
    bild_copy_mc._y = obj._y;
    
    obj.onEnterFrame = function ()
    {
        this._x = this._x + (this.mittelpunkt - this._parent._xmouse) / 50;
        if (this._x < -this.umkehrPunkt)
        {
            this._x = this._x + this._width;
        } // end if
        if (this._x - this._width > -this.umkehrPunkt)
        {
            this._x = this._x - this._width;
        } // end if
        this._parent.bild_copy_mc._x = this._x - this._width;
    };
} // End of the function

fscommand("allowscale", "false");

linie.swapDepths(10);

Gruß
.
 
danke erst mal !

die bewegung funktioniert jetzt wieder ....

nur habe ich noch zwei probleme:

erstens das bild hat immer noch diesen "gelb stich" und es wird nicht mehr dupliziert und richtig positioniert
 
Hi,

sorry - ich habe erst jetzt in den Code der "setzePano"-Funktion geschaut (die ist von flashstar.de, oder?).

Du kannst einen MC mit einem extern eingeladenen Bild nicht duplizieren - jedenfalls nicht so, dass das Bild dabei mitkopiert wird.

Ab Flash 8 könntest Du einen Snapshot der Grafik mit dem BitmapData-Objekt anfertigen - dies würde allerdings größere Eingriffe in den Code erfordern.

Für den Anfang könntest Du das Bild einfach zweimal einladen: Such mal im Forum mit den Begriffen "Slideshow", "putLeft" oder "Panorama" - zu diesem Thema wurden hier schon mehrere Ansätze gepostet.

Gruß

P.S.: Den Farbstich der Grafik kann ich mir auf Anhieb nicht erklären. Vielleicht lädst Du ein Bild, das mit Deiner Flashversion in diesem Format nicht korrekt eingeladen werden kann. Probier mal, das JPG nicht progressiv zu speichern.

Gruß
.
 
ja von dort hab ich das script !

ahhh ok das erklärt natürlich einiges ;)

danke schön werd mich mal umschaun ob isch was finde

danke mal wieder :)
 
so hab ein bisschen rumprobiert ! habs geschaft das bild zu dynamsich zu laden und zu duplizieren jedoch wenn ichs übers xml file lade funktioniert das ganze nicht ! von dem panorama effekt mal ganz abgesehen ;)

vielleicht könnte mir jemand einen tipp geben !

erstes schlüsselbild !

PHP:
// MovieClipLoader-Ereignis (onLoadComplete)
      var xmli = new XML();
      xmli.ignoreWhite = true;

      xmli.onLoad = function(status) {
          if (status && this.loaded) {
				v = Number(this.firstChild.attributes.speed);
				img = xmli.firstChild.childNodes[0].attributes.pic;

        }

	 }
        //xmli.load(xmlFile);
		xmli.load("img.xml");

trace(img);

function onLoadComplete(){
	play();
}

function bildladen(); {
// Erzeugen der Bild-MovieClip-Instanz
var mc:MovieClip = this.createEmptyMovieClip("mc", 1);

var meinLoader:MovieClipLoader = new MovieClipLoader();
meinLoader.addListener(_root);
meinLoader.loadClip(img, mc);
					
		
stop();
}

/*	
function setzePano(obj)
{
    obj.mittelpunkt = 490;
    obj.umkehrPunkt = (obj._width - obj.mittelpunkt * 4) / 2;
    duplicateMovieClip(obj, "bild_copy_mc", 1);
    bild_copy_mc._y = obj._y;
    
    obj.onEnterFrame = function ()
    {
        this._x = this._x + (this.mittelpunkt - this._parent._xmouse) / 50;
        if (this._x < -this.umkehrPunkt)
        {
            this._x = this._x + this._width;
        } // end if
        if (this._x - this._width > -this.umkehrPunkt)
        {
            this._x = this._x - this._width;
        } // end if
        this._parent.bild_copy_mc._x = this._x - this._width;
    };
} // End of the function

fscommand("allowscale", "false");

linie.swapDepths(10);

setzePano(bild_mc);
*/

zweite schlüsselbild !

PHP:
// Erzeugen der Duplikat-MovieClip-Instanzen
var mc2:MovieClip = this.createEmptyMovieClip("mc2", 2);
mc2._x = mc._width;
mc2._y = 0;

// Erzeugen der BitmapData-Klassen-Instanz
// 100x100 Pixel (Breite x Höhe)
bilddaten = new flash.display.BitmapData(mc._width, mc._height, true, 0);

// Erzeugen der Transformationsmatrix-Instanz
transmatrix = new flash.geom.Matrix();
// Skalierung um 50% (Breite und Höhe)
transmatrix.scale(1, 1);

// Skalierte Duplikate zeichnen
bilddaten.draw(mc, transmatrix, new flash.geom.ColorTransform(), {}, new flash.geom.Rectangle(0, 0, 980, 155), true);
mc2.attachBitmap(bilddaten, 1, "auto", true);

stop();
 
Hi,

so, wie Du das anpackst, wird es wohl nichts. Von der Verwendung zweier Frames auf der Hauptzeitleiste würde ich grundsätzlich abraten. Zudem muss Deine "pano"-Funktion ja das von Dir erstellte Duplikat verwenden, und nicht selbst einen MC duplizieren.

Ich schau mal, ob ich Dir nachher ein Beispiel posten kann.

Gruß
.
 
Das wär natürlich sehr toll.. aber in ertser line gehts mir jetzt nicht um das panorama sondern

erst mal das ich das bild aus dem xml file lade... das wäre dann mein zweiter schritt gewesen das ich versuche die Funktion umzuschreiben !

danke für deine mühe..
 
Hi nochmal,

probier es mal mit diesem Code:
Code:
import flash.display.BitmapData;

var ct = this.createEmptyMovieClip("ct", 1); // Container für das Panorama

ct._visible = false;

var img = ct.createEmptyMovieClip("img", 1); // Container für das zu ladende Bild

var images = new Array(); // Array für die Panorama-Bestandteile

var mcl = new MovieClipLoader();

mcl.onLoadInit = function() {
	buildPano();
}

var xm = new XML();

xm.ignoreWhite = true;

xm.onLoad = function() {
	parse(this.firstChild);
}

xm.load("pano2.xml"); // XML-Datei laden

function parse(obj) {
	speed = parseInt(obj.attributes.speed, 10);
	loadImage(obj.firstChild.attributes.pic);
}

function loadImage(src) {
	mcl.loadClip(src, img);
}

function buildPano() {
	var bmp = new BitmapData(img._width, img._height);
	bmp.draw(img);
	img.removeMovieClip();
	images[0] = ct.createEmptyMovieClip("img1", 1);
	images[1] = ct.createEmptyMovieClip("img1", 2);
	for (var i in images) {
		images[i].attachBitmap(bmp, 1, true, false);
	}
	images[1]._x = images[0]._width;
	ct._visible = true;
	go();
}

function go() {
	this.onEnterFrame = function() {
		for (var i=0; i<images.length; i++) {
			images[i]._x -= Math.round(speed);
		}
		for (var i=0; i<images.length; i++) {
			if (speed > 0 && images[i]._x < -images[i]._width) putRight(i);
			if (speed < 0 && images[i]._x > Stage.width) putLeft(i);
		}
	}
}

function putRight(n) {
	var obj = images[n];
	var prev = (n > 0)? images[n - 1] : images[images.length - 1];
	obj._x = prev._x + prev._width;
}

function putLeft(n) {
	var obj = images[n];
	var prev = (n < images.length - 1)? images[n + 1] : images[0];
	obj._x = prev._x - obj._width;
}

Du kannst hierbei für den Wert "speed" in der XML-Datei auch negative Werte angeben, um die Richtung zu bestimmen.

Gruß
.
 
Danke schön das t ja wunderbar aber das script is noch ein bisschen steil für mich ;)

werd ein bisschen herumprobieren damit ich es noch mit der maus steuern kann....

herzlichen dank für deine bemühungen !
 

Neue Beiträge

Zurück