13. december 2001 - 01:27Der 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...
Det kan være svært at få armene ned i begejstringen over AI’s kompetencer. Men vi ved stadig overraskende lidt om, hvorfor modellerne gør, som de gør.
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(); } }
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;
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 :)
Synes godt om
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.
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 :)
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.