Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-08-2005, 19:52   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Dynamische Lupe / Vergrößerung

Hello,
ich hab mir grad die Seite http://www.aeonflux.com/aeonflux.html angeschaut und bin von der Navigation sehr beeindruckt. Da ich zufällig grad an einer ähnlichen experimentellen Navigation arbeite wollt ich mal horchen ob einer ne Idee hat wie man diese dynamische Lupenfunktion da angehen könnte... wertet die Sache ja doch echt auf... hat sowas exploratives... einer von euch ne Ahnung?
cheetah ist offline   Mit Zitat antworten
Alt 21-08-2005, 09:06   #2 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
...nich? hmm. Erwarte hier ja jetzt auch kein fertiges Script hehe... brauch nur mal einen Ansatz um das anzugehen... vielleicht gibts da ja eine recht einfach integrierbare Funktion die soetwas ausgeben könnte...
cheetah ist offline   Mit Zitat antworten
Alt 21-08-2005, 21:14   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Grad gesehn dass der Colian (siehe ECHTE Lupe) auch schonma sone Frage vor einiger Zeit gestellt hat... scheint wohl wirklich etwas kniffelig zu sein... normale Lupe / Linse ist ja soweit nachvollziehbar, aber bei dynamischem Content...
cheetah ist offline   Mit Zitat antworten
Alt 21-08-2005, 21:24   #4 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Zitat:
Zitat von cheetah
... die Seite http://www.aeonflux.com/aeonflux.html .... dynamische Lupenfunktion ....
wo
Edit: ...hab mal was angehängt, meinst Du sowas??
Angehängte Dateien
Dateityp: zip kugeleffekt.zip (3,7 KB, 62x aufgerufen)
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (21-08-2005 um 23:12 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 22-08-2005, 10:46   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Japp. Das meinte ich, besten Dank... auf der http://www.aeonflux.com/aeonflux.html musste bisserl warten bis das Intro vorbei ist + dann baut sich oben die Navi auf... eben mit diesem Kugeleffekt.. hast selber geschrieben das AS? Hast zufällig noch ein paar Erläuterungen zu dem Script an Bord? Wäre prima, dann kann ichs an meine Problemstellung anpassen... so ganz klar sind mir da so manche Zeilen nicht
cheetah ist offline   Mit Zitat antworten
Alt 22-08-2005, 11:58   #6 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
...ich habs mal versucht zu kommentieren, ich hoffe Du hast ausreichend gute Mathe-Kenntnisse, sonst hilft das auch wohl nix :
ActionScript:
  1. //die ersten beiden Zeilen sind eher Spielerei
  2. //so verteilen sich die Ringe passend zur Dokumentengrösse
  3. //....braucht man eigentlich nicht....
  4. var w = Stage.width;
  5. var h = Stage.height;
  6. //_global.dia= Radius der virtuellen Kugel (sollte eigentlich der Durchmesser werden, deshalb dia...)
  7. _global.dia = 150;
  8. MovieClip.prototype.scale = function(sc) {
  9.     //ich hatte keine Lust immer this._xscale=this._yscale=50;
  10.     //zu schreiben deshalb hab ich einen entsprechenden prototypen gebastelt
  11.     this._xscale = this._yscale=sc;
  12. };
  13. for (var i = 0; i<70; i++) {
  14.     var x=(i%10)*w/11+w/22//random(w);
  15.     //ohne die 'Spielerei' vom Anfang
  16.     //var x= (i%10)*50+25;
  17.     //bleibt nur noch i%10 zu erklären
  18.     //% steht in flash für modulo
  19.     //modulo gibt den Rest einer Teilaufgabe zurück
  20.     //Beispiel: 43/10=4 Rest 3 => 43%10=3
  21.     //diese und die nächste Zeile ist das 'bessere'
  22.     //...in Zeilen und Spalten verteilen...
  23.     var y=Math.floor(i/10)*h/8+h/16//random(h);
  24.     //ohne die 'Spielerei' vom Anfang
  25.     //var y= Math.floor(i/10)*50+25;
  26.     ziel = this.attachMovie("ring", "ring"+i, i, {_x:x, _y:y,_alpha:50});
  27.     //das meiste dürfte klar sein, nur das bei attachMovie
  28.     //die Instanz zurückgegeben wird, ist nicht überall bekannt
  29.     ziel.x = ziel._x;
  30.     //ich benötige die aktuelle x-Position für die späteren Berechnungen
  31.     ziel.y = ziel._y;
  32.     //ich benötige die aktuelle x-Position für die späteren Berechnungen
  33.     ziel.scale(50);
  34.     //der o.a. prototype in Aktion
  35.     ziel.onMouseMove = function() {
  36.         //jeder Ring bekommt eine eigene onMouseMove-Funktion
  37.         var dx = _root._xmouse-this.x;
  38.         //Differenz, der x-Mausposition und der ursprünglichen x-position des Rings...
  39.         var dy = _root._ymouse-this.y;
  40.         //Differenz, der y-Mausposition und der ursprünglichen y-position des Rings...
  41.         var d = Math.sqrt(dx*dx+dy*dy);
  42.         //Trigonometrie: c²=a²+b²
  43.         if (d<dia) {
  44.             this._alpha=50+d/dia*50;
  45.             //_alpha entsprechend Mausposition verändern min=50% max=100%
  46.             this.scale(50+(dia-d));   
  47.             //skalierung entsprechend Mausposition verändern min=50% max=50+dia=200%
  48.             var dist = Math.sin((dia/2-Math.abs(dia/2-d))/dia/2*Math.PI/2);
  49.             //hmmm...ja, Trigonometrie.... eigentlich der 'Kern' der Animation
  50.             //Math.abs(n) ...gibt immer einen pusitiven Wert zurück
  51.             //flash rechnet bei sinus/cosinus im Bogenmaß desh. *Math.PI/2..
  52.             //bei 360°-Berechung hätte da *90 stehen müssen
  53.             //...einfach mal (mit nur einen Ring) trace((dia/2-Math.abs(dia/2-d)); machen
  54.             //...dann verstehst Du vielleicht was ich hier mache
  55.             var distx = dx/d*dist*dia;
  56.             //nach dem Strahlensatz x-Verschiebung errechnen
  57.             var disty = dy/d*dist*dia;
  58.             //nach dem Strahlensatz y-Verschiebung errechnen
  59.             //
  60.             //
  61.             //...und positionieren...
  62.             this._x = this.x-distx;
  63.             this._y = this.y-disty;
  64.         }else{
  65.             //wenn Abstand zu groß trotzdem 'nochmal' positionieren
  66.             //sonst stehen die Ringe evtl. etwas versetzt...
  67.             this._x = this.x;
  68.             this._y = this.y;
  69.             this._alpha=50;
  70.             this.scale(50);
  71.         }
  72.     };
  73. }
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 22-08-2005, 12:27   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Na das nenn ich mal ausführlich... danke. Ist verständlich - mit Mathe habe ich mich lange genug abgeplagt - daran scheiterts nicht hehe... war eher der Aufbau des Scripts... weisst du zufällig wie man MovieClips per AS in die Bibliothek exportiert um die dann via dieser AttachMovie-Funktion wieder ansprechen zu können? habs auch hier gepostet mein Prob... Bibliothek-MC mit AS simulieren
cheetah ist offline   Mit Zitat antworten
Alt 26-08-2005, 17:10   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Ich möchte jetzt gerne per startDrag einen dieser Ringe auf onRollOver verschieben können - leider funktioniert das überhaupt nicht - hab da schon diverse Möglichkeiten ausprobiert - hast du da vielleicht auch ne Idee? Würde mir sehr weiterhelfen grad...
cheetah ist offline   Mit Zitat antworten
Alt 26-08-2005, 18:08   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Also, ums nochmal auf den Punkt zu bringen.. hier mein aktueller Code... warum funzt bloß dieses startDrag nicht...

ActionScript:
  1. _global.dia = 150;
  2. MovieClip.prototype.scale = function(sc) {
  3.     this._xscale = this._yscale=sc;
  4. }
  5.        
  6.         ziel = this.createEmptyMovieClip("rechteck", 1);
  7.        
  8.         this.rechteck.beginFill(0x000000,100);
  9.         this.rechteck.lineTo(0,0);
  10.         this.rechteck.lineTo(10,0);
  11.         this.rechteck.lineTo(10,10);
  12.         this.rechteck.lineTo(0,10);
  13.         this.rechteck.endFill();
  14.        
  15.         this.rechteck._x = 50;
  16.         this.rechteck._y = 50;
  17.         this.rechteck._alpha=50;
  18.  
  19.         ziel.x = ziel._x;     
  20.         ziel.y = ziel._y;
  21.         ziel.scale(50);
  22.         ziel.onMouseMove = function() {
  23.  
  24.                 var dx = _root._xmouse-this.x;
  25.                 var dy = _root._ymouse-this.y;
  26.                 var d = Math.sqrt(dx*dx+dy*dy);
  27.                 if (d<dia) {
  28.                         this._alpha=50+d/dia*50;
  29.                         this.scale(50+(dia-d));
  30.                         var dist = Math.sin((dia/2-Math.abs(dia/2-d))/dia/2*Math.PI/2);
  31.                         var distx = dx/d*dist*dia;
  32.                         var disty = dy/d*dist*dia;
  33.                         this._x = this.x-distx;
  34.                         this._y = this.y-disty;
  35.                                                
  36.                 }else{
  37.                         this._x = this.x;
  38.                         this._y = this.y;
  39.                         this._alpha=50;
  40.                         this.scale(50);
  41.                        
  42.                        
  43.                 }
  44. }
  45.  
  46. this.rechteck.onRollOver = function(){
  47.     this.startDrag();
  48.    
  49. }
cheetah ist offline   Mit Zitat antworten
Alt 26-08-2005, 19:37   #10 (permalink)
Film und Medien
 
Registriert seit: Aug 2005
Ort: Mainz
Beiträge: 200
Hi

Ich habe das vor 2 Jahren mal gemacht und mit etwas Hilfe von einem Freund, Informatiker, zustande gebracht. Das ganze basiert auf einem Code den wir mal in einem Forum gefunden haben. Es funktioniert vollständig on Drag. Wann es geht kannst du ja mit hilfe einer if-Schleife festlegen. Also abhängig von der Mausposition.

ActionScript:
  1. this.onLoad = function() {
  2.         for (x=1; x<30; x++) {
  3.                         this.attachMovie("quader","quader"+x, ++d);
  4.                         this["quader"+x]._x = x * 30;
  5.                         this["quader"+x].onMouseMove = function() {
  6.                                 var prescaleit_1 = (Math.sqrt((_root._xmouse-this._x)*(_root._xmouse-this._x)));
  7.                                 var scaleit_1 = (200-(prescaleit_1/0.8));
  8.                                 if (scaleit_1>=100) {
  9.                                         this._yscale = scaleit_1;
  10.                                         this._xscale = scaleit_1;
  11.                                 } else {
  12.                                         this._yscale = 100;
  13.                                         this._xscale = 100;
  14.                                 }
  15.                         };
  16.                 }
  17. };;
Nun machst du im der Bibliothek ein movie, den du unter Verknüpfungen (rechte Maustaste) "quader" nennst. Wenn du darin einen Button einbaust müsstest du diesen über den Instanznamen aufrufen können.

Änderung:
Hier noch der Code um ein Feld von Rechtecken zu erzeugen:
ActionScript:
  1. this.onLoad = function() {
  2.         for (x=1; x<20; x++) {
  3.                 for (y=1; y<15; y++) {
  4.                         this.attachMovie("quader","quader"+x+"-"+y, ++d);
  5.                         this["quader"+x+"-"+y]._x = x * 40;
  6.                         this["quader"+x+"-"+y]._y = y * 40;
  7.                         this["quader"+x+"-"+y].onMouseMove = function() {
  8.                                 var prescaleit_1 = (Math.sqrt(((_root._ymouse-this._y)*(_root._ymouse-this._y))+((_root._xmouse-this._x)*(_root._xmouse-this._x))));
  9.                                 var scaleit_1 = (200-(prescaleit_1/1.5));
  10.                                 if (scaleit_1>=100) {
  11.                                         this._yscale = scaleit_1;
  12.                                         this._xscale = scaleit_1;
  13.                                 } else {
  14.                                         this._yscale = 100;
  15.                                         this._xscale = 100;
  16.                                 }
  17.                         };
  18.                 }
  19.         }
  20. };

Ich hoffe es hilft dir ein wenig.

Schöne Grüße
Asta

Geändert von Asta (26-08-2005 um 19:42 Uhr)
Asta ist offline   Mit Zitat antworten
Alt 26-08-2005, 21:38   #11 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Danke dir für die Antwort - habs mal ausprobiert, glaubich aber n bisserl was anderes gesucht... anyway... der Fehler bei mir war mal wieder ein fehlendes _parent in der RollOver-Funktion... wie folgt läufts... wenns nur immer so einfach wäre

ActionScript:
  1. _global.dia = 150;
  2. MovieClip.prototype.scale = function(sc) {
  3.         this._xscale = this._yscale=sc;
  4. }
  5.  
  6. ziel = this.createEmptyMovieClip("rechteck", 1);
  7.  
  8. this.rechteck.beginFill(0x000000,100);
  9. this.rechteck.lineTo(0,0);
  10. this.rechteck.lineTo(10,0);
  11. this.rechteck.lineTo(10,10);
  12. this.rechteck.lineTo(0,10);
  13. this.rechteck.endFill();
  14.  
  15. this.rechteck._x = 50;
  16. this.rechteck._y = 50;
  17. this.rechteck._alpha=50;
  18.  
  19. ziel.x = ziel._x;
  20. ziel.y = ziel._y;
  21. ziel.scale(50);
  22. ziel.onMouseMove = function() {
  23.        
  24.         var dx = _root._xmouse-this.x;
  25.         var dy = _root._ymouse-this.y;
  26.         var d = Math.sqrt(dx*dx+dy*dy);
  27.         if (d<dia) {
  28.                 this._alpha=50+d/dia*50;
  29.                 this.scale(50+(dia-d));
  30.                 var dist = Math.sin((dia/2-Math.abs(dia/2-d))/dia/2*Math.PI/2);
  31.                 var distx = dx/d*dist*dia;
  32.                 var disty = dy/d*dist*dia;
  33.                 this._x = this.x-distx;
  34.                 this._y = this.y-disty;
  35.                
  36.         }else{
  37.                 this._x = this.x;
  38.                 this._y = this.y;
  39.                 this._alpha=50;
  40.                 this.scale(50);
  41.                
  42.                
  43.         }
  44. }
  45.  
  46. this.rechteck.onRollOver = function(){
  47.         this._parent.startDrag();
  48.        
  49. }
cheetah ist offline   Mit Zitat antworten
Alt 26-08-2005, 22:02   #12 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
So ein Ärger - da dachte ich das wärs und merk im nächsten Moment dass ich so ja die gesamte Bühne verschiebe.. weiss einer wie ich nur den MC ohne die Bühne draggen kann? Danke für die Aufmerksamkeit
cheetah ist offline   Mit Zitat antworten
Alt 27-08-2005, 12:18   #13 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Keiner ne Idee?
cheetah ist offline   Mit Zitat antworten
Alt 27-08-2005, 12:50   #14 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
hmm..., wofür brauchst Du'n das?
...der einfachste Weg ist, den mouseMove-Handler erst zu löschen:
ActionScript:
  1. ziel.onRollOver = function(){
  2.     delete this.onMouseMove;
  3.     this.startDrag();
  4. }
...oder muss der mouseMove-Handler nacher wieder funktionieren..., dann ist es vielleicht besser so:
ActionScript:
  1. ziel.onRollOver = function(){
  2.  
  3.     this.onEnterFrame=function(){
  4.         this.x=this._x=this._parent._xmouse;
  5.         this.y=this._y=this._parent._ymouse;
  6.     }
  7. }
...naja dann müsstest Du halt nach'm 'drop' den enterFrame-Handler löschen, und schon ging es wieder... oder sind beide Fälle für Dich unbrauchbar, weil Du es halt noch anders brauchst
...btw. wenn Du schon 'ziel = this.createEmptyMovieClip("rechteck", 1);' codest kannst Du statt 'this.rechteck' grundsätzlich auch 'ziel' schreiben, noch 'schöner wirds dann mit with, Dein Code sähe dann so aus
ActionScript:
  1. _global.dia = 150;
  2. MovieClip.prototype.scale = function(sc) {
  3.     this._xscale = this._yscale=sc;
  4. };
  5. ziel = this.createEmptyMovieClip("rechteck", 1);
  6. with (ziel) {
  7.     beginFill(0x000000, 100);
  8.     lineTo(0, 0);
  9.     lineTo(10, 0);
  10.     lineTo(10, 10);
  11.     lineTo(0, 10);
  12.     endFill();
  13.     _x = 50;
  14.     _y = 50;
  15.     _alpha = 50;
  16. }
  17. ziel.x = ziel._x;
  18. ziel.y = ziel._y;
  19. ziel.scale(50);
  20. ziel.onMouseMove = function() {
  21.     var dx = _root._xmouse-this.x;
  22.     var dy = _root._ymouse-this.y;
  23.     var d = Math.sqrt(dx*dx+dy*dy);
  24.     if (d<dia) {
  25.         this._alpha = 50+d/dia*50;
  26.         this.scale(50+(dia-d));
  27.         var dist = Math.sin((dia/2-Math.abs(dia/2-d))/dia/2*Math.PI/2);
  28.         var distx = dx/d*dist*dia;
  29.         var disty = dy/d*dist*dia;
  30.         this._x = this.x-distx;
  31.         this._y = this.y-disty;
  32.     } else {
  33.         this._x = this.x;
  34.         this._y = this.y;
  35.         this._alpha = 50;
  36.         this.scale(50);
  37.     }
  38. };
  39. ziel.onRollOver = function() {
  40.     delete this.onMouseMove;
  41.     this.startDrag();
  42. };
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 27-08-2005, 14:02   #15 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 27
Aaah ja super... danke dir... mein Ziel war es wirklich, erst den mouseMove-Handler zu deaktivieren um diesen anschließend wieder zu aktivieren... soll natürlich onPress geschehen nicht wie fälschlicherweise angegeben onRollOver... funktioniert wunderbar... tu mich manchmal noch etwas schwer mit den Basics - wird aber
cheetah 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 05:09 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele