Avatar billede kalleballe Nybegynder
14. maj 2003 - 13:44 Der er 7 kommentarer og
1 løsning

drag moviclip A får movieclip B's egenskaber?

Jeg har 2 movieclips, movieclip A og movieclip B
jeg vil gerne dragge movieclip A ind i movieclip B og så skal movieclip A overtage de egenskaber som movieclip B har.
Hvordan gør man mon det?

vh
KalleBalle
Avatar billede jakwag Nybegynder
14. maj 2003 - 14:01 #1
Her er et eksempel:

movieA_mc.onPress = function() {
    this.startDrag();
    this.onEnterFrame = function() {
        if (this.hitTest(movieB_mc)) {
            movieB_mc._alpha = this._alpha;
            movieB_mc._width = this._width;
        }
    };
};
movieA_mc.onRelease = function() {
    this.stopDrag();
    delete this.onEnterFrame;
};

Hvis den skal overtage alle properties fra A (istedet for at skrive dem i scriptet) bliver det lidt sværere.

: ) Jakob
Avatar billede kalleballe Nybegynder
14. maj 2003 - 14:58 #2
Okay jeg kan godt forstå hvad du mener, men jeg har også en masse kode på movieclip B, - hvordan får jeg denne kode gjort til movieclip A's?
Avatar billede jakwag Nybegynder
14. maj 2003 - 15:00 #3
hvordan er koden lagt på clipB?
Avatar billede kalleballe Nybegynder
14. maj 2003 - 15:01 #4
Således:

onClipEvent (load) {
    _root.kniv.stop();
    perspective = 300;
    anglespeed = Math.PI/8;
    tilt = -5;
    radius = 80;
    nBalls = 12;
    startx1 = -10;
    startx2 = 145;
    startx3 = 245;
    starty = -8;
    origX = _root.blender._x;
    for (i=1; i<=nBalls*3; i++) {
        this.attachMovie("expBall", "mcBall"+i, i);
        this["mcBall"+i].angle = i*Math.PI*2/nBalls;
    }
}
onClipEvent (enterFrame) {
    //_root.blender._x = origX;
    if (_root.turnedOff == 1) {
        _root.bLyd.start();
        //this._visible = false;
        _root.kniv.play();
        for (i=1; i<=nBalls; i++) {
            //radius = 50+i;
            starty = -100;
            //perspective = random(300)+100;
            //anglespeed = Math.PI/12-i;
            mcrBall = this["mcBall"+i];
            mcrBall.angle += anglespeed;
            a = Math.sin(mcrBall.angle)*radius;
            b = Math.cos(mcrBall.angle)*radius;
            scalar = perspective/(b+perspective);
            mcrBall._x = a*scalar+startx1;
            mcrBall._y = b*scalar/tilt+starty;
            mcrBall._xscale = scalar*100;
            mcrBall._yscale = scalar*100;
            mcrBall._alpha = (120-b)/2;
            //_root.blender._x = _root.blender._x + random(3);
        }
    } else {
        for (i=2; i<=nBalls*3; i++) {
            _root.kniv.stop();
            _root.bLyd.stop();
            this["mcBall"+i]._visible = false;
        }
        this["mcBall"+1]._alpha=100;
        this["mcBall"+1]._y = 0;
        this["mcBall"+1]._x = 0;
       
       
    }
}
Avatar billede jakwag Nybegynder
14. maj 2003 - 16:11 #5
Se det her eksempel:

movieA_mc.onEnterFrame = function() {
    trace(this);
}
movieA_mc.onPress = function() {
    this.startDrag();
    this._parent.onEnterFrame = function() {
        if (movieA_mc.hitTest(movieB_mc)) {
            movieB_mc._alpha = movieA_mc._alpha;
            movieB_mc.onEnterFrame = movieA_mc.onEnterFrame;
        }
    };
};
movieA_mc.onRelease = function() {
    this.stopDrag();;
};

Jeg kan ikke få det til at fungere medmindre at jeg definere eventsne i en frame fremfor at bruge onClipEvent.

Du skal altså i en frame skrive:

MovieNavn.onLoad = function(){
    _root.kniv.stop();
    perspective = 300;
    anglespeed = Math.PI/8;
    tilt = -5;
    radius = 80;
    nBalls = 12;
    startx1 = -10;
    startx2 = 145;
    startx3 = 245;
    starty = -8;
    origX = _root.blender._x;
    for (i=1; i<=nBalls*3; i++) {
        this.attachMovie("expBall", "mcBall"+i, i);
        this["mcBall"+i].angle = i*Math.PI*2/nBalls;
    }
}
MovieNavn.onEnterFrame = function(){
    //_root.blender._x = origX;
    if (_root.turnedOff == 1) {
        _root.bLyd.start();
        //this._visible = false;
        _root.kniv.play();
        for (i=1; i<=nBalls; i++) {
            //radius = 50+i;
            starty = -100;
            //perspective = random(300)+100;
            //anglespeed = Math.PI/12-i;
            mcrBall = this["mcBall"+i];
            mcrBall.angle += anglespeed;
            a = Math.sin(mcrBall.angle)*radius;
            b = Math.cos(mcrBall.angle)*radius;
            scalar = perspective/(b+perspective);
            mcrBall._x = a*scalar+startx1;
            mcrBall._y = b*scalar/tilt+starty;
            mcrBall._xscale = scalar*100;
            mcrBall._yscale = scalar*100;
            mcrBall._alpha = (120-b)/2;
            //_root.blender._x = _root.blender._x + random(3);
        }
    } else {
        for (i=2; i<=nBalls*3; i++) {
            _root.kniv.stop();
            _root.bLyd.stop();
            this["mcBall"+i]._visible = false;
        }
        this["mcBall"+1]._alpha=100;
        this["mcBall"+1]._y = 0;
        this["mcBall"+1]._x = 0;
       
       
    }
}

Ellers kan du ikke bruge linien:

movieB_mc.onEnterFrame = movieA_mc.onEnterFrame;


Det er under alle omstændigheder bedst at have sine scripts i frames, på den måde kan man samle sine scripts i en enkelt frame istedet for at have dem spredt ud over hele flash filmen. Det gør det meget nemmere at ændre og finde fejl - især for andre.

: ) Jakob
Avatar billede kalleballe Nybegynder
14. maj 2003 - 16:14 #6
Jeg takker mange gange for din hjælp...
lad mig lige give dig nogle points :-)

vh
KalleBalle
Avatar billede jakwag Nybegynder
14. maj 2003 - 16:15 #7
Så pyt : )

Sig til hvis du ikke kan få det til at virke.
Avatar billede kalleballe Nybegynder
14. maj 2003 - 16:17 #8
I will
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