Avatar billede plastic.gangsta Nybegynder
16. februar 2005 - 16:52 Der er 18 kommentarer og
1 løsning

vedr. brug af funktioner

Hej,

Stadigvæk newbee mht. til actionscript og har nu involveret mig ind i et større projekt, og har derfor brug for lidt hjælp.

Helt generelt er vores site bygget 100% i flash, hvor det er laodet en vektor fil i baggrund som fylder 100% af skærmstørrelsen og som skaleres når brugeren ændre på sin vindues størrelse. Alt tekst/billeder osv. ligger i en hvid som er loadet ind oven på baggrundsbilledet og har en fast størrelse og bliver altså ikke skaleret. Mit spg. går gå de ting som jeg har intention om at ændre på denne hvide boks.

LAd os antage vi står på forsiden, og at i den hvide boks (hvis vi kalder den hovedboksen) er der blot en velkomst tekst og et par nyheder. Når man så trykker på et punkt i menuen skal følgende ske  (lad os sige at man trykker på 'kontakt'):

1) Der skal ligge et movieclip som i starten har alpha=0, den skal så scriptes således den går fra alpho=0 til alpha lig 100%, det skal gøres således det ser ud som at indholdet i hovedboksen fader ud. Når dette skridt er færdigt, skal den gå videre til næste skridt

2) Derefter skal hovedboksen trække sig sammen. Dette vil jeg gøre først ved at scalere den på y aksen, således den bliver ca. 1/5 af størrelsen, hvorefter den gør det samme på x aksen bagefter. Resultatet er jo så at jeg har en lille boks. Her har jeg tænkt mig at anvende easing effekterne, så det bliver en fed transition.Funktionen skal så registrere at den har nået den ønskede størrelse og hoppe videre til næste skridt.

3) Her skal der så komme så komme et preloading script, der loader kontakt oplysninger ind (den loader en ekstern .swf ind i et tomt movieclip) Funktionen skal så registrere at den har loadet undersiden 100% og gå videre til næste skridt.

4)Herefter skal boksen udvide sig igen, altså først Scale._x og derefter scale._y, så den når sin oprindelige størrelse. Når den har registeret at dette er sket, skal den udføre det sidste skridt.

5) Herefter skal movieclippet der ligger henover indholdet gå fra alpha=100% til alpha=0%, således at kontakt oplysningerne bliver tilgængeligt


Puuuha, det jeg så sidder tilbage med er en masse spg. tegn til hvordan man laver det.

Jeg har en ide om at jeg vil lave en funktion som indeholde de seks underfunktioner (1) - (6). Det essentiele er at den først skal gå videre til næste skridt, når det forudgående skridt er gennemført.

Jeg spørger ikke til hvordan man skriver hele koden, men til om det overhovedet kan lade sig gøre og hvordan man laver hovedrammen til et sådant script...

Vil sætte stor pris på hjælp.


Hilsen
/J
Avatar billede docks Nybegynder
16. februar 2005 - 17:07 #1
wow det var en mudfuld...

Jeg har hurtigt skimtet det igennem og umiddelbart ville heg dele det op i flere små funktioner. Dvs. at når hvert enkelt funktion er "færdig" så kalder den den næste i rækken...
Avatar billede plastic.gangsta Nybegynder
16. februar 2005 - 17:08 #2
kan du hjælpe med at lave en hovedstruktur, altså hvordan man går fra det ene til det andet?
Avatar billede plastic.gangsta Nybegynder
16. februar 2005 - 23:56 #3
for at gøre tingene kort - så findes det jeg præcist vil lave på denne side

http://www.elgrando.ee/
Tryk på et menu punkt, så den store boks skaleres ned, loader en film og gør sig stor igen...
Avatar billede rugre Nybegynder
17. februar 2005 - 10:22 #4
det er easy, du skal bruge setInterval functionen. f.eks

function one(){
trace("function one")
nextFunction0 = setInterval(two, 2000)
}
function two(){
trace("function two")
nextFunction1 = setInterval(three, 4000)
clearInterval(nextFunction0)
}
function three(){
trace("function three")
clearInterval(nextFunction1)
}
function one()

Sætter du dette script ind i flash, vil du først kalde funktion 1. 2 sek. efter vil function 2 blive kaldt og 4 sek. efter vil funktion 3 blive kaldt. Håber du kan se mønstret. På denne måde kan du udbygge til så mange funktioner du vil have.

Med hensyn til transition funktionen foreslår jeg at du tjekker dette link ud
http://www.actionscript.org/tutorials/advanced/Tween-Easing_Classes_Documented/index.shtml
disse tweening funktioner  er yderst nyttige og kan også bruges på alpha propertien.
Avatar billede rugre Nybegynder
17. februar 2005 - 10:23 #5
Avatar billede plastic.gangsta Nybegynder
17. februar 2005 - 15:29 #6
Hey Rune, ok, kan godt følge din hovedtanke. Problemet med at bruge setinterval funktion er vel at den ikke tager højde for brugerens båndbredde.Altså det vil ikke tage den samme tid for en bruger med 56 kbps forbindelse at loade en underside som en med en adsl og ligeledes vil en person med en større computerkraft.

Findes der andre muligheder at løse problemet...

Mht. til animation af boksen som jeg henviser til på engrando.ee er det besværligt at lave?


/Jens
Avatar billede rugre Nybegynder
17. februar 2005 - 21:02 #7
Hej jens

hvis du brugte en tweening funktion til at animere med, ved du hvor lang tid animationen er om komme fra A til B. Ergo ved du også hvornår en evt. anden tweening funktion skal starte, altså hvor langt intervallet skal være. Derfor ville jeg bruge setInteval til at kalde de forskellige tweening funktioner der animerer outroen indtil den rammer preloader funktionen, når dette sker er det klart at alle intervaller skal være clearet indtil preloaderen har loaded færdig. Når den har loaded færdig kickstarter den så en række af andre intervaller der kalder funktioner delvist som animerer introen. På denne måde sikrer du at der ikke foregår nogle animationer mens den preloader.
Avatar billede plastic.gangsta Nybegynder
17. februar 2005 - 22:00 #8
jeg har faktsik fundet en funktion som jeg mener er bedre on.functionend tror jeg den hedder og virker forbavsende godt - den eksikveres så snart den tidligere er færdig - har du nogen erfaring med den?
Avatar billede plastic.gangsta Nybegynder
17. februar 2005 - 22:30 #9
forresten dine portefølje er jo helt sindsyg - hvem har du som kunder ud over Coca Cola?

/J
Avatar billede plastic.gangsta Nybegynder
17. februar 2005 - 23:27 #10
Nå, nu begynder jeg selv at have noget, men jeg har et par små problemer med at loade en ekstern fil vha. af samme syntaks som jeg allerede bruger: Dette er hvad jeg har

import mx.transitions.Tween;
import mx.transitions.easing.*;
    var tween_handlernul:Object = new Tween(menu, "_x", Elastic.easeInOut, 100, 200, 1, true);
    var tween_handleret:Object = new Tween(meny, "_x", Elastic.easeInOut, 100, 200, 1, true);
    tween_handleret.onMotionFinished = function() {
    var tween_handlerto:Object = new Tween(menu, "_alpha", Elastic.easeInOut, 100, 0, 0.2, true);
    var tween_handlertre:Object = new Tween(meny, "_alpha", Elastic.easeInOut, 100, 0, 0.2, true);
tween_handlertre.onMotionFinished = function() {
    var tween_handler1:Object = new Tween(front, "_xscale", Elastic.easeInOut, 200, 100, 1.5, true);
    var tween_handler3:Object = new Tween(back, "_xscale", Elastic.easeInOut, 200, 100, 1.5, true);
tween_handler1.onMotionFinished = function() {
    var tween_handler2:Object = new Tween(front, "_yscale", Elastic.easeInOut, 250, 100, 1.5, true);
    var tween_handler4:Object = new Tween(back, "_yscale", Elastic.easeInOut, 250, 100, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler4.onMotionFinished = function() {
    //HER VIL JEG PRELOADE MIN .SWF
tween_handler4.onMotionFinished = function() {
    var tween_handler5:Object = new Tween(front, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);
    var tween_handler7:Object = new Tween(back, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler7.onMotionFinished = function() {
    var tween_handler6:Object = new Tween(front, "_xscale", Elastic.easeInOut, 100, 240, 1.5, true);
    var tween_handler8:Object = new Tween(back, "_xscale", Elastic.easeInOut, 100, 240, 1.5, true);
    trace("onMotionFinished triggered");
};
};
};
};
};
};

og det virker fint. Hvor jeg har skrevet //HER VIL JEG PRELOADE MIN .SWF, vil jeg prealode min ekstern underside ind. Hvordan laver man loadmovie med den syntaks som jeg har anvendt, kan man blot lave noget med var loadmovie eller hvordan?

Desuden så er overstående kode lavet sådan at den trigger så snart filmen åbner, hvordan laver jeg den så den trigger når man trykker på en knap??? Kan man evt. kalde hele overstående kode for en bestemt funktion, så når man trykker på en button kalder den funktion som indeholder alle overstående "underfunktioner"?
Avatar billede plastic.gangsta Nybegynder
18. februar 2005 - 00:06 #11
lad mig omformulere, jeg ved godt hvordan jeg skal kalde loadmovie. Det jeg er i tvivl om er, hvordan sikre jeg mig at min underfilm er 100% loadet før den går videre til næste skridt....??????????


import mx.transitions.Tween;
import mx.transitions.easing.*;
    var tween_handlernul:Object = new Tween(menu, "_x", Elastic.easeInOut, 100, 200, 1, true);
    var tween_handleret:Object = new Tween(meny, "_x", Elastic.easeInOut, 100, 200, 1, true);
    tween_handleret.onMotionFinished = function() {
    var tween_handlerto:Object = new Tween(menu, "_alpha", Elastic.easeInOut, 100, 0, 0.2, true);
    var tween_handlertre:Object = new Tween(meny, "_alpha", Elastic.easeInOut, 100, 0, 0.2, true);
tween_handlertre.onMotionFinished = function() {
    var tween_handler1:Object = new Tween(front, "_xscale", Elastic.easeInOut, 200, 100, 1.5, true);
    var tween_handler3:Object = new Tween(back, "_xscale", Elastic.easeInOut, 200, 100, 1.5, true);
tween_handler1.onMotionFinished = function() {
    var tween_handler2:Object = new Tween(front, "_yscale", Elastic.easeInOut, 250, 100, 1.5, true);
    var tween_handler4:Object = new Tween(back, "_yscale", Elastic.easeInOut, 250, 100, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler4.onMotionFinished = function() {
    loadMovie("underside.swf",_root.front.container);
//tween.onMotionFinished = function() {
    var tween_handler5:Object = new Tween(front, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);
    var tween_handler7:Object = new Tween(back, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler7.onMotionFinished = function() {
    var tween_handler6:Object = new Tween(front, "_xscale", Elastic.easeInOut, 100, 240, 1.5, true);
    var tween_handler8:Object = new Tween(back, "_xscale", Elastic.easeInOut, 100, 240, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler8.onMotionFinished = function() {
    var tween_handler6:Object = new Tween(_root.front.cover, "_alpha", Photo.easeIn, 100, 0, 2, true);
   
    trace("onMotionFinished triggered");
};
};
};
};
};
};
//};
Avatar billede barklund Nybegynder
20. februar 2005 - 12:54 #12
Kig på MovieClipLoader klassen - den har en onLoadInit, som bliver kaldt, når din underfilm er helt korrekt loaded. Så kan du først loade den i et ikke-synligt movieclip mens du viser din preloader bar, og ved onLoadInit kalder du den næste ease-funktion, og når den så er easet op i størrelse, så viser du dit indhold igen.
Avatar billede plastic.gangsta Nybegynder
23. februar 2005 - 20:22 #13
Barklund - nu har jeg erfaring med at du er super skarp til Action Script så hvis du vil hjælpe mig de sidste skridt, skal du nok få point, jeg kan også sagtens oprette et ekstra spg. hvis der er behov for flere point.

Jeg har prøvet at sætte moviecliploader ind:

import mx.transitions.Tween;
import mx.transitions.easing.*;
    var tween_handlernul:Object = new Tween(menu, "_x", Elastic.easeInOut, 100, 200, 1, true);
    var tween_handleret:Object = new Tween(meny, "_x", Elastic.easeInOut, 100, 200, 1, true);
    tween_handleret.onMotionFinished = function() {
    var tween_handlerto:Object = new Tween(menu, "_alpha", Elastic.easeInOut, 100, 0, 0.2, true);
    var tween_handlertre:Object = new Tween(meny, "_alpha", Elastic.easeInOut, 100, 0, 0.2, true);
tween_handlertre.onMotionFinished = function() {
    var tween_handler1:Object = new Tween(front, "_xscale", Elastic.easeInOut, 200, 100, 1.5, true);
    var tween_handler3:Object = new Tween(back, "_xscale", Elastic.easeInOut, 200, 100, 1.5, true);
tween_handler1.onMotionFinished = function() {
    var tween_handler2:Object = new Tween(front, "_yscale", Elastic.easeInOut, 250, 100, 1.5, true);
    var tween_handler4:Object = new Tween(back, "_yscale", Elastic.easeInOut, 250, 100, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler4.onMotionFinished = function() {
    var mcl:MovieClipLoader = new MovieClipLoader();
    var mclListener:Object = new Object();
    mcl.addListener(mclListener);
    mclListener.onLoadProgress = function(container, bl, bt)
{
    var percentage = Math.round(bl / bt * 100);
    trace("percentage");
};
mclListener.onLoadComplete = function(container)
{
    // do what you want
    trace("finished!psychomotherfucker");
};
mcl.loadClip("underside.swf", _root.front.container);

//tween.onMotionFinished = function() {
    var tween_handler5:Object = new Tween(front, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);
    var tween_handler7:Object = new Tween(back, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler7.onMotionFinished = function() {
    var tween_handler6:Object = new Tween(front, "_xscale", Elastic.easeInOut, 100, 240, 1.5, true);
    var tween_handler8:Object = new Tween(back, "_xscale", Elastic.easeInOut, 100, 240, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler8.onMotionFinished = function() {
    var tween_handler9:Object = new Tween(_root.front.cover, "_alpha", Photo.easeIn, 100, 0, 2, true);
   
trace("onMotionFinished triggered");
    tween_handler9.onMotionFinished = function() {
    var tween_handler11:Object = new Tween(menu, "_alpha", Elastic.easeInOut, 0, 100, 0.2, true);
    var tween_handler12:Object = new Tween(meny, "_alpha", Elastic.easeInOut, 0, 100, 0.2, true);
trace("onMotionFinished triggered");
tween_handler11.onMotionFinished = function() {
    var tween_handlernul:Object = new Tween(menu, "_x", Elastic.easeInOut, 200, 70, 1, true);
    var tween_handleret:Object = new Tween(meny, "_x", Elastic.easeInOut, 200, 70, 1, true);
};
};
};
};
};
};
};
};
//};


________________________________________

Jeg har dog lige de sidste ting jeg gerne vil lave.

1) Vil du mene at moviecliploader funktionen er skrevet korrekt, eller er der en bedre metode?? Mit mulige problem ligger "måske"i  at
mcl.loadClip("underside.swf", _root.front.container); kommer efter linjen
mclListener.onLoadComplete = function(container)

Så vidt jeg læser den vil det sige at den først loader filmen ind efter den er "oncomplete" men hvordan ved den så hvilken film der skal være "oncomplete" når den først kalder den vha. loadclip efter...??
2) Hvordan kan man tilføje en prealoder ? Det der sker er at min hovedboks resizer hvorefter jeg vil displaye en preloader indtil den har detectet at underside.swf er fuld loadet, og så skal den resize ud igen
3)og til sidst, hele den overstående kode ønsker jeg at kalde når man trykker på en knap i menuen... Kan man lave det sådan at når man trykker på en knap, at den kalder overstående funktioner?? Kan man lave en funktion som indeholde alle "under" funktioner som er beskrevet ovenfor???


På forhånd 1000 tak for hjælpen?


/Jens
Avatar billede plastic.gangsta Nybegynder
23. februar 2005 - 21:07 #14
mit problem så vidt jeg kan se er at den først skal begynde at skalere på  y ledet efter den har loadet underside.swf ind (denne linje: var tween_handler5:Object = new Tween(front, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);)

som koden er nu begynder den at skalere med det samme, hvordan sikre jeg at skaleringen først sker efter at den skal vræe loadet helt færdigt???
Avatar billede barklund Nybegynder
23. februar 2005 - 21:16 #15
Ret linjen:

//tween.onMotionFinished = function() {

Til:

mcl.onLoadInit = function() {

Og fjern udkommenteringen af sidste };

Så sker der nok noget :)

--
Morten Barklund
Avatar billede plastic.gangsta Nybegynder
23. februar 2005 - 21:25 #16
Det melder den fejl på - jeg har dog lige fundet en anden vej rundt som faktisk fungerer.. Kan du hjælpe mig med hvordan preloaderen dur..??? Og hvordan jeg kalder alle disse funktioner ved tryk på én knap?

/J


Kode:

import mx.transitions.Tween;
import mx.transitions.easing.*;
    var tween_handlernul:Object = new Tween(menu, "_x", Elastic.easeInOut, 100, 200, 1, true);
    var tween_handleret:Object = new Tween(meny, "_x", Elastic.easeInOut, 100, 200, 1, true);
    tween_handleret.onMotionFinished = function() {
    var tween_handlerto:Object = new Tween(menu, "_alpha", Elastic.easeInOut, 100, 0, 0.2, true);
    var tween_handlertre:Object = new Tween(meny, "_alpha", Elastic.easeInOut, 100, 0, 0.2, true);
tween_handlertre.onMotionFinished = function() {
    var tween_handler1:Object = new Tween(front, "_xscale", Elastic.easeInOut, 200, 100, 1.5, true);
    var tween_handler3:Object = new Tween(back, "_xscale", Elastic.easeInOut, 200, 100, 1.5, true);
tween_handler1.onMotionFinished = function() {
    var tween_handler2:Object = new Tween(front, "_yscale", Elastic.easeInOut, 250, 100, 1.5, true);
    var tween_handler4:Object = new Tween(back, "_yscale", Elastic.easeInOut, 250, 100, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler4.onMotionFinished = function() {
   
    _root.traceBox.vScrollPolicy ="on";
//trace function
function myTrace(msg)
{
    _root.traceBox.text += msg + newline;
    _root.traceBox.vPosition = _root.traceBox.maxVPosition;
}
/*********************************************************************/
//init
var myMCL = new MovieClipLoader();
/*********************************************************************/
//callbacks
myMCL.onLoadStart = function (targetMC)
{
  var loadProgress = myMCL.getProgress(targetMC);
  myTrace ("The movieclip " + targetMC + " has started loading");
  myTrace("Bytes loaded at start=" + loadProgress.bytesLoaded);
  myTrace("Total bytes loaded at start=" + loadProgress.bytesTotal);
  myTrace("____________________________________");
}
myMCL.onLoadProgress = function (targetMC, loadedBytes, totalBytes) {
  myTrace ("movie clip: " + targetMC);
  myTrace("Bytes loaded at progress callback=" + loadedBytes);
  myTrace("Bytes total at progress callback=" + totalBytes);
  myTrace("____________________________________");
}
myMCL.onLoadComplete = function (targetMC)
{   
    myTrace (targetMC + " has finished loading.");
    var loadProgress = myMCL.getProgress(targetMC);
    myTrace("Bytes loaded at end=" + loadProgress.bytesLoaded);
    myTrace("Bytes total at end=" + loadProgress.bytesTotal);
    myTrace("____________________________________");
}
myMCL.onLoadInit = function (targetMC)
{
    myTrace ("Movie clip:" + targetMC + " is now initialized");
    targetMC._width = 400;
    targetMC._height = 500;
    myTrace("____________________________________");
}
myMCL.onLoadError = function (targetMC, errorCode)
{
  myTrace ("ERRORCODE:" + errorCode);
  myTrace (targetMC + "Failed to load its content");
  myTrace("____________________________________");
}
/********************************************************************/
//load the files in to their respective targets
myMCL.loadClip("underside.swf","_root.container");
//myMCL.loadClip("test2.swf", "_root.myMC2");
//myMCL.loadClip("somepic.jpg", "_level0.myMC3");



//tween.onMotionFinished = function() {
    var tween_handler5:Object = new Tween(front, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);
    var tween_handler7:Object = new Tween(back, "_yscale", Elastic.easeInOut, 100, 250, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler7.onMotionFinished = function() {
    var tween_handler6:Object = new Tween(front, "_xscale", Elastic.easeInOut, 100, 240, 1.5, true);
    var tween_handler8:Object = new Tween(back, "_xscale", Elastic.easeInOut, 100, 240, 1.5, true);
    trace("onMotionFinished triggered");
tween_handler8.onMotionFinished = function() {
    var tween_handler9:Object = new Tween(_root.cover, "_alpha", Photo.easeIn, 100, 0, 2, true);
   
trace("onMotionFinished triggered");
    tween_handler9.onMotionFinished = function() {
    var tween_handler11:Object = new Tween(menu, "_alpha", Elastic.easeInOut, 0, 100, 0.2, true);
    var tween_handler12:Object = new Tween(meny, "_alpha", Elastic.easeInOut, 0, 100, 0.2, true);
trace("onMotionFinished triggered");
tween_handler11.onMotionFinished = function() {
    var tween_handlernul:Object = new Tween(menu, "_x", Elastic.easeInOut, 200, 70, 1, true);
    var tween_handleret:Object = new Tween(meny, "_x", Elastic.easeInOut, 200, 70, 1, true);
};
};
};
};
};
};
};
};
//};
Avatar billede barklund Nybegynder
23. februar 2005 - 21:31 #17
Punkt 1: Det er superrodet.

Punkt 2: Hvad skal jeg helt præcist hjælpe med?<
Avatar billede plastic.gangsta Nybegynder
23. februar 2005 - 21:36 #18
1( Ja, det gir jeg ret i, men er desværre ikke ret skarp til AS så derfor har jeg ikke så meget struktur endnu.

Det jeg godt kunne tænke mig var at mens den loader underfilmen ind underside.swf at den så viser en prealoder. Enten bare et stykke grafik der viser loader eller et almindeligt load script??? Skal jeg evt. sende .fla filen?
Avatar billede plastic.gangsta Nybegynder
20. marts 2005 - 23:55 #19
lukker
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