Avatar billede gantz Nybegynder
16. juli 2003 - 19:07 Der er 21 kommentarer og
1 løsning

spiral vha. actionscript

Hej med jer,
jeg skal bruge et actionscript der tegner en spiral der roterer. Det skal være muligt at definere farverne i spiralen (3 farver) via actionscriptet. Da jeg ikke er en haj til matematiske formler vil jeg gerne have lidt hjælp.
Avatar billede mat Nybegynder
16. juli 2003 - 21:38 #1
hehe, ok den her er ret grim, men det er en spiral:

lav en lille cirkel med fill, konverter den til et movieclip, giv den instancenavnet "master" (uden ""), og smid det her på det:

onClipEvent (load) {
    if (this._name == "master") {
        radius = 50;
        perspective = 150;
        degrees = 0;
        y = this._y
        center = 300;
        t = .2;
       
        c = new Color(this);
        c.setRGB(0xFF0000);
    }
}

onClipEvent (enterFrame) {
    if (this._name == "master" && i < 600) {
        angle = degrees * (Math.PI/180);
        degrees = degrees + 2;

        xposition = radius * Math.cos(angle);
        zposition = radius * Math.sin(angle);

        distance = 1 / (1 -(zposition / perspective));

        this._x = (xposition * distance) + center;
        this._y = y - t;
        t += .2;
       

        this._xscale = distance * 100;
        this._yscale = distance * 100;
        duplicateMovieClip(this, "nm"+i, i);
        if (i > 200) c.setRGB(0x00FF00);
        if (i > 400) c.setRGB(0x0000FF);
        i++;
    }
}

mvh mat
Avatar billede gantz Nybegynder
16. juli 2003 - 23:15 #2
Hey mat, tak for svaret, men det var ikke lige den slags spiral jeg tænkte på =). Det jeg skal bruge er en spiral du ved lidt a la http://www.fractalus.com/galleries/spiral-net.htm (fandt den lige hurtigt på nettet) med 3 farver. Den skal bare rotere i 2D, ikke 3D som du havde lavet
Avatar billede mat Nybegynder
16. juli 2003 - 23:28 #3
lav et movieclip med en fed grafik i, lig grafikken offcenter i movieclippet (liggende, 20-30 pixels fra registreringskrydset i movieclippet), giv movieclippet instancenavnet: master, og smid det her på:

onClipEvent (load) {
    if (this._name == "master") {
        rot = 20;
        scale = 10;
    }
}
onClipEvent (enterFrame) {
    if (this._name == "master") {
        this._rotation += rot;
        this._xscale = this._yscale += scale;
        duplicateMovieClip(this, "nm"+i, i)
        i++;
    }
}

du kan selv eksperimentere med variablerne rot og scale, og du kommer heller ikke udenom at eksperimentere med grafikken, men det kan blive ganske ok. Det her er en gammel en jeg lavede for lang tid siden: http://ultra-abe.dk.virker.nu/flower10.html

mvh mat
Avatar billede mat Nybegynder
16. juli 2003 - 23:30 #4
..men der er absolut intet matematisk i ovenstående, det er ren rotation og skalering. Hvis du vil have noget mere matematisk funderet tror jeg ikke jeg er den rette :)
Avatar billede gantz Nybegynder
17. juli 2003 - 10:02 #5
Den er ikke 100% som jeg gerne vil have den. Det skal være muligt at lave en spiral som drejer rundt så man får fornemmelsen af at man er på vej ind i den (3d effekt). Samtidig skal der ikke være mellemrum mellem grafikken. Det skal være en perfekt spiral.
Avatar billede alexander_j Nybegynder
18. juli 2003 - 12:24 #6
En lidt mere matematisk spiral kunne være noget alá det her (kan sikkert gøres rund med curveTo - men hvordan ved jeg ikke umiddelbart):

g = 0;
xm = 200;
ym = 200;
this.createEmptyMovieClip( "spiral", 1 );
with ( this.spiral ){
    lineStyle( 1, 0x0000FF, 100 );
    moveTo( xm, ym );
}
this.onEnterFrame = function(){
    g++;
    with ( _root.spiral ){
        lineTo( xm+Math.cos(g)*g, ym+Math.sin(g)*g );
    }
}

/Alexander

Ps. Ved godt det ikke er hvad du søger gantz, men synes lige jeg ville give et bidrag til spiraler i flash!
Avatar billede alexander_j Nybegynder
18. juli 2003 - 12:31 #7
Lavede den lige om, så den kunne rotere:

g = 0;
this.createEmptyMovieClip( "spiral", 1 );
with ( this.spiral ){
    lineStyle( 1, 0x0000FF, 100 );
    moveTo( 0, 0 );
}
this.spiral._x=200;
this.spiral._y=200;
this.onEnterFrame = function(){
    g++;
    with ( this.spiral ){
        lineTo( Math.cos(g)*g, Math.sin(g)*g );
    }
    this.spiral._rotation=g*5;
}
Avatar billede mat Nybegynder
18. juli 2003 - 12:34 #8
Jeg synes den er nydelig alexander :)
Avatar billede gantz Nybegynder
18. juli 2003 - 13:22 #9
tak for forsøget Alexander, men det er selvfølgelig meningen at den skal være rund og evt. bestå af 2-3 farver. Og jeg kan ikke lige se mig ud af hvordan det gøres, med det du har sendt
Avatar billede alexander_j Nybegynder
18. juli 2003 - 14:10 #10
Vi prøver da bare igen :):

f = new Array( "0xff0000", "0x00ff00", "0x0000ff" );
this.createEmptyMovieClip( "spiral", 1 );
this.spiral._x = 200;
this.spiral._y = 200;
this.onEnterFrame = function(){
    i += 1;
    if(i<=3000){
        this.spiral.lineStyle( 2, f[Math.floor(i/1000)], 100 );
        this.spiral.lineTo( Math.cos(i/100)*i/20, Math.sin(i/100)*i/20 );
    }
    this.spiral._rotation += 5;
}

/Alexander

Ps. Den er stadig ikke 'rund', men ser rund ud!
Avatar billede mat Nybegynder
18. juli 2003 - 14:16 #11
aaarrrgg jeg bliver hypnotiseret :)
Avatar billede gantz Nybegynder
18. juli 2003 - 14:27 #12
Kanon Alexander, nu er du ved at være der. Er det muligt at få en forklaring til scriptet. Jeg kunne nemlig godt tænke mig at den kommer frem hurtigere og  og at farverne ikke ligger efter hinanden men ved siden af hinanden (derfor skal stregen også være tykkere. Super fedt
Avatar billede alexander_j Nybegynder
18. juli 2003 - 14:32 #13
sov soov soooooov soooooooovs
Avatar billede mat Nybegynder
18. juli 2003 - 14:33 #14
sovs? :)
Avatar billede alexander_j Nybegynder
18. juli 2003 - 14:40 #15
Du kan ikke få den tegnet meget hurtigere uden den bliver (lidt) hakket - men du kan vælge at tegne hele spiralen på en gang i stedet for(så spiralen bare er der fra start af)!

Hastigheden spiralen tegnes i skere i denne her linie:
this.spiral.lineTo( Math.cos(i/100)*i/20, Math.sin(i/100)*i/20 );
100 og 20 kan du prøve at variere lidt - de 100 handler om hvor fin(rund) spiralen skal være, mens de 20 handler om hvilken radius der skal tegnes med!

Rotationshastigheden kan du ændre i:
this.spiral._rotation += 5;
men husk at for høj rotationshastighed gør animationen hakket - jeg foreslår dig at bruge 15 i framerate på selve flashfilmen og sætte rotationshastigheden til mellem 1 og 10!
Avatar billede gantz Nybegynder
18. juli 2003 - 14:54 #16
Tak for det. lige en sidste ting. Du skriver at man kan få hele spiralen fra starten af - hvordan?
Avatar billede alexander_j Nybegynder
18. juli 2003 - 15:20 #17
Tadaaa - har lavet et eksempel til dig her, hvor der er tre forskelligfarvede spiraler som er blevet forskudt en anelse for hinanden - og hvor spiralen tegnes fra start af - jeg har også indført tre variabler som du kan lege lidt med for at ændre spiralens udseende:

this.createEmptyMovieClip( "spiral", 1 );
this.spiral._x = 200;
this.spiral._y = 200;
q = 25; //quality
r = 5; //radius
s = 100; //size
for(i=0;i<q*s/r;i++){
    this.spiral.lineStyle( 2, "0xff0000", 100 );
    this.spiral.moveTo( Math.cos((i-1)/q)*(i-1)*r/q, Math.sin((i-1)/q)*(i-1)*r/q );
    this.spiral.lineTo( Math.cos(i/q)*i*r/q, Math.sin(i/q)*i*r/q );
   
    this.spiral.lineStyle( 2, "0x00ff00", 100 );
    this.spiral.moveTo( Math.cos((i-1)/q)*(i-1+5*q/r)*r/q, Math.sin((i-1)/q)*(i-1+5*q/r)*r/q );
    this.spiral.lineTo( Math.cos(i/q)*(i+5*q/r)*r/q, Math.sin(i/q)*(i+5*q/r)*r/q );
   
    this.spiral.lineStyle( 2, "0x0000ff", 100 );
    this.spiral.moveTo( Math.cos((i-1)/q)*(i-1+10*q/r)*r/q, Math.sin((i-1)/q)*(i-1+10*q/r)*r/q );
    this.spiral.lineTo( Math.cos(i/q)*(i+10*q/r)*r/q, Math.sin(i/q)*(i+10*q/r)*r/q );
}
this.onEnterFrame = function(){
    this.spiral._rotation += 5;
}
Avatar billede gantz Nybegynder
18. juli 2003 - 15:27 #18
Alt for blæret, tak for hjælpen - gidder du lige sende et svar så du kan få point?
Avatar billede alexander_j Nybegynder
18. juli 2003 - 15:30 #19
jeps ;)

Men husk på at jo højere kvalitet du kræver af det her script - desto mere maskinkraft kræves der hos brugeren!
Avatar billede gantz Nybegynder
18. juli 2003 - 15:33 #20
takker
Avatar billede alexander_j Nybegynder
18. juli 2003 - 16:58 #21
Man kan lege lidt med stregtykkelse(desværre er denne ikke flydende, men punktvis), alpha og farve - her har jeg lavet et lille eksempel:

this.createEmptyMovieClip( "mc_spiral", 1 );
this.mc_spiral._x = 200;
this.mc_spiral._y = 200;

this.createEmptyMovieClip( "mc_color", 2 );
myColor = new Color("mc_color");
myColor.setRGB(0xff0000)
myColorTransform = new Object();
myColorTransform.ra = 0;
myColorTransform.rb = 255;
myColorTransform.ga = 240;
myColorTransform.gb = 0;
myColorTransform.ba = 120;
myColorTransform.bb = 0;
myColorTransform.aa = 100;
myColorTransform.ab = 255;

q = 25; //quality
r = 5; //radius
s = 200; //size

this.onEnterFrame = function(){
    if(i<q*s/r){
        i++;
        myColorTransform.ra = 40-40*i*r/q/s;
        myColorTransform.gb = 255-255*i*r/q/s;
        myColor.setTransform(myColorTransform);
       
        this.mc_spiral.lineStyle( 10*i*r/q/s, "0x"+myColor.getRGB().toString(16), 100*i*r/q/s );
        this.mc_spiral.lineTo( Math.cos(i/q)*i*r/q, Math.sin(i/q)*i*r/q );
    }
    this.mc_spiral._rotation += 5;
}
Avatar billede alexander_j Nybegynder
18. juli 2003 - 17:01 #22
det med farveskiftet kan måske gøres nemmere, men jeg ved ikke lige hvordan, så ...
det med stregtykkelse kan man måske komme uden om ved brug af fill i stedet for streger, men ...
det med alpha stresser computeren yderligere, så om det er en god ide er op til den enkelte ...

Tak for point forøvrigt!
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