Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-02-2004, 22:07   #1 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
panorama image slider

hi,
ich hab ein script für einen panorama image slider erstellt.
da ich hier im forum aber noch keinen thread gefunden hab, der das ausführlich behandelt,
und ich hab tatsächlich die suche benutzt, will ich mal versuchen meinen hier zu erläutern,
so das es auch anfänger im AS verstehen (also deppen wie ich).

vorher aber noch ein paar dinge:
1. der code stammt tatsächlich von mir, und ist ohne tut hilfe entstanden, was man ihm wohl ansieht (trotzdem stolz bin)
2. das ding ist zu 60/40 überlegung/try-and-error entstanden
3. ich hab nicht wirklich 100% ne ahnung wie er funktioniert,
weshalb ich auch keine garantie auf vollständigkeit/korrektheit der erklärung übernehme
4. wenn mir jemand genau erklären kann wie das ding funktioniert, bitte ich darum. mich interessierts selber.

also los.

hier könnt ihr schauen.


primär braucht man dafür:

eine neue .fla und ein bild das die höhe der .fla, aber nicht ihre breite hat. ist das bild höher, wird es bei mir nicht angezeigt.
bei jpegs solltet ihr darauf achten, das sie nicht mit mehreren durchgängen gespeichert wurden, sonst zeigt mx sie euch nicht an.

auf der bühne erstellt ihr ein neues mc, packt das bild darein, positioniert das bild im mc mittig, und dann das mc ebenso auf der bühne.
der y wert auf der bühne ist null.

dann nehmt ihr den code hier, und klickt das mc an, und fügt ihn im actionen fenster ein.


der code dazu:

ActionScript:
  1. onClipEvent(enterFrame){
  2. breitebuehne = stage.width;
  3. xmouse = _root._xmouse;
  4. mcbreite = this._width;
  5. speedfactor = 10;
  6. relation = mcbreite / breitebuehne;
  7. aalt = getProperty(this.mc,_x);
  8.  
  9. if(xmouse < breitebuehne && xmouse > 0)
  10. {
  11. //des pudels kern
  12. aneu = ((((xmouse*relation)-(mcbreite/2))/(mcbreite/(mcbreite-breitebuehne)))+(breitebuehne/2));
  13.  
  14. if(xmouse > breitebuehne/2){
  15. if(aalt < aneu){
  16. this._xthis._x + Math.abs((aneu -aalt)/100)*speedfactor;
  17. }
  18. if(aalt> aneu){
  19. this._xthis._x - Math.abs((aneu - aalt)/100)*speedfactor;   
  20. }
  21.  
  22. }
  23. }
  24.  
  25. if(xmouse < breitebuehne/2){
  26. if(aalt > aneu){
  27. this._xthis._x - Math.abs((aneu - aalt)/100)*speedfactor;
  28. }
  29. if(aalt < aneu){
  30. this._xthis._x + Math.abs((aneu - aalt)/100)*speedfactor;
  31. }
  32. }
  33.  
  34. }

ich werde jetzt den code zeile für zeile durchgehen.


ActionScript:
  1. onClipEvent(enterFrame){
  2.  
  3. breitebuehne = stage.width;
  4. xmouse = _root._xmouse;
  5. mcbreite = this._width;
  6. speedfactor = 10;
  7. relation = mcbreite / breitebuehne;
  8. aalt = getProperty(this.mc,_x);

onClipEvent(enterFrame) dürfte jedem klar sein, wenn das MC auf der Bühne ist, und der Zeiger auf dem Frame, dann mache dies und das.
der rest sind variablen.
breitebuehne ist selbsterklärend,
xmouse ist die x position der maus,
mcbreite ist die breite des movieclips in der die bilddatei liegt,
der speedfactor bestimmt wie schnell sich nachher das bild bewegt,
relation ist das längenverhältnis von mc zu bühne,
und aalt ist die position des mc's auf der bühne.
aalt, weil ich den punkt a benannt habe, und alt erklärt sich später.

ActionScript:
  1. if(xmouse < breitebuehne && xmouse > 0)

wenn die x position der maus größer als null ist, heißt nicht über den linken rand hinaus geht, und die x mausposition aber noch auf der buehne
und nicht über den rechten rand hinaus ist, dann mache....

ActionScript:
  1. aneu = ((((xmouse*relation)-(mcbreite/2))/(mcbreite/(mcbreite-breitebuehne)))+(breitebuehne/2));

augen auf und aufgepasst. das hier ist der kerncode der die verschiebung berechnet.
leider weiß ich nicht genau wie er funktioniert, try-and-error eben, aber ich werde versuchen mein grundkonzept zu erläutern.

also:
xmouse * relation legt einen punkt auf dem mc fest, der relativ zu der x position der maus steht. das ist wichtig,
weil dieser punkt, der auf dem mc ist, der an die x position der maus bewegt werden soll.

-mcbreite/2 setzt diesen punkt um genau die hälfte der breite des mc's zurück. heist, der x wert dieses punktes im mc,
wird niemals größer als die hälfte der breite des mc's werden, und niemals kleiner als die negative hälfte des mc's.

(mcbreite/(mcbreite-breitebuehne)) gibt das längenverhältnis der über die bühne hinausragenden stücke des mc's zur gesammtlänge des mc's an.
stimmt dieses verhältnis nicht, wird euch der slider das bild entwerder zu weit nach links und rechts schieben, so das die bühne sichtbar wird,
oder das bild zu knapp bewegen, so dass es nicht komplett sichbar ist.

+(breitebuehne/2) setzt den mc in die mitte der bühne, sonst würde er komisch an anderer position rumfahren.

vollkommen ausgerechnet, ergibt sich daraus die neue x position des mc's.


ActionScript:
  1. if(xmouse > breitebuehne/2){
  2. if(aalt < aneu){
  3. this._xthis._x + Math.abs((aneu -aalt)/100)*speedfactor;
  4. }
  5. if(aalt> aneu){
  6. this._xthis._x - Math.abs((aneu - aalt)/100)*speedfactor;   
  7. }
  8.  
  9. }
  10. }

wenn die maus sich in der linken hälfte der bühne aufhält, dann prüfe, ob sie sich in linke oder rechte richtung bewegt.
das sind die aalt > aneu oder aalt< aneu abfragen.
und wenn das festgestellt wurde, ziehe pro zyklus den entstandenen wert ab.
genau das gleiche, nur umgekehrt passiert in der rechten bühnenhälfte.

der wert errechnet sich aus dem abstand der durch die maus festgelegten,
gewünschten neuen position, der alten position, beides durch 100, was den wert sehr klein macht, und dann mal dem speedfactor.
lasst ihr den speedfactor weg, bewegt sich euer bild nur seeeeehr langsam.
macht ihr in dagegen riesen groß, habt ihr den effekt, den ihr ohne diese verzögerung hättet.

der code für aneu errechnet ja die gewünschte position, die der mc haben soll.
anstelle aneu könntet ihr aber auch gleich this._x = ... schreiben, und dieses verzögerungsscript weglassen.
dann hättet ihr gewissemaßen das fundament für einen textscroller.

anstelle this._x = this._x + / - kann man auch this._x += oder
this._x -= schreiben. der effekt ist der gleiche.




jetzt noch etwas:
solltet ihr die bilder dynamisch nachladen wollen, und das mc auf 0/0 setzen, ergibt sich für aneu ein anderer code:

ActionScript:
  1. aneu = ((((xmouse*(mcbreite / breitebuehne))
  2. -(mcbreite/2))/(mcbreite/(mcbreite-breitebuehne)))-(Math.abs(mcbreite- breitebuehne)/2));

der rest bleibt wie gehabt.



so, hoffe ich konnte denjenigen helfen, die nach so einem effekt suchen. hat mich mathedeppen ne woche gekostet,
diesen kruscht auszutüfteln. dafür ist er aber 100% echo5-7

ps: wer rechtschreibfehler findet, darf sie behalten
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+

Geändert von echo5-7 (25-02-2004 um 22:33 Uhr)
echo5-7 ist offline   Mit Zitat antworten
Alt 25-02-2004, 22:52   #2 (permalink)
r0b
Neuer User
 
Benutzerbild von r0b
 
Registriert seit: Feb 2002
Ort: Hamburg
Beiträge: 1.281
Thumbs up

Sau-bär!

Schönes Teil.
Zu 3. und 4. *g*
Ich denke du solltest öfter mal ein Tutorial schreiben. Hat wirklich Spass gemacht dieses hier zu lesen. Ein 100% Echo5-7.

mfg

Robert
__________________
robertreich.de v4 | Pixelfonts & FlashSite Tutorial
Friends of ED - Byte Size Flash MX: Adventures in Optimization

"Give a man a fish, and he eats for a day... Show him how to fish, and he eats for a lifetime."
r0b ist offline   Mit Zitat antworten
Alt 26-02-2004, 07:21   #3 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
danke
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Alt 26-02-2004, 09:46   #4 (permalink)
Work. Buy. Consume. Die.
 
Registriert seit: Feb 2003
Beiträge: 216
Das glaub mir jetzt zwar keiner, aber gerade wollte ich einen "Wie mach ich denn nen richtig guten Imageslider"-Thread aufmachen, da find ich das hier...

Sehr schön!

Ich hoffe es ist gestattet sich von deinem code ähem...äh... inspirieren zu lassen für die eigene website.

as
Arne_Schmidt ist offline   Mit Zitat antworten
Alt 26-02-2004, 10:58   #5 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
klar, dafür hab ich's ja gepostet
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Alt 26-02-2004, 17:49   #6 (permalink)
°
 
Benutzerbild von echo5-7
 
Registriert seit: Aug 2002
Ort: Baden-Baden
Beiträge: 3.962
noch eine anmerkung:

in der flashinternen vorschau funktioniert das ding nicht, weiß der geier warum!
__________________

LRRM | BLOG | FACEBOOK | TWITTER | G+
echo5-7 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele