anfangsgeschwindigkeit ändern | bilderleiste_xt | flash mx 2004

JLN

Grünschnabel
hallo zusammen!

ich habe mir hier ein flash-dokument heruntergeladen - danke datic! - und möchte es gerne an meine bedürfnisse anpassen: die bilderleiste_xt (siehe auch unten).
leider bekomme ich die anfangsgeschwindigkeit aber nicht in den griff. wenn der flash film gestartet wird läuft er mit maximalhgeschwindigkeit, unabhängig ob in einem html-dokument eingebunden oder nur im player geöffnet. wenns es nach mir geht, soll die leiste aber am anfang stehen und erst in bewegung kommen, wenn man mit der maus darüber fährt.

PHP:
var speed = 0;
var maxspeed = 16;
var damper = 8;
var gap = 30;

var leiste = new Array(2);

leiste[0] = container.attachMovie("bilderleiste", "leiste0", 1);
leiste[1] = container.attachMovie("bilderleiste", "leiste1", 2);

leiste[1]._x = leiste[0]._x + leiste[0]._width + gap;

this.onEnterFrame = function() {
	speed =  -(_xmouse - frame._width / 2) / 10;
	if (speed < -maxspeed) speed = -maxspeed;
	if (speed > maxspeed) speed = maxspeed;
	for (var i=0; i<leiste.length; i++) {
		leiste[i]._x += speed;
	}
	for (var i=0; i<leiste.length; i++) {
		if ((leiste[i]._x > frame._width) && speed > 0) moveLeft(i);
		if ((leiste[i]._x < -leiste[i]._width - gap) && speed < 0) moveRight(i);
	}
}

function moveLeft(x) {
	if (x == leiste.length - 1) {
		leiste[x]._x = leiste[0]._x - leiste[x]._width - gap;
	} else {
		leiste[x]._x = leiste[x + 1]._x - leiste[x]._width - gap;
	}
}

function moveRight(x) {
	if (x == 0) {
		leiste[x]._x = leiste[leiste.length - 1]._x + leiste[leiste.length - 1]._width + gap;
	} else {
		leiste[x]._x = leiste[x - 1]._x + leiste[x - 1]._width + gap;
	}
}

ich dachte wenn die variable speed am anfang 0 gesetzt ist sollte das funktionieren. tut es aber leider nicht. wäre toll, wenn mir jemand helfen könnte. ist sicher nicht wild, aber für mich absolutes neuland.

vielen dank!
julian
 

Anhänge

  • 27210attachment.zip
    9,7 KB · Aufrufe: 13
Hi,

Schritt 1: Wandle die Form auf der Ebene "mask" in einen MovieClip um und gib ihm den Instanznamen "mask" (Grund: wir brauchen einen MC, der sich über die gesamte Fläche der Slideshow zieht).

Schritt 2: Ändere die onEnterFrame-Methode folgendermaßen ab (geändert wurden nur die ersten beiden Zeilen):
Code:
this.onEnterFrame = function() {
	var spd = (mask.hitTest(_root._xmouse, _root._ymouse, false))? -(_xmouse - frame._width / 2) / 10 : 0;
	speed += (spd - speed) / 4;
	if (speed < -maxspeed) speed = -maxspeed;
	if (speed > maxspeed) speed = maxspeed;
	for (var i=0; i<leiste.length; i++) {
		leiste[i]._x += speed;
	}
	for (var i=0; i<leiste.length; i++) {
		if ((leiste[i]._x > frame._width) && speed > 0) moveLeft(i);
		if ((leiste[i]._x < -leiste[i]._width - gap) && speed < 0) moveRight(i);
	}
}

Gruß
.
 
hi!

vielen vielen dank!
das bringt mich der sache schon deutlich näher.
es bleiben aber noch ein zwei fragen.

1) jetzt ist die bewegung langsamer. lässt sich das auch einfach so gestalten, dass die leiste sich nach dem start so lange gar nicht bewegt, bis man mit der maus darüber fährt?

2) ich habe die datei auf meine bedürfnisse so angepasst, dass sie 554 px breit und 45 px hoch ist und alle elemente/ebenen auch exakt auf diese größe geändert. in dieser version funktioniert die geschwindigkeitsänderung nicht. woran kann das liegen?

3) ist es kompliziert, zu verhindern, dass die leiste als endlosschleife scrollt? also die bewegung stoppt, wenn das erste bzw. letzte element erreich ist?

liebe grüße,
julian
 

Anhänge

  • 27212attachment.zip
    5,6 KB · Aufrufe: 19
Zuletzt bearbeitet:
ich bin der lösung des problemes mit der endlosschleife schon näher gekommen. der rest soll erstmal egal sein.

wenn ich die beiden funktionen 'moveleft' und 'moveright' vollständig streiche, wird ja nicht nach jedem durchlauf wieder die bilderleiste von vorne gestartet. nur läuft mit so die leiste mit den MCs einfach aus dem bild.
meine frage: in der zweiten for-schleife in der 'onEnterFrame' funktion wird das i je nach bedingung an die moveleft oder moveright funktion übergeben. was müsste ich hier anstelle einfügen, damit die leiste stehen bleibt? oder bin ich total auf dem holzweg?

danke!
julian
 
Zurück