Avatar billede dcoder Nybegynder
13. december 2001 - 01:27 Der er 12 kommentarer og
1 løsning

Problemerne med startDrag vælter ind :)

For tredie gang i dag må jeg lige have lidt hjælp...

Jeg har (stadig) et movie clip med en knap i... Knappen har (stadig :) Følgende action script

on (press) {
  startDrag (\"\");
}
on (release) {
  stopDrag ();
  _root.gotoAndPlay(\"Main_Start\");
}

Problemet er nu at når jeg klikker på knappen, trækker den et sted hen, og slipper den, så bliver jeg sendt videre til næste scene, og dermed flyver knappen tilbage til sin oprindelige plads, og dermed er hele \"drag-and-drop\" ideen jo væk...

Please hjælp mig (igen igen :)
Avatar billede Slettet bruger
13. december 2001 - 07:02 #1
Hej, OK!!! Jeg har løsningen til dig...

Kig lige på denne kode... Den checker om dit MC har flyttet sig når du slipper musetasten, og vil reagere udfra det.

Jeg har her lagt knappen inde i det MC der også skal trækkes, og kaldet MC\'et for \"drag\":

on (press) {
    // Vi finder x og y positionen for vores MC der skal trækkes
    x= _root.drag._x;
    y= _root.drag._y;
    // Vi begynder at trække i vores MC
    _root.drag.startDrag();
}

on (release){
    // Definerer den nye x og y position for vores MC
    new_x = _root.drag._x;
    new_y = _root.drag._y;
    // Hvis MC ikke har flyttet sig, så aktivér knap-funktion!
    if (new_x == x && new_y == y){
        _root.drag.stopDrag();
        _root.main.gotoAndStop (\"newFrame\");
    //Hvis MC HAR flyttet sig så bare hold op med at trække
    }else{
        _root.drag.stopDrag();
    }
}

/Mikael
Avatar billede pixelpaw Nybegynder
13. december 2001 - 09:40 #2
skal lige høre... er det meningen at du skifter scene?
Avatar billede lingoman Nybegynder
13. december 2001 - 09:48 #3
molok>> jeg tvivler på at din løsning vil hjælpe da problemet her er at vi har med 2 forskellige instancer af de draggede MC\'er at gøre. Den knap vi dragger i den ene scene forsvinder når vi går til den anden scene og det vi så ser er et nyt instance af knappen placeret i dets oprindelige position.

Der findes sikkert mange måder at takle problemet på. Det nemmeste ville have været hvis man ikke havde delt filmen op i scener, og kun brugt framelabels fra starten. Så ville der være tale om den samme MC instance der fortsætter der hvor man nu slipper den.

Dersom filmen er opbygget i flere scener nu, kan jeg komme i tanke om 2 måder at løse det på.

1) Lad knappens _x, _y positioner overføres til knapperne fra scene til scene
2) Lad knappen ligge i en ekstern .swf fil som loades ind i et andet level så det er upåvirket af hovedfilmens scener

løsning 1 kan klares ved et par tilføjelser. Alle knap MC instancer skal følgende action på knappen:

on (press) {
        startDrag (\"\");
}
on (release) {
      stopDrag ();
      _root.SharePos = true;
      _root.knap_x = _x; //gem den nye position
      _root.knap_y = _y;
        _root.gotoAndPlay(\"Main_Start\");
}

Selve Knap MC\'erne i de forskellige scener skal have load actionen

onClipEvent (load) {

    if (_root.SharePos == true) {

    //kopier tidligere position ved stopDrag()
        _x = _root.knap_x;
        _y = _root.knap_y;

    }
}

Nu ved jeg ikke hvor mange draggbare knapper du har i hver scene, men denne princip kan også bruges til flere knapper. Så skal du bare huske at det skal være de samme knapper i hver scene der deler variabler.

hvis du i hver scene har 3 draggbare knapper skal de hhv bruge actionerne


//knap 1

on (press) {
        startDrag (\"\");
}
on (release) {
      stopDrag ();
      _root.SharePos1 = true;
      _root.knap1_x = _x; //gem den nye position
      _root.knap1_y = _y;
        _root.gotoAndPlay(\"Main_Start\");
}

///////////////

//knap 2

on (press) {
        startDrag (\"\");
}
on (release) {
      stopDrag ();
      _root.SharePos2 = true;
      _root.knap2_x = _x; //gem den nye position
      _root.knap2_y = _y;
        _root.gotoAndPlay(\"Main_Start\");
}


////////////////////////

//knap 3

on (press) {
        startDrag (\"\");
}
on (release) {
      stopDrag ();
      _root.SharePos3 = true;
      _root.knap3_x = _x; //gem den nye position
      _root.knap3_y = _y;
        _root.gotoAndPlay(\"Main_Start\");
}


og Deres MovieClips skal så have en tilsvarende load

//knap1 MC

onClipEvent (load) {

    if (_root.SharePos1 == true) {

    //kopier tidligere position ved stopDrag()
        _x = _root.knap1_x;
        _y = _root.knap1_y;

    }
}


//knap2 MC

onClipEvent (load) {

    if (_root.SharePos2 == true) {

    //kopier tidligere position ved stopDrag()
        _x = _root.knap2_x;
        _y = _root.knap2_y;

    }
}


//knap3 MC

onClipEvent (load) {

    if (_root.SharePos3 == true) {

    //kopier tidligere position ved stopDrag()
        _x = _root.knap3_x;
        _y = _root.knap3_y;

    }
}


mvh geo
Avatar billede dcoder Nybegynder
13. december 2001 - 10:15 #4
OK, det bliver sjovere og sjovere :) Jeg har helt præcist 7 knapper, så det bliver lidt af et copy-paste arbejde :) Men jeg vil da springe ud i det, og håbe på det bedste.

Og grunden til at jeg oprindeligt har delt det op i scener, er for overskuelighedens skyld :) Havde overvejet at lave det om til en scene, men kunne ikke lige se hvordan det skulle foregå mest praktisk.

Prøver lige at kigge på det :)
Avatar billede Slettet bruger
13. december 2001 - 10:18 #5
Lingoman>> Du har fuldstændig ret, havde ikke set at dette var et fortsat spørgsmål.. Desuden deler jeg aldrig mine film op i scener, finder det simpelthen unødvændig.

Det meste kan  jo holdes indefor et par frames...

Desuden ser den kode som du har skrevet, meget rigtig ud, og burde virke. Bare lidt af en sur løsning på et ret simpelt problem...

dcoder>> Vil du ikke være venlig at afvise mit svar med det samme, så der ikke opstår fejl senere.

/M
Avatar billede lingoman Nybegynder
13. december 2001 - 10:19 #6
Hvis du har så mange vil det være lidt nemmere at lave en fil med kun de 7 knapper
Avatar billede lingoman Nybegynder
13. december 2001 - 10:27 #7
I din hovedfilm loader du filmen med de 7 knapper ind

loadMovieNum(\"knap.swf\", 10);

Selve knapperne behøver så kun

on (press) {
                          startDrag (\"\");
                        }
                        on (release) {
                          stopDrag ();
                          _level0.gotoAndPlay(\"Main_Start\");
                        }

mvh geo
Avatar billede pixelpaw Nybegynder
13. december 2001 - 10:29 #8
Eller lave en funktion der bliver kørt fra de syv knapper.
Så er koden samlet ét sted.
Avatar billede dcoder Nybegynder
13. december 2001 - 10:35 #9
Wow, fik det til at virke med dit første eksempel lingoman, nu skal jeg bare lave det på alle knapperne, muligvis er det mere besværligt, men nu hvor det virker vil jeg helst ikke rode for meget rundt med alternative løsninger :)

Endnu en gang tak, og selvfølgelig også til jer andre :)

molok > Er hermed gjort :)
Avatar billede dcoder Nybegynder
13. december 2001 - 10:45 #10
Lingoman >> Hvis du er interesseret, så smid lige et svar, det er vidst begyndt at blive en tradition at du løber med pointsne i denne trilogi :)
Avatar billede lingoman Nybegynder
13. december 2001 - 10:48 #11
Trilogi ? Husker du Rocky VII ?  :o)
mvh geo
Avatar billede dcoder Nybegynder
13. december 2001 - 10:51 #12
Njae... Rocky VII ????

Nå glem det :) Takker
Avatar billede lingoman Nybegynder
13. december 2001 - 10:54 #13
Tak for point :)
>>Rocky VI ;)
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