Avatar billede k.andersen Nybegynder
12. november 2006 - 16:12 Der er 8 kommentarer og
1 løsning

tilføj objekt i actionscript

Hejsa,

Jeg har fundet en tutorial på nettet: http://www.lionbichstudios.com/flash_tutorials_actionscript_waterbubbles.html og selve actionscriptet ser således ud:

// set global constants
centerx = 390;
// screen center x
centery = 90;
// screen center y
pval = 390;
// strength of perspective
c = 0;
// counter to keep track of depths, etc
// create empty movieclip to control stuff
this.createEmptyMovieClip("mc", 1);
// make one instance to start with.
newInst();
// onEnterFrame code for controller that randomly creates bubbles
mc.onEnterFrame = function() {
    // chance of 1 in 100 that new instance is created.
    if (Math.floor(100*Math.random()) == 0) {
        newInst();
    }
    // increase counter 
    c++;
};
// function to create new instance and attach event scripts
function newInst() {
    this.attachMovie("bubble", "b"+c, c+10);
   
    this["b"+c].onLoad = function() {
        // hide the bubble for now
        this._visible = false;
        // set initial values
        this.bx = 300*Math.random()-150;
        // base x coord for sine
        this.y = 75;
        // initial y coord
        this.bz = 300*Math.random()-150;
        // base z coord for sine
        this.cnt = 5000*(2*Math.PI)*Math.random();
        // randomize counter for sine
        this.wl = 8;
        // wavelength for sine calculations
        this.amp = 120;
        // amplitude for sine wave
        this.ysp = -1;
        // speed y direction (minus for upward motion)
    };
    // start the onLoad script manually
    this["b"+c].onLoad();
    // the onEnterFrame code moves the bubble
    this["b"+c].onEnterFrame = function() {
        // change the x,y,z coords
        this.x = this.bx+(this.amp*Math.sin(this.cnt/this.wl));
        this.y += this.ysp;
        this.z = this.bz+((this.amp/2)*Math.sin(this.cnt/this.wl));
        // increase counter on which sin and cosine are based
        this.cnt += 0.05;
        // call the function that applies 3d effects to this bubble
        m3d(this, this.x, this.y, this.z);
        // check whether this instance is off screen, if so delete it
        if (this._y<-150) {
            this.removeMovieClip();
        }
        // now that it's in place, let show the bubble 
        this._visible = true;
    };
}
// this function does the 3d stuff
function m3d(obj, x, y, z) {
    // calculate perspective value
    ps = _root.pval/(_root.pval+z);
    // change the object's properties
    with (obj) {
        // set 2d coords
        _x = centerx+(obj.x*ps);
        _y = centery+(obj.y*ps);
        // set scale and alpha
        _xscale = 100-(z/2);
        _yscale = 100-(z/2);
        _alpha = 100-(z/2);
    }
}


Men jeg vil gerne tilføje nogle flere objekter, altså, så jeg har flere forskellige bobler som svæver op - men hvordan gør jeg det?

På forhånd tak for hjælpen!
Avatar billede larsholmgaard_dk Nybegynder
12. november 2006 - 16:24 #1
Prøv at ændre

mc.onEnterFrame = function() {
    // chance of 1 in 100 that new instance is created.
    if (Math.floor(100*Math.random()) == 0) {
        newInst();
    }
    // increase counter
    c++;
};

til dette:

mc.onEnterFrame = function() {
    // chance of 1 in 100 that new instance is created.
    if (Math.floor(10*Math.random()) == 0) {
        newInst();
    }
    // increase counter
    c++;
};

Så er sandsynligheden for at der dannes en bobbel, 10x så stor som i den nuværende version.
Avatar billede k.andersen Nybegynder
12. november 2006 - 16:59 #2
Nu var det ikke så meget størrelsen.....men hvis nu jeg har to eller tre forskellige MovieClips, som den skal hente! Kan godt se at jeg måske ikke har udspecificeret det godt nok i mit første spørgsmål!

Så forestil dig at jeg også gerne vil have en firkant til at svære op og en trekant - hvordan gør jeg så det?
Avatar billede larsholmgaard_dk Nybegynder
12. november 2006 - 17:14 #3
Nej, jeg kan også godt se at mit svar kunne misforståes... det er en funktion, der kører hele tiden og den genererer et tilfældigt tal mellem 0 og 10 (i min version). Hvis det tal er under 1, så laver den en bobbel. Så, ved at ændre faktoren i beregningen, så laver den flere bobler: 2*Math.random() vil fx. give et tal mellem 0 og 2, så der vil i 50% af tilfældene blive dannet en boble (50% af tallene vil være 0.9999 eller derunder). Det har intet med størrelsen at gøre.

Men, hvis det er forskellige objekter, så er det noget helt andet.

Her dannes en kopi af 'bubble' fra librariet:
this.attachMovie("bubble", "b"+c, c+10);

Og den kan du jo så bare ændre ved at sætte et andet navn i stedet for "bubble" ind. Så laver du nogle andre movieclips, der de navne og så kan du rafle mellem dem, eller tage dem i rækkefølge.
Avatar billede larsholmgaard_dk Nybegynder
12. november 2006 - 17:15 #4
Hov, stavefejl:

"Så laver du nogle andre movieclips, der de navne og så kan du rafle mellem dem, eller tage dem i rækkefølge." = "Så laver du nogle andre movieclips, med de navne og så kan du rafle mellem dem, eller tage dem i rækkefølge."
Avatar billede k.andersen Nybegynder
12. november 2006 - 17:39 #5
Ja, det er jeg så vidt godt klar over, men hvordan sætter jeg det ind, så den rafler mellem de forskellige MC? Det skal være sådan at den vælger random mellem de MC jeg har (f.eks. en cirkel, firkant og trekant) og at den sagtens kan vise de tre forskellige objekter på samme tid!

Jeg kan f.eks. ikke bare sætte denne linie under den eksisterende:

this.attachMovie("trekant", "t"+c, c+10);
________________________________
Det som jeg søger og som du meget gerne må lave et eksempel på hvis du kan. Er hvor jeg f.eks. har to MC der hedder "bubble" og "trekant" - som den skal blande tilfældigt og så sende over skærmen som den gør med bubble i øjeblikket!
Avatar billede k.andersen Nybegynder
12. november 2006 - 17:41 #6
Håber ikke jeg lyder alt for indviklet i mit forrige svar - Er bare svært at forklare på skrift hvad det er jeg egentlig ønsker - håber du forstår det og kan hjælpe :-)
Avatar billede mat Nybegynder
12. november 2006 - 19:52 #7
I dit bubble movieclip kan du bare lave flere frames med forskellig grafik i hver frame.  Så kan du bare sige noget a la;

this.gotoAndStop(Math.round(Math.random()*this._totalframes-1)+1);

I din this["b"+c].onLoad = function() { } funktion..Husk en stop() i frame 1 i dit bubble movieclip...

..eller noget..

mvh mat
Avatar billede k.andersen Nybegynder
12. november 2006 - 20:09 #8
SUPER NICE!!!!! lige hvad jeg skulle bruge - smid et svar, så skal du få dine point :-)
Avatar billede mat Nybegynder
12. november 2006 - 20:18 #9
aight
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