Avatar billede eltempogigante Nybegynder
02. februar 2006 - 13:14 Der er 23 kommentarer

Hvordan bruger man Currentframe rigtig?

Jeg vil gerne lave et system hvor man klikker på noget og det valgte så "flyver" frem, hvis man så klikker på noget andet skal det første flyve tilbage og det nye flyve frem! Ret enkelt, men jeg kan ikke få min kode til at virke. Hvad er der galt?

A.onRelease = function() { A.gotoAndPlay("_on");
if (B._currentframe = 30) { B.gotoAndPlay("_off");
}
if (C._currentframe = 30) { C.gotoAndPlay("_off");
}
}
Avatar billede jakwag Nybegynder
02. februar 2006 - 13:16 #1
Du skal have 2 ==

A.onRelease = function() { A.gotoAndPlay("_on");
if (B._currentframe == 30) { B.gotoAndPlay("_off");
}
if (C._currentframe == 30) { C.gotoAndPlay("_off");
}
}

: ) Jakob
Avatar billede eltempogigante Nybegynder
02. februar 2006 - 13:17 #2
Problemet er at den bare afspiller betingelsen uden at den er opfyldt, men hvordan får jeg den til at gøre det rigtig?

Den skal så at sige tjekke om "B" eller "C" står på en bestemt frame, hvis de gør det skal de afspilles ved punktet "_off".
Avatar billede eltempogigante Nybegynder
02. februar 2006 - 13:18 #3
Super det virker perfekt nu! Det er bare min syntaks der skal forbedres he he! Smider du lige et svar? Tak
Avatar billede jakwag Nybegynder
02. februar 2006 - 13:19 #4
jeg må desværre sige at jeg purre nægter at tage 200 af dine point for det svar.

Behold dem selv denne gang, så gir du en i lufthavnen ;)
Avatar billede eltempogigante Nybegynder
02. februar 2006 - 13:20 #5
Lige en hurtig tilføjelse - hvad nu hvis det skal være et bestemt label? og hvad nu hvis man kommer til at trykke inden betingelsen er mødt?
Avatar billede eltempogigante Nybegynder
02. februar 2006 - 13:21 #6
Hvis man klikker for hurtigt "flyver" to afsted / bliver to emner aktive på en gang?
Avatar billede jakwag Nybegynder
02. februar 2006 - 13:22 #7
Brug >= er større end eller lige med. Frame label, det ved jeg ikke. Det kan man vist ikke rigtig i dette tilfælde.

A.onRelease = function() { A.gotoAndPlay("_on");
if (B._currentframe >= 30) { B.gotoAndPlay("_off");
}
if (C._currentframe >= 30) { C.gotoAndPlay("_off");
}
}
Avatar billede jakwag Nybegynder
02. februar 2006 - 13:27 #8
hhmm.. så skal de 2 andre vel flyve tilbage uanset hvad de er nået til.

A.onRelease = function() {
A.gotoAndPlay("_on");
B.gotoAndPlay("_off");
C.gotoAndPlay("_off");
}

Men så kommer de til at hoppe lidt. Hvis man skrev det hele inkl animationen i as kunne man forhindre det, men det er min fornemmelse at det er lidt over dit niveau.
Avatar billede jakwag Nybegynder
02. februar 2006 - 13:41 #9
... men nu gjorde jeg det så lige aligevel.:

1. du skal bruge de tre mc A B og C

2. De skal have instance navnet A B og C

3. De skal ikke animeres i temelinen på nogen måde

4. Lav et tomt lag og kald det for as

5. i en frame i det lag sætter du følgende kode ind:

A.frem = B.frem = C.frem = function ()
{
    this.onEnterFrame = function()
    {
        this._x += 10;
        if (this._x >= 150)
        {
            this._x = 150;
            delete this.onEnterFrame;
        }
    };
};
A.tilbage = B.tilbage = C.tilbage = function ()
{
    this.onEnterFrame = function()
    {
        this._x -= 10;
        if (this._x <= 0)
        {
            this._x = 0;
            delete this.onEnterFrame;
        }
    };
};
A.onRelease = function()
{
    A.frem();
    B.tilbage();
    C.tilbage();
}
B.onRelease = function()
{
    A.tilbage();
    B.frem();
    C.tilbage();
}
C.onRelease = function()
{
    A.tilbage();
    B.tilbage();
    C.frem();
}

Badabim badabom!
Avatar billede eltempogigante Nybegynder
02. februar 2006 - 13:59 #10
wow takker, men mit system er godt nok baseret på at bevægelserne accelereres, er det også muligt via actionscript?
Avatar billede jakwag Nybegynder
02. februar 2006 - 14:11 #11
f.eks.:

var out = 150;
var home = 0;
var easeType = mx.transitions.easing.Regular.easeIn;
A.frem = B.frem = C.frem = function ()
{
    tween = new mx.transitions.Tween(this, "_x", easeType, this._x, out, 1, true);
};
A.tilbage = B.tilbage = C.tilbage = function ()
{
    tween = new mx.transitions.Tween(this, "_x", easeType, this._x, home, 1, true);
};
A.onRelease = function()
{
    A.frem();
    B.tilbage();
    C.tilbage();
}
B.onRelease = function()
{
    A.tilbage();
    B.frem();
    C.tilbage();
}
C.onRelease = function()
{
    A.tilbage();
    B.tilbage();
    C.frem();
}
Avatar billede jakwag Nybegynder
02. februar 2006 - 14:15 #12
prøv at erstatte Regular i denne linie:

var easeType = mx.transitions.easing.Regular.easeIn;

med enten:

Strong
Back
Elastic
Regular
Bounce

eller easeIn med enten:

easeIn
easeOut
easeInOut

Så skal du se løjer... ;)
Avatar billede jakwag Nybegynder
02. februar 2006 - 14:15 #13
hov, det virker forresten kun i flash mx 2004 eller højere
Avatar billede eltempogigante Nybegynder
02. februar 2006 - 14:36 #14
ok takker!
Avatar billede eltempogigante Nybegynder
03. februar 2006 - 11:52 #15
Hvis nu jeg gerne ville holde fast i den animerede udgave via timelinen (fordi der er mange flere elementer der skal animeres frem på forskellige måde via afmaskning osv.), kan man så forsinke indflyvningen af den nye animation, således at den gamle lige flyver tilbage først inden den nye flyver afsted?

Jeg har forsøgt med denne kode men den virker ikke:

A.onRelease = function() {

if (B._currentframe != 1) { B.gotoAndPlay("_off"); A.gotoAndPlay(5);
}
if (C._currentframe != 1) { C.gotoAndPlay("_off"); A.gotoAndPlay(5);
}
else { A.gotoAndPlay("_on");
}
}

B.onRelease = function() {
if (A._currentframe != 1) { A.gotoAndPlay("_off"); B.gotoAndPlay(5);
}
if (C._currentframe != 1) { C.gotoAndPlay("_off"); B.gotoAndPlay(5);
}
else { B.gotoAndPlay("_on");
}
}

C.onRelease = function() {
if (A._currentframe != 1) { A.gotoAndPlay("_off"); C.gotoAndPlay(5);
}
if (B._currentframe != 1) { B.gotoAndPlay("_off"); C.gotoAndPlay(5);
}
else { C.gotoAndPlay("_on");
}
}

Eller rettere den virker kun delvis - den virker når man skifter mellem den orange og grunne firkant, men lige så snart man bruger den blå sker animationen på samme tid.

Her er er link til filen: http://web.gvdnet.dk/GVD003144/test.swf

Og her er hvis det hjælper flash-kildefilen: http://web.gvdnet.dk/GVD003144/test.fla.zip
Avatar billede jakwag Nybegynder
03. februar 2006 - 14:35 #16
A.onRelease = function()
{
    if (B._currentframe != 1)
    {
        B.gotoAndPlay("_off");
        A.gotoAndPlay(5);
    }
    else if (C._currentframe != 1)
    {
        C.gotoAndPlay("_off");
        A.gotoAndPlay(5);
    }
    else
    {
        A.gotoAndPlay("_on");
    }
};
B.onRelease = function()
{
    if (A._currentframe != 1)
    {
        A.gotoAndPlay("_off");
        B.gotoAndPlay(1);
    }else if (C._currentframe != 1)
    {
        C.gotoAndPlay("_off");
        B.gotoAndPlay(5);
    }
    else
    {
        B.gotoAndPlay("_on");
    }
};
C.onRelease = function()
{
    if (A._currentframe != 1)
    {
        A.gotoAndPlay("_off");
        C.gotoAndPlay(5);
    }else if (B._currentframe != 1)
    {
        B.gotoAndPlay("_off");
        C.gotoAndPlay(5);
    }
    else
    {
        C.gotoAndPlay("_on");
    }
};
du skal bruge else if, da den kun skal gøre det der står i else hvis den ikke gør nogen af de to overstående ting.
Avatar billede jakwag Nybegynder
03. februar 2006 - 14:40 #17
... meen hvis man ønskede at gøre det lidt enklere og nemmere at lave rettelser i kunne man også:

var selected = null;
function klik()
{
    if (selected != null)
    {
        this.gotoAndPlay(5);
        selected.gotoAndPlay("_off");
        selected = this;
    }
    else
    {
        this.gotoAndPlay("_on");
        selected = this;
    }
};
A.onRelease = klik;
B.onRelease = klik;
C.onRelease = klik;
Avatar billede eltempogigante Nybegynder
03. februar 2006 - 16:40 #18
Ok tak jeg har forsøgt mig med "if, else if, else"-fremgangen tidligere men den restulterer i at det er muligt at aktivere flere emner ad gangen.

Men den mere optimerede/abstrakte udgave af koden som du har skrivet virker tilsyneladende. Mange tak!

Men hvad nu hvis jeg gerne vil lave animationer uafhængigt af de karvede knapper, så der godt nok kunne være tale om samme slags animation, bare med en "uafhængig" menu der ikke selv flyver afsted?
Avatar billede jakwag Nybegynder
05. februar 2006 - 15:33 #19
øhm.. forstår ikke rigtig det sidste du skriver... :)
Avatar billede eltempogigante Nybegynder
06. februar 2006 - 18:37 #20
he he ok nu jeg læser mit indlæg kan jeg godt se at det virker lidt kryptisk. Det jeg mener er: hvordan kan jeg lave det om således at det ikke er direkte på de farvede kasser at man skal trykke, men i stedet for på en menu, der ikke selv er en del af animationen?
Avatar billede jakwag Nybegynder
07. februar 2006 - 10:18 #21
Så lad os sige du har tre knapper der hedder d,e,f.

var selected = null;
function klik(mc)
{
    if (selected != null)
    {
        mc.gotoAndPlay(5);
        selected.gotoAndPlay("_off");
        selected = mc;
    }
    else
    {
        mc.gotoAndPlay("_on");
        selected = mc;
    }
};
d.onRelease = function()
{
klik(A);
}
e.onRelease = function()
{
klik(B);
}
f.onRelease = function()
{
klik(C);
}

Jeg har ikke testet det, så sig hvis det ikke virker..

: )
Avatar billede eltempogigante Nybegynder
07. februar 2006 - 16:34 #22
super mange tak, men hvis man kommer til at klikke på fx "d" mens "A" er "tændt" så flyver "A" tilbage hvorefter den ikke kan bringes frem igen ved et tryk på "d" uden at man så trykker på en af de andre først. Det samme er selvfølgelig gældende for "e" og "f". Og hvad nu hvis jeg gerne vil have "A" tændt fra starten af?
Avatar billede eltempogigante Nybegynder
18. februar 2006 - 01:24 #23
Jeg fandt for resten en tweening class fra http://laco.wz.cz/tween/ som er genial. Den er meget bedre en den indbyggede i Flash, og har desuden mulighed for callback og delay.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester