Avatar billede overisen Novice
01. juli 2004 - 22:32 Der er 7 kommentarer og
2 løsninger

tilfældige farver

kan man på en eller anden måde få dannet tilfældige faver i følgende script: mc.lineStyle(0,0xFFFF00,50)?
Avatar billede thulstrup Nybegynder
01. juli 2004 - 22:50 #1
Color.prototype.setRandom = function() {
    return Math.floor(Math.random()*0xFFFFFF);
};
var col = new Color(mc);
mc.lineStyle(0, col.setRandom(), 50);
Avatar billede barklund Nybegynder
01. juli 2004 - 23:14 #2
Lidt fjollet af putte den på color - synes jeg :)
Avatar billede thulstrup Nybegynder
02. juli 2004 - 08:47 #3
Er det smartere at putte den på mc'et? Så faldt jeg nemlig over den her:

MovieClip.prototype.randColor = function() {
    with (new Color(this)) {
        setRGB((Math.round(Math.random()*(255))) << 16 | (Math.round(Math.random()*(255))) << 8 | (Math.round(Math.random()*(255))));
    }
};

mc.lineStyle(0, 0xFFFF00, 50);
mc.randColor();
Avatar billede barklund Nybegynder
02. juli 2004 - 09:47 #4
Argh, mit lange svar forsvandt... hm skriver det igen lidt senere :)
Avatar billede barklund Nybegynder
03. juli 2004 - 22:32 #5
Nu gjorde jeg det sgu igen.... Argh jeg skriver snart min indlæg i Word og copy-paster det herind... senere!
Avatar billede barklund Nybegynder
04. juli 2004 - 00:57 #6
Okay, for 17. gang.

Basalt set handler det om to forskellige ting. For det første om, hvordan man laver en tilfældig farve og for det andet om, at man ikke bør "forurene" de indbyggede objekters prototyper mere end højst nødvendigt.

En farve i flash er "blot" et tal. Oftest skrives det som hexadecimal-tal, så farven bag tallet er nemmere at afkode. Den laveste farvekode er sort og er 0x0 (eller tallet 0) og den højeste er hvid og den er 0xFFFFFF (eller tallet 16.777.215). Alle andre farver har koder derimellem.

En tilfældig farve er altså i bund og grund et tilfældigt tal i dette interval. Altså kan man bare skrive:

mc.lineStyle(0, Math.floor(Math.random() * 0x1000000), 50);

Hvis man gerne vil lave det til en generel funktion, så bør man lave det som en helt almindelig funktion:

function tilfældigFarve() {
    return Math.floor(Math.random() * 0x1000000); // 0xFFFFFF+1
}
mc.lineStyle(0, tilfældigFarve(), 50);

Hvis man endelig ville lave den til en mere generel funktion, der hørte til på et af de indbyggede objekter, så ville jeg lave en generel tilfældigt-tal-mellem-a-og-b funktion og lægge den på Math-objektet:

Math.rand = function(a, b) {
    return a + Math.floor(Math.random() * (b - a + 1));
};
mc.lineStyle(0, Math.rand(0,0xFFFFFF), 50);

Denne funktion er generel og kan bruges mange steder.

Hvorimod en funktion på color-objektet som slet ikke bruges color-objektet til noget er lidt for fjollet. Og at lave en funktion på MovieClip, som for det første er alt for besværlig, er forkert og som overskriver den farve, som movieclippet ellers måtte have, er da direkte meningsløst.

Men spørg endelig, hvis du vil have noget af det uddybet. :)

--
Morten Barklund
Avatar billede barklund Nybegynder
04. juli 2004 - 00:57 #7
Wee, det virkede :)
Avatar billede overisen Novice
04. juli 2004 - 08:27 #8
Tak for de flotte svar. Det virker rigtig godt.

Søren Hansen
Avatar billede overisen Novice
11. oktober 2014 - 10:55 #9
Jeg er ved at se om jeg kan få styr på mine point. Har du fået point for svaret?
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