Avatar billede webmercial Nybegynder
08. august 2005 - 12:41 Der er 8 kommentarer og
1 løsning

Functions i Actionscript

Hvad jeg vil: Der er tre bolde på Stage (bold1, bold2 og bold3). Der er blevet defineret en function der ændrer på _x, _y og _rotation-værdierne. Fra 1. frame på tidslinjen vil jeg gerne kunne sætte functionen på de tre bolde, men med hver deres parametre. I koden nedenfor er det alt på Stage der bliver animeret på. Min kode:

function ladSke (bevaegX, bevaegY, roter) {
    _x += bevaegX;
    _y += bevaegY;
    _rotation += roter;
}

bold1.onEnterFrame = function (){
    ladSke (5,5,5);
    }

Desuden undrer jeg mig vildt over at jeg ikke kan multiplicere f.eks. _x værdien (this._x *= bevaegX) Hvad gør jeg forkert?
Avatar billede barklund Nybegynder
08. august 2005 - 13:53 #1
du er jo nødt til at vide, hvad det er du flytter. Du skal lige lære lidt om aktiverende og definerende scope for funktioner - hvilken du meget passende kan læse lidt om i http://globe.dk/?action=detail&vare=FG227-7


Derefter kan du skrive funktionen om, så den tager objektet som argument:

function ladSke (bold, bevaegX, bevaegY, roter) {
    bold._x += bevaegX;
    bold._y += bevaegY;
    bold._rotation += roter;
}
bold1.onEnterFrame = function (){
    ladSke (this, 5,5,5);
}

Eller du kan skrive det om, så den henter objektet fra aktiverende scope (this) - og så kan den faktisk læse variabler fra aktiverende scope ligeledes:

function ladSke () {
    this._x += this.bevaegX;
    this._y += this.bevaegY;
    this._rotation += this.roter;
}
bold1.bevaegX = 5;
bold1.bevaegY = 5;
bold1.roter = 5;
bold1.onEnterFrame = ladSke;

Noget helt andet er, at hvis du navngiver din variabler på dansk alligevel, hvorfor tør du så ikke bruge æøå? bevægX er et fint og ganske gyldigt variabel-navn.

--
Morten Barklund
Avatar billede webmercial Nybegynder
09. august 2005 - 08:07 #2
Tak. Troede at "this" i functionen ville være det "this" som functionen blev benyttet på. Jeg er ikke interesseret i at MC'et skal skrives inde i funktionen, for så har den jo ingen generel anvendelighed. Troede at det var muligt at skrive en function foo (param1, param2, param3) {//lad noget ske}, og så at man kunne anvende functionen på et MC (+ param1, param2, param3), hvilket ville være den stærkeste og mest fleksible løsning.

Men din er er også OK!
Avatar billede barklund Nybegynder
09. august 2005 - 10:03 #3
Jo? Funktionen har da netop generel anvendelighed, selvom den tager objektet som et argument - du kan jo give et vilkårligt movieclip som første argument og så flytter den dette.

Men du skal kende forskel på aktiverende og definerede scope - det _er_ en forskel på, om du bruger "this" eller ej foran variabler inde i funktionen - en meget vigtig forskel.

Hvis du "bare" kalder en funktion, så benytter du den ikke på det objekt, som indeholder den funktion, som du kalder den fra - men du kan godt angive, at du vil kalde den fra dette objekt:

bold1.onEnterFrame = function (){
    ladSke.call(this,5,5,5);
}

Så vil this inde i funktionen refererer til det this, som bruges som argument til kaldet ovenfor - altså bold1 i dette tilfælde.
Avatar billede barklund Nybegynder
09. august 2005 - 10:03 #4
Og et svar :)
Avatar billede webmercial Nybegynder
09. august 2005 - 18:56 #5
I øvrigt ser det godt ud med actionscript.dk. Er selv den lykkelige ejer af www.dynamiskflash.dk (hvor jeg lige har postet om functions takket være din hjælp).
Avatar billede webmercial Nybegynder
09. august 2005 - 18:57 #6
Jeg har altså accepteret dit svar, har du fået dine points?
Avatar billede barklund Nybegynder
09. august 2005 - 20:02 #7
Niks - du skal lige markere mit svar på listen og trykke på accepter - så skulle det gå igennem :)
Avatar billede barklund Nybegynder
09. august 2005 - 20:03 #8
Ikke desto mindre (og især hvis du underviser) vil jeg rekommandere min bog - som refereret til ovenover. Jeg kender til en del andre uddannelsessteder, hvor de er begyndt at bruge den, da den netop meget grundlæggende introducerer basale programmeringsteknikker.
Avatar billede barklund Nybegynder
09. august 2005 - 20:49 #9
Tark for points :)
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



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows