Avatar billede hehlers Nybegynder
17. januar 2006 - 09:54 Der er 37 kommentarer og
1 løsning

Dynamiske og tilfældige billeder i flashfilm.

Hejsa

Jeg skal have lavet en flashfilm som en alm. person uden flashforstand skal kunne holde vedlige.

Jeg har følgende flashfilm:

http://www.oneweb.dk/smws/work/flash_test.swf

Denne flash er dog ikke dynamisk. Jeg vil gerne have det således at filmen selv fader imellem en række tilfældige jpg billeder fra en given mappe.

Kan det overhovedet lade sig gøre?

På forhånd tak

Henrik
Avatar billede _k Nybegynder
18. januar 2006 - 09:21 #1
Naturligvis. Den smarteste løsning vil nok være at lave et asp/php script som kan læse indholdet af en mappe (måske endda kun billedfiler?). Når det er på plads, kan du kalde asp/php-siden med f.eks. LoadVars objektet og hente alle dine billednavne ind. Du vil måske lave noget random-halløj i Flash, men ellers handler det bare om at du udskifter kaldet på dine nuværende loadMovie (hvis du da allerede kalder billederne dynamisk?)

Det mest tricky i ovenstående procedure er at få asp/php-siden formateret korrekt, så Flash kan læse variablene når de er hentet.
Avatar billede hehlers Nybegynder
18. januar 2006 - 09:43 #2
Hej k

Er ikke sikker på jeg helt er med. Jeg kan sagtens lave en ASP side som vælger et tilfældigt billede fra en mappe. Spørgsmålet bliver bare at få det ind i flash og derefter eks. hver 10 sekund vælge et nyt tilfældigt billede fra mappen - og samtidig få det til at fade ind i det andet...
Avatar billede _k Nybegynder
18. januar 2006 - 09:54 #3
Det var ikke lige sådan jeg havde tænkt mig det. Medmindre du har hundredevis af billeder i mappen, hvorfor så ikke hente alle navne på en gang?
Når navnene er hentet, kan du efterfølgende lave din logik, som kan laves på et utal af forskellige måder. Jeg ville nok vælge den 100% AS-metode. Jeg tænker noget i retning af:

1: lav 2 mc'er og læg dem ovenpå hinanden
2: load et billede ind hvert
3: brug setInterval til at eksekvere en udtoningsfunktion efter et givent antal sek
(udtoningsfunktionen skal være baseret på alpha)
4: byt om på billederne med swapDepths() når det øverste billede er helt gennemsigtigt
5: ton det næste billede ud
6 forstsæt proceduren så længe du ønsker

..har ikke tid til at lave det til dig. Men gå igang og kom med hvad du har, så hjælper jeg gerne til ;o)
Avatar billede hehlers Nybegynder
18. januar 2006 - 10:06 #4
hehe, desværre er jeg vist ikke så ferm til flash... ;)

1. Jeg laver to mc'r som ligger ovenpå hinanden. Å langt er jeg med... :)
2. Når jeg skal loade et billede ind, - der skal jeg vel loade ASP filen eller?
3. Hvor finder jeg setinterval?
4. og swapdepths?

Håber ikke jeg afskrækker dig for meget... :)
Avatar billede _k Nybegynder
18. januar 2006 - 10:43 #5
Du bør nok starte med at hente asp-variablene ind og randomize dem først. Eksekveringsrækkefølgen bliver så at du laver al "logikken" bagefter - altså når al data (filnavne) ligger parat.

Det er fint nok at dine mc'er ligger på stagen fra start. Det er lidt mere håndgribeligt fremfor at skabe dem med kode.

Skulle jeg være fræk, kunne jeg sige at "setInterval" og "swapDepths" begge er forklaret bedre i hjælpen til Flash end jeg nogensinde kommer til.
setInterval er en anelse konceptuelt kompleks, hvorimod swapDepths er ret ligetil. swapDepths flytter rundt på højden af mc'er og kan lade dem bytte plads med hinanden. Du skal sikkert bare skrive:
mc1.swapDepths(mc2);

Din setInterval bliver noget i retning af:
interval = setInterval(navnetPåDinFunktion, 1000); // 1000 ms = 1 sek

..prøv at hente data ind og lad os tage den derfra - smid gerne den kode du bikser sammen
Avatar billede hehlers Nybegynder
18. januar 2006 - 10:48 #6
Skal jeg randomize i ASP, eller er det noget jeg skal gøre i mit actionscript?
Avatar billede _k Nybegynder
18. januar 2006 - 10:59 #7
Det er helt op til dig ;o)
Avatar billede hehlers Nybegynder
18. januar 2006 - 11:24 #8
hehe oki...

Nu har jeg lavet en ASP fil som viser et tilfældigt billede fra en given mappe.

Koden ser således ud:
-----------------------------
<%
Const IMGS_DIR = "image/referencer/upload/"
Dim objFSO, objFolderObject, objFileCollection, objFile

Dim intFileNumberToUse, intFileLooper
Dim strImageSrcText

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFolderObject = objFSO.GetFolder(Server.MapPath(IMGS_DIR))
Set objFSO = Nothing

Set objFileCollection = objFolderObject.Files
Set objFolderObject = Nothing

Randomize
intFileNumberToUse = Int(objFileCollection.Count * Rnd) + 1

intFileLooper = 1
For Each objFile in objFileCollection
    If intFileLooper = intFileNumberToUse Then
        Set objImageFileToUse = objFile
        Exit For
    End If
    intFileLooper = intFileLooper + 1
Next

Set objFileCollection = Nothing

strImageSrcText = IMGS_DIR & objImageFileToUse.Name

Set objImageFileToUse = Nothing

%>

<img src="<%= strImageSrcText %>" width="790" height="380" border="0">
------------------------------------------------

Skal jeg så, i første omgang" lave de to MC'r også indlæse ASP filen i hver af dem med "LoadVars"
Avatar billede _k Nybegynder
18. januar 2006 - 11:38 #9
Nu er det lige at din asp ikke skal outputte et billede, men en eller flere billednavne. Selv ville jeg foretrække alle billednavne komma-separeret, så de kunnne stryges direkte ind i et array i Flash.
Først bagefter loader du billederne ind i hvert deres mc med loadMovie.
Avatar billede hehlers Nybegynder
18. januar 2006 - 11:44 #10
Oki, også er jeg så sprunget fra igen... :)
Hvordan pokker laver man det?
Avatar billede _k Nybegynder
18. januar 2006 - 12:09 #11
Hvilken del af det? ASP'en har du vel fint styr på?

Har du fået LoadVars til at virke, så der rent faktisk kommer noget ind i Flash?
Avatar billede hehlers Nybegynder
18. januar 2006 - 13:35 #12
hehe, nej k, - så langt er jeg slet ikke kommet. Mine evner indenfor flash sammen med ASP er meget begrænsede. Har faktisk aldrig rigtigt leget ordentligt med actionscript - og slet ikke at kode ASP sammen med flash. Så kan godt ske vi skal ned på et lidt andet niveau... ;)

Jeg har nu min ASP fil som udskriver billederne kommasepareret.
-----------------------
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(Server.MapPath("image/referencer/upload/"))

    Set FolderFiles = Folder.Files
    'response.write "der er bytes i mappen:" & folder.size & ".<br>"
    For Each File In FolderFiles
        If inStr(File,".jpg") or inStr(file,".gif") Then
        strBilleder = File.Name & ","
        End If
    Next
----------------------------

Så opretter jeg mine MC'r? også laver en loadMovie("minaspfil") på dem eller?
Avatar billede _k Nybegynder
18. januar 2006 - 14:54 #13
Ok, så tager vi den da bare lidt fra toppen ;)

Du skal være helt sikker på at din asp outputter lige præcis det her når den kører:

&billeder=billede1.jpg,billede2.jpg,billede3.jpg,billede4.jpg&

..og ABSOLUT ikke andet - hverken <body>, <html> eller andre tags!

Når den gør det, kan du hente den ind i Flash med LoadVars (læg koden på en frame på main timeline):

var billeLoadVars:LoadVars = new LoadVars();
billeLoadVars.onLoad = function(success) {
  if(success) {
    trace("MineBilleder: " + this.billeder);
  }
  else {
    trace("kan ikke finde asp-filen :(");
  }
}
billedLoadVars.load("http://www.whereever.com/whatever.asp");

... og så skulle du gerne få en lille liste over alle dine billeder i output viduet når du tester fra Flash.
Avatar billede hehlers Nybegynder
18. januar 2006 - 15:06 #14
Uha, der komemr desværre ikke noget frem, hvilket jo godt kunne tyde på at mit output er forkert?

http://www.oneweb.dk/smws/random_image2.asp

Min swf fil ligger her:
http://www.oneweb.dk/smws/work/randomimage.swf
Avatar billede _k Nybegynder
18. januar 2006 - 15:16 #15
Jeg skal da bare lære at skrive alle karaktererne med i variabelnavneme :)

var billedLoadVars:LoadVars = new LoadVars();
billedLoadVars.onLoad = function(success) {
  if(success) {
    trace("MineBilleder: " + this.billeder);
  }
  else {
    trace("kan ikke finde asp-filen :(");
  }
}
billedLoadVars.load("http://www.whereever.com/whatever.asp");

...synes så godt nok ikke din liste er voldsomt random, men det er jo en feature man altid kan pudse lidt af på senere ;)

Prøv igen...
Avatar billede hehlers Nybegynder
18. januar 2006 - 15:24 #16
Der sker desværre stadig ingenting...
http://www.oneweb.dk/smws/work/randomimage.swf

Mit actionscript ser sådan her ud:
------------------------------
var billedLoadVars:LoadVars = new LoadVars();
billedLoadVars.onLoad = function(success) {
  if(success) {
    trace("MineBilleder: " + this.billeder);
  }
  else {
    trace("kan ikke finde asp-filen :(");
  }
}
billedLoadVars.load("http://www.oneweb.dk/smws/random_image2.asp");
-------------------------------------
Og mit ASP udtræk sådan her:

-------------------------------------
<%
if request.querystring("mode") = "" then
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(Server.MapPath("image/referencer/upload/"))

    Set FolderFiles = Folder.Files
    response.write "&billeder="
    For Each File In FolderFiles
        If inStr(File,".jpg") or inStr(file,".gif") Then
        Response.Write File.Name & ","
        End If
    Next
    response.write "&"
Else

end if
%>
---------------------------

Er det helt galt?

PS. Tak for din venlighed og ikke mindst tålmodighed...
Avatar billede _k Nybegynder
18. januar 2006 - 15:54 #17
Du skulle gerne i dit output-vindue i Flash kunne læse et eller andet - om ikke andet, så at der ikke er hul igennem. Output-vinduet er et selvstændigt vindue der fortæller om alle de fejl der er i din swf. Der skal IKKE vises noget i selve filmen endnu - det har vi ikke fortalt den noget om ..... endnu....
Avatar billede hehlers Nybegynder
18. januar 2006 - 15:57 #18
Desværre kan jeg slet ikke læse noget som helst... Har på fornemmelsen at det har noget med outputtet fra ASP at gøre.
Avatar billede _k Nybegynder
18. januar 2006 - 16:04 #19
Hos mig virker det upåklageligt, så begynder at mistænke din version af Flash. Hviken udgave sidder du med?
Avatar billede hehlers Nybegynder
19. januar 2006 - 08:54 #20
Jeg sidder med en alm. Flash MX.

Mit ASP output ser således ud: &billeder=1.jpg,2.jpg,3.jpg,&
Kan det have noget med det sidste komma (,) at gøre?
Avatar billede _k Nybegynder
19. januar 2006 - 09:19 #21
Det er fordi jeg har fået en god vane med at fortælle mine variable hvad de er. Det er en ActionScript 2.0 ting, og noget MX ikke fatter en brik af. Prøv med:

billedLoadVars = new LoadVars();
billedLoadVars.onLoad = function(success) {
  if(success) {
    trace("MineBilleder: " + this.billeder);
  }
  else {
    trace("kan ikke finde asp-filen :(");
  }
}
billedLoadVars.load("http://www.oneweb.dk/smws/random_image2.asp");
Avatar billede hehlers Nybegynder
19. januar 2006 - 09:22 #22
weeee ;) Nu får jeg outputtet: "MineBilleder: 1.jpg,2.jpg,3.jpg,"
Avatar billede _k Nybegynder
21. januar 2006 - 11:22 #23
Har lige kigget lidt på det og brygget det her sammen. Du skal have 2 mc'er på stagen der hedder "mc1" og "mc2". Du kan også ændre deres navne i mcArray.
Skulle det være helt perfekt, ville jeg nok selv smide en lille preloader på, der tjekkede om billedet rent faktisk ER hentet før det ovenliggende fader, men det må blive en anden god gang. Så længe dine billeder ikke er vildt store og den tid der går imellem de loades ikke er for kort, burde det køre fint i 99,9% af alle tilfælde.

var billedLoadVars:LoadVars = new LoadVars();
var billedArray = new Array();
billedLoadVars.onLoad = function(success) {
    if (success) {
        makeArray(this.billeder);
    } else {
        trace("kan ikke finde asp-filen :(");
    }
};
billedLoadVars.load("http://www.oneweb.dk/smws/random_image2.asp");

var current_mc_num = 0; // Hvilken mc holder vi styr på nu?
var current_pic_num;
var mcArray = new Array(this["mc1"], this["mc2"]); // De mc'er på stagen der skal loades ind i
var interval; // Holder styr på det aktuelle interval
var duration = 2000;

// Hvor mange millisekunder inden næste skift?
// Tager den kommaseparerede streng fra php'en
// og splitter den op
function makeArray(s) {
    billedArray = s.split(",");
    current_mc = this["mc1"];
    loadPicture(mcArray[0], billedArray[0]);
    loadPicture(mcArray[1], billedArray[1]);
    current_pic_num = 1;
    delay();
}
// Viser et billede i et mc
// @mc            navnet på det mc der skal loades et billede ind i
// @billede        navnet på billedet der hentes ind
function loadPicture(mc, billede) {
    mc._alpha = 100;
    mc.loadMovie("billeder/"+billede);
}
// Holder styr på hvornår vi skifter over til næste mc
function delay() {
    interval = setInterval(fade, duration);
}
// Fader det aktuelle billede
function fade() {
    clearInterval(interval);
    var counter = 0;
    mcArray[current_mc_num].onEnterFrame = function() {
        if (mcArray[current_mc_num]._alpha>0) {
            mcArray[current_mc_num]._alpha -= counter;
        } else {
            mcArray[0].swapDepths(mcArray[1]);
            if (current_pic_num<mcArray.length) {
                current_pic_num++;
            } else {
                current_pic_num = 0;
            }
            loadPicture(mcArray[current_mc_num], billedArray[current_pic_num]);
            current_mc_num = find_current_num();
            delay();
            delete mcArray[find_current_num()].onEnterFrame;
        }
        counter++;
    };
}
// Holder styr på hvilket mc vi har gang i lige nu
function find_current_num() {
    if (current_mc_num == 0) {
        return 1;
    } else {
        return 0;
    }
}
Avatar billede hehlers Nybegynder
23. januar 2006 - 10:01 #24
Har nu prøvet det af, - desværre uden held. Jeg får slet ikke noget billede ud.
http://www.oneweb.dk/smws/image/main_image.swf

Jeg har oprettet 2 movieclips - i hver sit lag og kaldt dem henholdsvis mc1 og mc2. Jeg har givet dem samme instance names.

Min kode ser således ud:
-----------------
var billedLoadVars:LoadVars = new LoadVars();
var billedArray = new Array();
billedLoadVars.onLoad = function(success) {
    if (success) {
        makeArray(this.billeder);
    } else {
        trace("kan ikke finde asp-filen :(");
    }
};
billedLoadVars.load("http://www.oneweb.dk/smws/random_image2.asp");

var current_mc_num = 0; // Hvilken mc holder vi styr på nu?
var current_pic_num;
var mcArray = new Array(this["mc1"], this["mc2"]); // De mc'er på stagen der skal loades ind i
var interval; // Holder styr på det aktuelle interval
var duration = 2000;

// Hvor mange millisekunder inden næste skift?
// Tager den kommaseparerede streng fra php'en
// og splitter den op
function makeArray(s) {
    billedArray = s.split(",");
    current_mc = this["mc1"];
    loadPicture(mcArray[0], billedArray[0]);
    loadPicture(mcArray[1], billedArray[1]);
    current_pic_num = 1;
    delay();
}
// Viser et billede i et mc
// @mc            navnet på det mc der skal loades et billede ind i
// @billede        navnet på billedet der hentes ind
function loadPicture(mc, billede) {
    mc._alpha = 100;
    mc.loadMovie("upload/referencer/forsiden/"+billede);
}
// Holder styr på hvornår vi skifter over til næste mc
function delay() {
    interval = setInterval(fade, duration);
}
// Fader det aktuelle billede
function fade() {
    clearInterval(interval);
    var counter = 0;
    mcArray[current_mc_num].onEnterFrame = function() {
        if (mcArray[current_mc_num]._alpha>0) {
            mcArray[current_mc_num]._alpha -= counter;
        } else {
            mcArray[0].swapDepths(mcArray[1]);
            if (current_pic_num<mcArray.length) {
                current_pic_num++;
            } else {
                current_pic_num = 0;
            }
            loadPicture(mcArray[current_mc_num], billedArray[current_pic_num]);
            current_mc_num = find_current_num();
            delay();
            delete mcArray[find_current_num()].onEnterFrame;
        }
        counter++;
    };
}
// Holder styr på hvilket mc vi har gang i lige nu
function find_current_num() {
    if (current_mc_num == 0) {
        return 1;
    } else {
        return 0;
    }
}
---------------------
Hvad pokker gør jeg galt? ;)

fla filen kan hentes her:
http://www.oneweb.dk/smws/work/randomimage.fla
Avatar billede _k Nybegynder
23. januar 2006 - 10:22 #25
Det kan være stien til dine billeder den er gal med? Er du sikker på at du rammer rigtigt? Du kan evt. teste i Flash med en trace-kommando som du sætter ind i loadPicture():

trace("Stien til billeder: upload/referencer/forsiden/"+billede);

Kopierer du denne sti ud, skal du kunne tilgå den fra en browser. Bemærk forresten at har du din hjemmeside på en Linux-maskine, er den med stor sandsynlighed case-sensitiv, så det der står i din asp-fil SKAL svare til det billedet rent faktisk hedder.
Avatar billede hehlers Nybegynder
23. januar 2006 - 15:58 #26
Serveren er en windowsmaskine. Synes desværre jeg bare får en hvid skærm uden noget indhold...

Den ligger her:

http://www.oneweb.dk/smws/image/randomimage.swf

Skal scriptet ikke se således ud?

function loadPicture(mc, billede) {
    mc._alpha = 100;
    trace("upload/referencer/forsiden/"+billede);
    mc.loadMovie("upload/referencer/forsiden/"+billede);
Avatar billede _k Nybegynder
24. januar 2006 - 09:30 #27
Øverste linje: var billedLoadVars:LoadVars = new LoadVars();

erstat den med:
var billedLoadVars = new LoadVars();

...og så vil jeg anbefale dig at opgradere til Flash 8 - om ikke andet så fordi man lige skal "spole" tilbage når man hjælper i tidligere versioner ;o)
Avatar billede hehlers Nybegynder
24. januar 2006 - 09:45 #28
Tak k ;)

Nu bliver de hentet ind. Der var en fejl i stien.

Nu mangler jeg bare at få dem til at fade - også at de bliver hentet ind i midten af mit mc.
lige nu bliver de hentet ind således, at venstre top af billedet er placeret i midten af selve flash-filmen.

Mht. til flash 8, så må jeg lige skubbe lidt til chefen.. ;)
Avatar billede hehlers Nybegynder
24. januar 2006 - 09:49 #29
Avatar billede _k Nybegynder
24. januar 2006 - 10:43 #30
Hvad er den nøjagtige sti til et af dine billeder?

..og du kan få en 30 dags gratis trial af 8'eren. Og opgradering er betydeligt billigere end at købe en ny version.
Avatar billede hehlers Nybegynder
24. januar 2006 - 10:47 #31
Avatar billede _k Nybegynder
24. januar 2006 - 10:57 #32
Byt om på lag "1" og "2".

Og mht. at centrere billederne, vinder du en hel del ved at lave din billeder lige store. Jo, naturligvis kan det godt lade sig gøre at beregne deres størrelser og placere dem derefter, men det rækker ud over hvad jeg har tid til - kig evt. selv på det ;)
Avatar billede hehlers Nybegynder
24. januar 2006 - 11:12 #33
TAK K!!!!!

Det virker perfekt!

Svarer du lige.

Har desuden lavet et ekstra spørgsmål til dig. Synes du skal have flere point for den store indsats!

TAK!

http://www.eksperten.dk/spm/682219
Avatar billede _k Nybegynder
24. januar 2006 - 11:17 #34
Ok, her er et svar. Og held og lykke med at få det hele til at fungere. Kigger da nok lige forbi Jeres hjemmeside ved lejlighed ;o)
Avatar billede hehlers Nybegynder
24. januar 2006 - 11:21 #35
Dog lige en enkelt ting...

Hvis du ser på: http://www.oneweb.dk/smws/

Så er der en sort kant til højre, hvilket er baggrundsfarven på min flashfilm. Kan bar ikk rigtigt forstå, hvorfor den kommer. Billederne er nemlig lavet præcis samme størrelse som min flashfilm.
Avatar billede hehlers Nybegynder
24. januar 2006 - 11:37 #36
Har fundet ud af det... ;)
Avatar billede _k Nybegynder
24. januar 2006 - 11:59 #37
Nice. Takker for pointene.
Avatar billede hehlers Nybegynder
24. januar 2006 - 12:36 #38
mig der takker... ;)
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