Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-12-2004, 13:07   #1 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
flexible wabbelnde navigation

hi,

am besten erstmal anschauen.

http://www.projektil.org/flash/detailbilder2.html

wie man sieht möchte ich ein wabbelnde navigation bauen. nur wie ichs bis jetzt zu lösen versuchte ists etwas ruckelig.
warum ist mir klar. ich habe mit tweens die vergrößerungen der einzelnen kästchen festgelegt und lasse nur per as die frames in die eine oder andere richtung laufen.

auf den kästchen liegt as der die variable aktiv den jeweiligen wert des berührten kästchen zuweißt und mein as der in einer schleife liegt lautet wie folgt:

PHP-Code:
if (aktiv>0) {
    if (eval(
"detailbild"+aktiv)._currentframe<20) {
        eval(
"detailbild"+aktiv).nextFrame();
    }
    for (
i=1i<=6i++) {
        if (
== aktiv) {
            
//nichts
        
} else if (== (aktiv-1)) {
            if (eval(
"detailbild"+i)._currentframe>10) {
                eval(
"detailbild"+i).prevFrame();
            } else if (eval(
"detailbild"+i)._currentframe<10) {
                eval(
"detailbild"+i).nextFrame();
            }
        } else if (
== (aktiv+1)) {
            if (eval(
"detailbild"+i)._currentframe>10) {
                eval(
"detailbild"+i).prevFrame();
            } else if (eval(
"detailbild"+i)._currentframe<10) {
                eval(
"detailbild"+i).nextFrame();
            }
        } else if (
== (aktiv+2)) {
            if (eval(
"detailbild"+i)._currentframe>8) {
                eval(
"detailbild"+i).prevFrame();
            } else if (eval(
"detailbild"+i)._currentframe<8) {
                eval(
"detailbild"+i).nextFrame();
            }
            } else if (
== (aktiv-2)) {
            if (eval(
"detailbild"+i)._currentframe>8) {
                eval(
"detailbild"+i).prevFrame();
            } else if (eval(
"detailbild"+i)._currentframe<8) {
                eval(
"detailbild"+i).nextFrame();
            }
        } else if (eval(
"detailbild"+i)._currentframe>1) {
            eval(
"detailbild"+i).prevFrame();
        }
    }
} else {
    for (
i=1i<=6i++) {
        eval(
"detailbild"+i).prevFrame();
    }
}
mehr 0;
for (
i=1i<=6i++) {
    eval(
"detailbild"+i)._x 10-(eval("detailbild"+i)._height)/2;
    eval(
"detailbild"+i)._y mehr;
    
mehr += eval("detailbild"+i)._height+abstand;
    
this._y starty+(hoehe-this._height)/2;


ich glaube ich hab das viel zu umständlich gelöst. aber bei dem versuch die größen und abstände komplett dynamisch per as zu regeln bin ich leider gescheitert.

kann mir da wer helfen?

das problem ist nähmlich, das die kästchen nciht nur schaltflächen sind, sondern es geplant ist, wenn die navigation aktiv ist kleine bilder in den kästchen auftauchen zu lassen.


?

mfg esia
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 22-12-2004, 14:17   #2 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
bitte hat keine ahnung oder nen link zu nem tutorial oder so?
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 22-12-2004, 15:00   #3 (permalink)
Art Director
 
Benutzerbild von tomtom69
 
Registriert seit: Sep 2002
Ort: Mülheim/Ruhr
Beiträge: 698

ist eval net veraltet?
__________________
__________________________________________
"… blubb!"
tomtom69 ist offline   Mit Zitat antworten
Alt 22-12-2004, 15:08   #4 (permalink)
Art Director
 
Benutzerbild von tomtom69
 
Registriert seit: Sep 2002
Ort: Mülheim/Ruhr
Beiträge: 698
Question … mal ein kleiner Ansatz (Versuch)

… kann man net vom Prinzip so machen:

• Hast nen MC 10x10 px groß
• dann onClipEvent(MouseOver) if (dein_mc._width < x && dein_mc._height < y);
• dabei immer in Schleife abfragen, welche Größe der MC hat
• wenn Größe net erreicht, vergrößer weiter, wenn erreicht, hör auf.
• für das ganze brauchst Du noch ein Interval, damit's gleichmäßig läuft
• updateAfterEvent

Soviel zum Gedankenkonstrukt (in der Kürze) - das Script kann ich Dir leider net liefern, bin kein progger

Aber hier im FF findest Du sicherlich das passende

Greetz
__________________
__________________________________________
"… blubb!"
tomtom69 ist offline   Mit Zitat antworten
Alt 22-12-2004, 15:13   #5 (permalink)
hobbyflasher
 
Benutzerbild von lasic+
 
Registriert seit: Jun 2003
Ort: NRW
Beiträge: 229
instaliere dir mal irgendein TweenPrototypen, oder mach einfach eine Funktion, die deine Kästchen skaliert, hier findeste was:

http://sephiroth.it/

ich würde deine Menüpunkte in einem Array verwalten:

menu = ["home", "work", usw.]

auf jedem der Buttons liegt ´ne Action, die ihn skaliert. Auserdem brauchste eine Variable, die den aktuellen (vergrößerten Button) enthält. Nun kannste bei onRollOver die Skalierungen vornehmen, so ungefähr (nur gescribbelt ;-))

for (var i=0; i<menu.lenght, i++)
{
menu[i].hitArea.onRollOver = function()
{
aktMc.deineSkalierfunktion(normal);
aktMc = this;
this.deineSkalierfunktion(gross);
}
}

aktMc ist die Variable, die dein vergrößertes mc enthält.
evtl. noch mit setIntervall arbeiten, damit erst wieder ausgezoomt wird, bevor die neue Vergrößerung stattfindet.
__________________
gruß lasic+
lasic+ ist offline   Mit Zitat antworten
Alt 22-12-2004, 15:18   #6 (permalink)
Art Director
 
Benutzerbild von tomtom69
 
Registriert seit: Sep 2002
Ort: Mülheim/Ruhr
Beiträge: 698
Yepp …

… so in der Richtung hab ich auch gedacht - zwar ohne Arrays
__________________
__________________________________________
"… blubb!"
tomtom69 ist offline   Mit Zitat antworten
Alt 22-12-2004, 16:19   #7 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
danke für die antworten, aber ich fühl mich überfordert

vom verständnis sind mir eure vorschläge klar nur ist mein prob der code
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 22-12-2004, 19:48   #8 (permalink)
.
 
Benutzerbild von _kweso
 
Registriert seit: Aug 2001
Ort: wien/regensburg
Beiträge: 1.652
wenn das so werden soll, wie das mac osx dock, dann wuerd ich nicht mit rollOver arbeiten, sondern mit _x/_y-abstand maus zu button. also, je naeher die maus kommt umso groesser wird der mc. werd mal weiterueberlegen
bg
_k
__________________
350 * youtube

für alle, die noch keinen dropbox-account haben,
aber einen wollen: http://db.tt/wZ3S1pr
bringt uns beiden +500mb, thx!
_kweso ist offline   Mit Zitat antworten
Alt 22-12-2004, 23:33   #9 (permalink)
.
 
Benutzerbild von _kweso
 
Registriert seit: Aug 2001
Ort: wien/regensburg
Beiträge: 1.652
ActionScript:
  1. //bau einen mc mit zwei frames (der zweite ist fuer mouseOver)
  2. //und loesch ihn von der buehne
  3. //bibliothek: mc>>rechtsklick>>verknuepfung...>>export fuer as>>name:"button"
  4. //dann das hier auf frame1 hauptzeitleiste:
  5. buttons = new Array("about", "news", "projects", "clients", "contact", "downloads", "links");
  6. //grundlage fuer die buttons
  7. abst = 6;
  8. //abstand zwischen den buttons
  9. zoom = 1.3;
  10. //vergroesserung bei mausannaeherung
  11. for (wert in buttons) {
  12.     //schleife fuer jeden wert im array buttons
  13.     btn = buttons[wert];
  14.     _root.attachMovie("button", wert, wert);
  15.     _root[wert].nn = Number(wert);
  16.     _root[wert].siz = _root[wert]._width;
  17.     _root[wert].xx = wert*(_root[wert].siz+abst)+100;
  18.     _root[wert]._y = 100.5;
  19.     _root[wert].onRollOver = function() {
  20.         //mouseOver effekt
  21.         this.gotoAndStop(2);
  22.     };
  23.     _root[wert].onRollOut = function() {
  24.         //mouseOver effekt
  25.         this.gotoAndStop(1);
  26.     };
  27.     _root[wert].onEnterFrame = function() {
  28.         this.abstmouse = Math.sqrt(this._xmouse*this._xmouse+this._ymouse*this._ymouse);
  29.         if (this.abstmouse<this.siz*2) {
  30.             this._xscale = 100+(this.siz*2-this.abstmouse)*zoom;
  31.             this._yscale = this._xscale;
  32.         } else {
  33.             this._xscale = 100;
  34.             this._yscale = 100;
  35.         }
  36.     };
  37. }
  38. mitte=Math.round(buttons.length/2)-1
  39. _root.onEnterFrame = function() {
  40.     for (wert in buttons) {
  41.         if (wert == mitte) {
  42.             _root[wert]._x = _root[wert].xx;
  43.         } else if (wert>mitte) {
  44.             _root[wert]._x = _root[wert-1]._x+_root[wert-1]._width/2+_root[wert]._width/2+abst;
  45.         } else {
  46.             _root[Number(wert)]._x = _root[Number(wert)+1]._x-_root[Number(wert)+1]._width/2-_root[Number(wert)]._width/2-abst;
  47.         }
  48.     }
  49. };
__________________
350 * youtube

für alle, die noch keinen dropbox-account haben,
aber einen wollen: http://db.tt/wZ3S1pr
bringt uns beiden +500mb, thx!
_kweso ist offline   Mit Zitat antworten
Alt 23-12-2004, 08:39   #10 (permalink)
Art Director
 
Benutzerbild von tomtom69
 
Registriert seit: Sep 2002
Ort: Mülheim/Ruhr
Beiträge: 698
Question … das kommt dabei raus

Zitat:
**Fehler** Szene=Szene 1, Ebene=Ebene 1, Bild=1:Zeile 12: Syntaxfehler.
****//schleife fuer jeden wert im array buttons

**Fehler** Szene=Szene 1, Ebene=Ebene 1, Bild=1:Zeile 13: Syntaxfehler.
****btn = buttons[wert];

Anzahl der ActionScript-Fehler: 2 Gemeldete Fehler: 2
Das spukt er aus???

Hab alles so gemacht, wie geschrieben …

Greetz
__________________
__________________________________________
"… blubb!"
tomtom69 ist offline   Mit Zitat antworten
Alt 23-12-2004, 10:55   #11 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
thx kweso hört sich gut an. nur laufen dann leider ganz schön viele onenterframes parallel. aber wird mit dem sbstand wesentlich smoother laufen.

ich hab hier auch ausprobiert immer noch mti button jetzt aber komplett per as:

PHP-Code:
on (rollOverdragOver) {
    
_parent.gotoAndStop(3);
    
this.onEnterFrame = function() {
        
aktiv 1;
        
mehr=0;
        for (
i=1i<=6i++) {
            
hoehe = eval("_parent.detailbild"+i)._height;
            if (
== aktiv) {
                if (
hoehe<40) {
                    
wert = (50-hoehe)/8;
                    
hoehe += wert;
                    if (
hoehe>40 || (40-hoehe<0.5)) {
                        
hoehe 40.5;
                    }
                }
            } else if (
== (aktiv-1) || == (aktiv+1)) {
                if (
hoehe<30.5) {
                    
wert = (40-hoehe)/6;
                    
hoehe += wert;
                    if (
hoehe>30.5 || (30.5-hoehe<0.5)) {
                        
hoehe 30.5;
                    }
                } else {
                    
wert = (hoehe-30.5)/2;
                    
hoehe -= wert;
                    if (
hoehe<30.5 || (hoehe-30.5<0.5)) {
                        
hoehe 30.5;
                    }
                }
            } else {
                if (
hoehe>20.5) {
                    
wert = (hoehe-20.5)/3;
                    
hoehe -= wert;
                    if (
hoehe<20.5 || (hoehe-20.5<0.5)) {
                        
hoehe 20.5;
                    }
                }
            }
            eval(
"_parent.detailbild"+i)._height hoehe;
            eval(
"_parent.detailbild"+i)._width hoehe;
            eval(
"_parent.detailbild"+i)._x = -((hoehe-20.5)/2);
            eval(
"_parent.detailbild"+i)._y mehr;
            
mehr += eval("_parent.detailbild"+i)._height+5;
            
_parent._parent.detailbilder._y _parent._parent.detailbilder.starty+(_parent._parent.detailbilder.hoehe-_parent._parent.detailbilder._height)/2;
        }
    };
}
on (rollOutdragOut) {
    
delete this.onEnterFrame;


http://www.projektil.org/flash/detailbilder.html

funzt schon besser. aber mit der abstandsvariante sollte es am besten funktionieren. werd mal rumprobieren.


mfg esia
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 23-12-2004, 11:01   #12 (permalink)
.
 
Benutzerbild von _kweso
 
Registriert seit: Aug 2001
Ort: wien/regensburg
Beiträge: 1.652
bei mir gehts:
glaubst, dass das zu viele oEF´s sind?
mein systemleistungsmonitor registriert
den rechenaufwand gar nicht.

anbei nochmal das fla
Angehängte Dateien
Dateityp: zip dock.zip (6,0 KB, 50x aufgerufen)
__________________
350 * youtube

für alle, die noch keinen dropbox-account haben,
aber einen wollen: http://db.tt/wZ3S1pr
bringt uns beiden +500mb, thx!
_kweso ist offline   Mit Zitat antworten
Alt 23-12-2004, 16:56   #13 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
so hab jetzt mal deine vorlage genommen, aber komplett nach meinen bedürfnissen umgeschrieben. momentan schauts so aus:

http://www.projektil.org/flash/detailbilder3.html

eigentlich super so wie ichs wollte nur, wenn man mit der mouse rüberfährt springt auf einmal die ganze navi ein stück nach oben. und dann bei mehrmahligen rüberfahren immer noch ein wenig hoch und runter.


script schaut wie folgt aus:

PHP-Code:
on (rollOverdragOver) {
    
aus 0;
    
this.onEnterFrame = function() {
        
fertig 1;
        
mehr 0;
        for (
i=1i<=6i++) {
            
mitte = eval("detailbild"+i)._width/2;
            
abstmouse Math.sqrt((eval("detailbild"+i)._xmouse-mitte)*(eval("detailbild"+i)._xmouse-mitte)+(eval("detailbild"+i)._ymouse-mitte)*(eval("detailbild"+i)._ymouse-mitte));
            if (
abstmouse>mitte*4) {
                eval(
"detailbild"+i)._xscale 100;
                eval(
"detailbild"+i)._yscale 100;
            } else {
                eval(
"detailbild"+i)._xscale 100+(mitte*4-this.abstmouse)*1.3;
                eval(
"detailbild"+i)._yscale = eval("detailbild"+i)._xscale;
            }
            eval(
"detailbild"+i)._x = (20-20*eval("detailbild"+i)._xscale/100)/2;
            eval(
"detailbild"+i)._y mehr;
            
mehr += eval("detailbild"+i)._height+5*eval("detailbild"+i)._xscale/100;
            if (eval(
"detailbild"+i)._xscale>100) {
                
fertig 0;
            }
        }
        if (
fertig == && aus == 1) {
            
delete this.onEnterFrame;
        }
    };
}
on (rollOutdragOut) {
    
aus 1;



rein theoretisch müsste es an den folgenden beiden zeilen liegen, aber ich finde den fehler nciht. vielleicht liegts auch wo anders.

PHP-Code:
eval("detailbild"+i)._y mehr;
mehr += eval("detailbild"+i)._height+5*eval("detailbild"+i)._xscale/100

hier mal die fla zum reinschauen


http://www.projektil.org/flash/detailbilder3.fla



mfg esia
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 23-12-2004, 18:27   #14 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
help pls
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 27-12-2004, 14:06   #15 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
hmm, ich wäre wirklich dankbar wenn mir jemand wieterhelfen könnte. ich finde einfach nicht den fehler, warum die komplette navigation einmal viel nach oben und dann immer noch etwas nach oben und unten springt.

mfg esia
__________________
it´s always the same, but most different
esia 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 13:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele