Avatar billede flash_gordon Nybegynder
28. oktober 2001 - 20:43 Der er 17 kommentarer og
3 løsninger

Problemer med Variabler

Jeg har et MC med følgende actions:
// Fart og afgrænsning
onClipEvent (enterFrame) {
    if (_root.maa_jeg) {
        Tal = 300;
        if (this._x<Tal) {
            this._x = this._x+fart;
            fart = 5;
        }
    }
    updateAfterEvent();
}

Det virker fint. Det er ikke det der er problemet. Men hvad gør jeg hvis jeg ændre på variablen \"Tal\"?
Jeg har prøvet med diverse løsninger med ingen virker.
Avatar billede ditlev Juniormester
28. oktober 2001 - 20:52 #1
Hvad med:
Tal = _root.andettal;

og så definer _root.andettal på timelinen.
Avatar billede flash_gordon Nybegynder
28. oktober 2001 - 21:01 #2
Jo, det virkede. Tak for din hjælp. Hvis du laver et svar skal du få dine point.
Avatar billede ditlev Juniormester
28. oktober 2001 - 21:06 #3
Ok :o)
Avatar billede flash_gordon Nybegynder
28. oktober 2001 - 21:09 #4
Hm.. det virkede men det løste egentlig ikke det problem jeg havde.
Den ide jeg har er følgende:

Jeg har et det før omtalte MC med de foromtalte actions. Ideen er jeg skal kunne ændre dens destinition. Altså f.eks i Frame 40 vil jeg kunne sige at den nu skal bevæge sig hen til 100 på x-aksen.

Jeg forhøjer point indsats med 30 point.
Avatar billede flash_gordon Nybegynder
28. oktober 2001 - 21:13 #5
Når den når frame 40 med den løsning du gav mig stopper MC\'et
Avatar billede lingoman Nybegynder
28. oktober 2001 - 21:20 #6
Det er jo ikke på grund af Ditlevs løsning at den nu stopper men din egen action

hvis du i frame 40 siger
_root.andettal = 100;

bliver if (this._x<Tal) false, derfor standser den

Hvordan har du tænkt dig at den skal opføre sig?

Skal den bare hele tiden bevæge sig hen mod _root.andettal ?
Avatar billede flash_gordon Nybegynder
28. oktober 2001 - 21:23 #7
Ja nemlig. Der må være noget jeg har misforstået. Jeg glæder mig til at blive oplyst.
Avatar billede lingoman Nybegynder
28. oktober 2001 - 21:35 #8
Hvis du bruger følgende action på din MC kan du altid frit indstille  _root.andettal

onClipEvent (enterFrame) {
                          if (_root.maa_jeg) {
                              Tal = _root.andettal;
                              if (this._x!= _root.andettal) {

                                if (this._x> _root.andettal) {
                                  fart = -5;
                                  } else {
                                  fart = 5;
                                  }
                                this_x += fart;

                                if (Math.abs(_root.andettal - this._x) < Math.abs(fart) ) {
                                this_x = _root.andettal;
                                }

                              }
                          }
                          updateAfterEvent();
                      }

mvh geo
Avatar billede lingoman Nybegynder
28. oktober 2001 - 21:43 #9
Virker det efter hensigten ?
Avatar billede lingoman Nybegynder
28. oktober 2001 - 21:45 #10
rettelse

this_x += fart;  >>  this._x += fart;
Avatar billede lingoman Nybegynder
28. oktober 2001 - 21:59 #11
rettelse igen!

this_x = _root.andettal;  >>  this._x = _root.andettal;

Hvis det virker som det skal så husk lige at det var Ditlev som kom med svaret til dit oprindlige spørgsmål :)

mit svar skulle have været

onClipEvent (enterFrame) {
    if (_root.maa_jeg) {
        Tal = _root.andettal;
        if (this._x != Tal) {
            if (this._x>Tal) {
                fart = -5;
            } else {
                fart = 5;
            }
            this._x += fart;
            if (Math.abs(Tal-this._x)<Math.abs(fart)) {
                this._x = Tal;
            }
        }
    }
    updateAfterEvent();
}

mvh geo

Avatar billede lingoman Nybegynder
29. oktober 2001 - 11:02 #12
Flash_gordon, Var det godt nok ?
Avatar billede gotcha Nybegynder
29. oktober 2001 - 11:12 #13
Hvis du ønsker at kunne ændre på din variabel og derefter bevæge dig mod den givne destination, så kan du bare bruge følgende:

onClipEvent(load) {

    pObj = new Object();
    pObj.targetX = 100;
    localToGlobal(pObj);

}

onClipEvent(enterFrame) {

    _x += (pObj.targetX-_x)/5;

}

Hastigheden er dog ikke konstant her, men til gengæld ender du præcist der, hvor du vil hen. Med en konstant hastighed er dette selvfølgelig kun tilfældet, hvis din hastighed går op i din destination.

I ovenstående kode bliver vi først nødt til oversætte til globale koordinater på hovedtidslinien, da du som sagt ønskede at bevæge dig mod en destination på hovedtidslinien. Hvis vi blot havde skrevet targetX = 100 og bevæget os mod denne destination, så ville det være på movie clippet\'s egen tidslinie, hvilket selvfølgelig giver en forskydning i forhold til hovedtidslinien.

Hvis du ønsker at ændre på din destination løbende (dvs. at du ikke går ind og ændrer på tallet manuelt, men gør det, mens din fil vises), så bliver du nødt til at lave en del af koden om til en funktion:

onClipEvent(load) {

    function changeTarget (value) {
   
        pObj = new Object();
        pObj.targetX = value;
        localToGlobal(pObj);

    }

    changeTarget(100);

}

onClipEvent(enterFrame) {

    _x += (pObj.targetX-_x)/5;

}

Hvis vi f.eks. kalder dit movie clip for myClip, så kan du vedhæfte følgende kode til en knap på hovedtidslinien:

on (release) {

  myClip.changeTarget(300);

}

Mvh Morten

Avatar billede flash_gordon Nybegynder
29. oktober 2001 - 11:17 #14
Undskyld mit sene tilbage meldningstidspunkt. Det har ikke været muligt før nu da der var problemer med min icQ på den måde at hver gang den startde op blev min computer låst. Jeg kigger på svarene nu. Vender snart tilbage.
Avatar billede flash_gordon Nybegynder
29. oktober 2001 - 11:39 #15
Lingomans metode virker efter planen. Jeg kan endda lave et input tekstfelt og ændre det mens filen kører. Men hensyn til gotchas metode er jeg lost. Hvad er det at den kan som Lingoman metode ikke kan?
Avatar billede lingoman Nybegynder
29. oktober 2001 - 11:47 #16
Den varierer hastigheden. Hurtigst i starten, og langsommere som den nærmer sig destinationen
Avatar billede mat Nybegynder
29. oktober 2001 - 12:59 #17
Må jeg lige spørge om noget (sig til hvis i vil have point for det)?

Jeg har lavet noget lignende, med dette script:

onClipEvent (enterFrame) {
dx = _root.maxx - this._x;
xspeed = dx/8;
_x += xspeed;
}

og så bare sat et inputfelt til at definere _root.maxx

Sådan som jeg har forstået det er det nogenlunde samme effekt som ovenstående, men hvad laver den der \"localToGlobal()\" i gotcha´s eksempel.....

(Man får jo ikke noget at vide hvis man ikke spørger)

Som sagt må i lige sige til hvis i vil have nogle point for det...
Avatar billede flash_gordon Nybegynder
29. oktober 2001 - 13:14 #18
Som jeg ser det, er det fordi ellers bliver det MC\'ets koordinater der bliver brugt, og ikke main\'s koordinater. 
Avatar billede flash_gordon Nybegynder
29. oktober 2001 - 13:20 #19
Ok så er jeg klar til at dele point ud. Tak til jer alle sammen.
Jeg ved ikke rigtig hvad jeg skal stille op med gotcha. Hans svar er sikkert korrekt, men jeg har ikke brugt det. Han lange forklaring synes jeg giver ham fortjent til 10 point. Det var alt for denne gang. Endnu engang tak.
Avatar billede gotcha Nybegynder
29. oktober 2001 - 15:27 #20
mat >> Du må da meget gerne give points for det, men her er under alle omstændigheder en lille forklaring.

Vi har en værdi (i vores tilfælde 100) som vi ønsker at bevæge os mod på hovedtidslinien. Problemet er så, at hvert movie clip har sin egen tidslinie og vi bliver så nødt til at oversætte koordinatet fra den lokale tidslinie til hovedtidslinien (deraf navnet localToGlobal). Prøv evt. at tegne en streg ved 100 på din hovedtidslinie og vedhæft dernæst følgende til et movie clip:

onClipEvent(enterFrame) {

    _x += (100-_x)/5;

}

Her er destination (100,0), men den ender ikke ved den streg, du tegnede på hovedtidslinien. Dette er som sagt fordi, vi har at gøre med en lokal værdi. Denne værdi bliver vi så nødt til at oversætte til en global værdi, og dermed ændres værdien af den altså. Et andet eksempel kunne være følgende:

onClipEvent(enterFrame) {

    _x += (_xmouse-_x)/5;

}

Her regnes der med musen koordinater i forhold til movie clippets egen tidslinie, og derfor vil dit movie clip ende forskudt i forhold til musen. Hvis den skal ende korrekt, bliver vi altså nødt til at skrive:

onClipEvent(enterFrame) {

    _x += (_parent._xmouse-_x)/5;

}

eller

onClipEvent(enterFrame) {

    _x += (_root._xmouse-_x)/5;

}

Det vigtige er her at bemærke, at vi i modsætning til før har en egenskab, som vi kan finde værdien af (alle egenskaber starter med underscore), og vi kan derfor skrive en betegnelse foran, der angiver i forhold til hvilken tidslinie, vi ønsker koordianterne. I det første tilfælde havde vi bare en numerisk værdi, så vi blev nødt til at oversætte værdien vha. localToGlobal.

Jeg håber, det var svar nok :)

Mvh Morten
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