28. oktober 2001 - 20:43Der 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.
Med version 7 af TeamShare tager Lector næste skridt og bygger en platform for AI-agenter, der i højere grad kan følge medarbejderen gennem hele arbejdsprocessen.
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.
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:
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.
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?
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.
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
Synes godt om
Ny brugerNybegynder
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.