Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-09-2011, 00:08   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2011
Beiträge: 4
Bildergalerie

Hallo Alle zusammen,

ich komme irgendwie nicht weiter und hoffe, jemand von euch könnte mir helfen.

Es geht hier um eine vertikale Bildergalerie. Bilder (ca. 10 Bilder) werden per XML in einen einzigen MC geladen und dann per Tween animiert. Das klappt sehr gut. Der Slider läuft automatisch durch, wenn alle Bilder geladen worden sind.

Dann gibt es zwei Events:
MouseEvent.MOUSE_OVER -> hier wird das Scrollen angehalten.
MouseEvent.MOUSE_OUT -> hier wird das Tween fortgesetzt.
Positioniert man die Maus auf ein Bild, wird die Animation angehalten.
Das klappt auch. Es gibt auch zwei Schaltflächen zum manuellen Scrollen nach links und nach rechts.

Hier taucht das Problem auf. Wenn ich eine der zwei (rechts oder links) Schaltflächen betätige und per MOUSE_OVER dann ein Bild anhalten möchte, klappt irgendwie nicht. Da wird das MouseEvent nicht ausgelöst und der Slider läuft weiter durch.



Hier ist der Code: Er sieht ein bißchen durcheinander aus, weil ich einiges probiert habe.
PHP-Code:
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;


var 
myTween = new Tween(alles"x",  None.easeIn100,-4530100true);
myTween.addEventListener(TweenEvent.MOTION_FINISHonFinish);

//////////////////////////////////////// MC alles ist der Container, in dem alle Bilder geladen werden.
alles.addEventListener(MouseEvent.MOUSE_OVER,rollout); 
alles.addEventListener(MouseEvent.MOUSE_OUT,weiter); 

///////// rechts und links -> Manuelles Scrollen nach rechts und nach links
rechts.addEventListener(MouseEvent.CLICKforward);
links.addEventListener(MouseEvent.CLICKback);

function 
forward(evt:MouseEvent) { 
 
alles.removeEventListener(MouseEvent.MOUSE_OVER,rollout); 
alles.removeEventListener(MouseEvent.MOUSE_OUT,weiter); 
var 
sekunden:Number alles.45;
sekunden = - sekunden

 
var myTween = new Tween(alles"x",  None.easeInalles.x,100sekundentrue);

myTween.addEventListener(TweenEvent.MOTION_FINISHonFinish);
//alles.addEventListener(MouseEvent.MOUSE_OVER,rollout); 
//alles.addEventListener(MouseEvent.MOUSE_OUT,weiter);

}
/////////////////////////////////////////////////////////



function back(evt:MouseEvent) { 
alles.removeEventListener(MouseEvent.MOUSE_OVER,rollout); 
alles.removeEventListener(MouseEvent.MOUSE_OUT,weiter);
var 
diff:Number = -4530 alles.x;
trace (diff);
var 
sekunden:Number diff 45;
sekunden = - sekunden

 
var myTween = new Tween(alles"x",  None.easeInalles.x,-4530sekundentrue);
myTween.addEventListener(TweenEvent.MOTION_FINISHonFinish);


}

/////////////////////////////////////////////////////////////////////////////



function onFinish(e:TweenEvent):void {
alles.removeEventListener(MouseEvent.MOUSE_OVER,rollout); 
alles.removeEventListener(MouseEvent.MOUSE_OUT,weiter);
myTween.start();

alles.addEventListener(MouseEvent.MOUSE_OVER,rollout); 
alles.addEventListener(MouseEvent.MOUSE_OUT,weiter);
}


function 
rollout(evt:MouseEvent) { 
 
myTween.stop();

}

function 
weiter(evt:MouseEvent) { 
myTween.resume();



Ich bin echt dankbar für jede Hilfe.

Vielen Dank im Voraus
Hany

Geändert von Martin Kraft (18-09-2011 um 18:41 Uhr)
hany1 ist offline   Mit Zitat antworten
Alt 18-09-2011, 17:29   #2 (permalink)
Neuer User
 
Registriert seit: Sep 2011
Beiträge: 23
ok, wie es aussieht, wird der "manuelle Tween" so gesetzt, dass er andauert, bis die Bildergalerie am Ende ist (gleich in welcher Richtung). Das onFinish wird also erst ganz zum Schluss aufgerufen.

Und da du erst im onFinish die MOUSE_OVER und MOUSE_OUT Listener wieder setzt, funktioniert bis dahin freilich das MOUSE_OVER und MOUSE_OUT nicht.
(wobei mir noch nicht ganz klar ist, warum du Listeners im onFinish nochmals entfernst bevor du sie gleich darauf wieder setzt)

Es gibt verschiedene Lösungen, die man durchspielen könnte. Am besten ist es glaub ich, denn globalen Tweener in Methoden forward und back einfach ganz abzubrechen und neu zu setzen und an den Listeners gar nix zu verändern.
Freilich würde ich empfehlen dafür auf die lokalen Tweener-Variablen zu verzichten und stattdessen überhaupt nur eine globale Tweener-Variable zu verwenden.
(Zumal mich das ohnehin irritiert. Es wird ein Heap-Objekt angelegt und die einzige Referenz darauf geht eine Zeile später out of scope. Normalerweise könnte da dann der böse Garbage Collector kommen und den Tween einfach löschen. Komischerweise sind aber genau solche Beispiele auch auf der Adobe-Seite. Muss ich mal recherchieren, was es damit auf sich hat)

Ich weiß allerdings nicht genau, ob das dann das Verhalten ist, das du möchtest.

Eine Sache irritiert mich: die manuellen Scrolls scheinen in die falsche Richtung zu gehen.

Und noch eine Frage. Sind die Magic Values für die Verständlichkeit des Beispiels oder original so drinnen?

Geändert von silverchecker (18-09-2011 um 17:35 Uhr)
silverchecker ist offline   Mit Zitat antworten
Alt 18-09-2011, 23:14   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2011
Beiträge: 4
Hallo silverchecker,

vielen Dank für deine Antwort!

Ich habe in die onFinish Function die removeEventListener und addEventListener eingefügt, weil diese MouseEvents nicht mehr ausgelöst worden sind, nachdem ich die Schaltflächen (links und rechts) betätigt habe.
Ursprünglich war es so:

function onFinish(e:TweenEvent):void {
myTween.start();
}

Aber wie gesagt, die MouseEvents waren ohne Wirkung, darum habe ich sie nachträglich in die onFinish-Function eingefügt.

Sonst läuft die Galerie so durch, wie ich es mir vorgestellt habe.


Beim Laden werden die Bilder von rechts nach links gescrollt und laufen in Schleife durch. Bewege ich die Maus darüber, bleibt die Animation bei dem jeweiligen Bild stehen. Bewege ich die Maus vom MovieClip weg, wird das Scrollen fortgesetzt.

Ab hier ist das Problem:
Sobald ich dann die Schaltflächen (links und rechts) betätige, werden die MouseEvent (rollout und weiter) nicht mehr ausgelöst. Vielleicht ist es irgendwelche Kleinigkeit, die ich übersehen habe...

"Eine Sache irritiert mich: die manuellen Scrolls scheinen in die falsche Richtung zu gehen."
Meinst du hier die forward und back function? Sie werden eingesetzt, um vor und zurück zu scrollen. Die Bezeichnungen sind irgendwie unglücklich.

Die Magic Values sind original drinnen. u.a. die Breite des MovieClips.

Vielen Dank noch noch mal silverchecker!

Viele Grüße
hany
hany1 ist offline   Mit Zitat antworten
Alt 19-09-2011, 06:00   #4 (permalink)
Neuer User
 
Registriert seit: Sep 2011
Beiträge: 23
Zitat:
Zitat von hany1 Beitrag anzeigen
Vielleicht ist es irgendwelche Kleinigkeit, die ich übersehen habe...
Wo der Fehler liegt, hab ich bereits im vorigen Post geschrieben. Vielleicht hast du's ja überlesen: Hier nochmal:

...wird der "manuelle Tween" so gesetzt, dass er andauert, bis die Bildergalerie am Ende ist (gleich in welcher Richtung). Das onFinish wird also erst ganz zum Schluss aufgerufen.

der Ablauf ist also so:

Tweenen -> Klick auf einen Button -> "ent"-registrieren der Listeners -> Srcoll bis ganz zum Schluss -> onFinish (erst hier werden die Listeners wieder gesetzt, da ist aber der gesamte Scroll - bis zum absoluten Ende- schon vorbei).

Die Lösung hatte ich dir auch schon geschrieben:

Am besten ist es glaub ich, denn globalen Tweener in Methoden forward und back einfach ganz abzubrechen und neu zu setzen und an den Listeners gar nix zu verändern.

Ich schreibs dir mal um, und poste nochmal
silverchecker ist offline   Mit Zitat antworten
Alt 19-09-2011, 06:05   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2011
Beiträge: 23
.....

function forward(evt:MouseEvent)
{
var sekunden:Number = alles.x / 45;
sekunden = - sekunden

myTween.stop();
myTween = new Tween(alles, "x", None.easeIn, alles.x,100, sekunden, true);

}

function back(evt:MouseEvent)
{
var diff:Number = -4530 - alles.x;
var sekunden:Number = diff / 45;
sekunden = - sekunden

myTween.stop();
myTween = new Tween(alles, "x", None.easeIn, alles.x,-4530, sekunden, true);

}

//onFinish() benötigst du nicht mehr.

function rollout(evt:MouseEvent) {
myTween.stop();

}

function weiter(evt:MouseEvent) {
myTween.resume();

}


//Das ist jetzt aber so schnell hingehackt - bitte noch kontrollieren...
silverchecker ist offline   Mit Zitat antworten
Alt 19-09-2011, 09:54   #6 (permalink)
Neuer User
 
Registriert seit: Sep 2011
Beiträge: 4
vielen Dank für den Code!

Es funktioniert auch sehr gut. Aber die Animation geht nicht weiter, wenn das Tween zu ende geht. Darum habe ich auch die onFinish function mit eingebaut.

Wenn die Animation (egal rechts oder links) endet, muss dann die Animation in Schleife durchlaufen.


Eventuell hilft hier eine Schleife oder If-Abfrage. mal schauen
hany1 ist offline   Mit Zitat antworten
Alt 23-09-2011, 18:30   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2011
Beiträge: 23
ok - aber das Ursprungsproblem ist gelöst, oder? Ich komm jetzt im Moment nicht dazu, aber wenn ich die Zeit finde, suche ich noch eine Lösung, für das "im Kreis scrollen".
silverchecker ist offline   Mit Zitat antworten
Alt 24-09-2011, 00:44   #8 (permalink)
Neuer User
 
Registriert seit: Sep 2011
Beiträge: 4
Hallo Silverchecker,

ich habe endlich die Lösung. Es funktioniert auch wunderbar, genau wie ich es haben wollte.

Da ich die onFinish Funktion doch benötige, Habe sie wieder auskommentiert. Ich habe auch neue Funktion erstellt und zwar die onManuelSrollFinish Funktion. Wenn das manuelle Scrollen per Schaltflächen (links und rechts) das Ende erreicht, wird dann diese Funktion aufgerufen. Da läuft ein neues Tween ab z.B. die Achse X 100 durch und danach wird die onFinish Funktion dann wieder aufgerufen, damit die Animation in Schleife durch läuft.

Es ist zwar nicht die eleganteste Art. Aber es funktioniert prima.

Vielen Dank für deine Hilfe


Hier ist der fertige Code:


import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;


var myTween = new Tween(alles, "x", None.easeIn, 100,-4130, 100, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, onFinish);

//////////////////////////////////////// MC alles ist der Container, in dem alle Bilder geladen werden.
alles.addEventListener(MouseEvent.MOUSE_OVER,rollo ut);
alles.addEventListener(MouseEvent.MOUSE_OUT,weiter );

///////// rechts und links -> Manuelles Scrollen nach rechts und nach links
rechts.addEventListener(MouseEvent.CLICK, forward);
links.addEventListener(MouseEvent.CLICK, back);

function forward(evt:MouseEvent)
{
var sekunden:Number = alles.x / 45;
sekunden = - sekunden

myTween.stop();
myTween = new Tween(alles, "x", None.easeIn, alles.x,100, sekunden, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, onManuelSrollFinish);

}

function back(evt:MouseEvent)
{
var diff:Number = -4130 - alles.x;
var sekunden:Number = diff / 45;
sekunden = - sekunden

myTween.stop();
myTween = new Tween(alles, "x", None.easeIn, alles.x,-4130, sekunden, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, onManuelSrollFinish);

}



function rollout(evt:MouseEvent) {
myTween.stop();

}

function weiter(evt:MouseEvent) {
myTween.resume();

}
function onFinish(e:TweenEvent):void {

myTween.start();

}
function onManuelSrollFinish(e:TweenEvent)
{
myTween.stop();
myTween = new Tween(alles, "x", None.easeIn, 100,-4130, 100, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, onFinish);

}

Geändert von hany1 (24-09-2011 um 00:46 Uhr)
hany1 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
as3, bildergalerie, mouse_over, scrollen, slider

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bildergalerie katharina Flash Einsteiger 15 04-01-2007 11:17
Bildergalerie tpa Flash Einsteiger 2 21-09-2006 09:17
bildergalerie senja007 Flash MX 2004 2 08-08-2005 11:30
Bildergalerie Poldeck HTML und CSS 3 27-03-2004 18:01
Bildergalerie schmitt197 Flash MX 1 02-02-2004 11:28


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele