Avatar billede seventhsun Nybegynder
12. november 2003 - 11:26 Der er 5 kommentarer

Dynamisk generering af target path

Jeg vil gerne lave et dynamisk galleri.
Der skal være 3 billeder, som bliver vist ad gangen.
Hvilke 3 der starter med at blive vist skal kunne varieres fra gang til gang - eks med loadVariables.
Udover det skal man kunne bladre i et ukendt antal nye billeder.

Jeg har en film hvor jeg bruger attachMovie til at til sætte et movieClip ind, hvor instance navnet så bestemmer hvilket billede clippet skal vise. For nemheds skyld hedder de det samme plus et tal.

Man skal kunne bladre både forlæns og baglæns, så jeg placerer også 2 ekstra billeder på hver sin side af scenen så de er klar til at "køre" ind.

Jeg har lavet et eksempel, hvor der er 9 billeder i alt.
For at vide hvilke movieclips, der skal flyttes når man trykker "forward" sætter de 5 aktuelle MC'ers nummer ind i et Array.
Så arrayet onScreen ser sådan ud: onScreen("9", "1", "2", "3", "4")

Når man trykker på Forward starter en function, som i en for løkke flytter de fem movieClips, der er nævnt i onScreen arrayet.

Mit problem er at når jeg får bladret op til at skulle sætte movieClip9 ind på scenen, virker det pludselig ikke.
Det vil sige - attachMovie virker fint.
Men pludselig opfatter den instancenavnet som en eksisterende variabel eller lignende. I hvert fald kan jeg ikke flytte movieClippet ved at skrive targetpath dynamisk, som ellers virker med de andre.

Jeg kan se at det er sådan med de movieClips der bliver nummereret 1 - 4 og 9. Sjovt nok præcis dem der står i mit array til at beynde med.
Er der en måde hvor man kan tvinge et stykke tekst til at være en string? - eller hvad det nu er der er galt?

Her er koden i første frame af min movie:

var pic1 = "dummy.jpg";
var pic2 = "dummy.jpg";
var pic3 = "dummy.jpg";
var pic4 = "dummy.jpg";
var pic5 = "dummy.jpg";
var pic6 = "dummy.jpg";
var pic7 = "dummy.jpg";
var pic8 = "dummy.jpg";
var pic9 = "dummy.jpg";

var next = 5;
var prev = 9;

for (i=1; i<4; i++){   
    attachMovie("picHolder", ("mcPic"+i), i);
    _root["mcPic"+i]._x = ((i*148)-133);
    _root["mcPic"+i]._y = 2;
}

attachMovie("picHolder", ("mcPic"+4), 10);
_root["mcPic"+4]._x = 474;
_root["mcPic"+4]._y = 2;

attachMovie("picHolder", ("mcPic"+9), 11);
_root["mcPic"+9]._x = -146;
_root["mcPic"+9]._y = 2;

onScreen = new Array("9", "1", "2", "3", "4");

function forward() {   
  for (l=0; l<5 ;l++){
    toMove = onScreen[l];   
    _root["mcPic"+toMove]._x = (_root["mcPic"+toMove]._x)-148;
        }
    toUnload = onScreen[0];
    _root["mcPic"+toUnload].unloadMovie();
    attachMovie("picHolder", ("mcPic"+next), 10+next);
    _root["mcPic"+next]._x = 474;   
    _root["mcPic"+next]._y = 2;
    onScreen.push(next);
    onScreen.splice(0, 1);   
    if (next>=9){next=1;}
    else {next++;}
    if (prev<=1){prev=9;}
    else {prev--;}
}

Her er koden i det movieclip som jeg sætter ind med attachmovie:
var whichPic = this._name.slice(2)
loadMovie(_root[whichPic], "ins-picPlace");
Avatar billede mat Nybegynder
12. november 2003 - 11:45 #1
gir du en fla? jeg synes der er et par ting i din kode jeg ikke helt er med på?

var whichPic = this._name.slice(2)
loadMovie(_root[whichPic], "ins-picPlace");

_root[whichPic] <- hvad refererer den til, er whichPic ikke en lokal variabel i movieclippet?

"ins-picPlace" <- hvad er det? og hvorfor er der en bindestreg i navnet?


-mat
Avatar billede seventhsun Nybegynder
12. november 2003 - 12:01 #2
Jeg kan ikke lige umiddelbart give en .fla desværre.
Den indeholder hemmeligheder ;-)

whichPic er en variabel der bliver lavet lokalt hver gang der kommer ind kopi af picHolder ind.
Den tager navnet fra den instance af picHolder er blevet lavet.
med _root[whichPic] kan dynamisk lave en reference til hilket billede den skal loade ind.
Så hvis der er et movieclip der hedder mcPic5, snupper den navnet Pic5 og kigger efter den variabel i _root, som jo er dummy.jpg

ins-picPlace er et movieclip, der bestemmer hvor de ny indsatte picHolder skal placeres - det er vist ikke nødvendigt, da jeg jo flytter dem alligevel.
Bindestreg ups - men det virker alligevel
Avatar billede seventhsun Nybegynder
12. november 2003 - 13:05 #3
Så skidt da.

Jeg har lavet eksempel med .fla og .jpg der kan ses og hentes her:
http://www.floede.dk/test/
Avatar billede nikolajdu Nybegynder
12. november 2003 - 14:47 #4
Det er lidt rodet kode men du kan få det til at virke ved at fjerne movieclippet på den korrekt måde : removeMovieClip();

_root["mcPic"+toUnload].removeMovieClip();

unloadMovie() // kan ikke bruges på attachMovie

/Nikolaj
Avatar billede seventhsun Nybegynder
12. november 2003 - 17:35 #5
Jeg fandt også ud af at jeg kunne få det til at virke ved at attach'e movieclips i de samme levels som de første - som jeg i første omgang havde undgået.

Jeg troede egentlig det var en bug, men det er jo klart det ikke virker, hvis unloadMovie ikke virker.
Det underlige er så at hvis kigger på prewiev i Flash forsvinder de movieclips når man bruger unload.

Nikolaj kan du ikke skrive lidt om hvorfor koden er rodet? Jeg vil gerne blive bedre til at skrive ordentlig kode nemlig.
Så kan du også få pointene.
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