09. marts 2005 - 21:46
Der er
27 kommentarer og 1 løsning
en ud af otte fejler
Jeg har puttet dette script på otte knapper:
this.stop();
this.maaly = this.starty = this._y;
this.onEnterFrame = function() {
if(Math.abs(this._y - this.maaly) < 2) this._y = this.maaly;
if(this.maaly < this._y) this._y -= 2;
else if(this.maaly > this._y) this._y += 2;
}
this.onRollOver = function() {
for(i=1;i<9;i++) {
if(i<3) _root["knap" + i].maaly = _root["knap" + i].starty - 10;
else if(i>3) _root["knap" + i].maaly = _root["knap" + i].starty + 10;
}
}
this.onRollOut = function() {
for(i=1;i<9;i++) {
_root["knap" + i].maaly = _root["knap" + i].starty;
}
}
og selvfølgelig ændret tallet, der hvor det er nødvendigt. Den en knap opfører sig anderledes, hvorfor ?
www.legende.dk/diverse/menu.swf
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
09. marts 2005 - 21:47
#1
Det er som om scripts går lidt for langt ned og games går lidt for kort nedad. Det er da underligt
09. marts 2005 - 22:10
#2
Hm, det kan vel nok laves lidt kønnere end det kæmpe script på hver knap og masser af løkker og enterframes over det hele - skulle man mene. Læg et simpelt kald på hver knap - såsom: knap1.onRollOver = åbenKnap; knap1.onRollOut = lukKnap; ... Og så i de to funktioner lave det nødvendige script. Derudover er jeg ganske overbevist om, at fejlen i dit script ligger i det faktum, at to af dine knapper muligvis ligger på skæve koordinater. De skal ikke nødvendigvis ligge på hele pixels - men på en hel tyvendedel af en pixel. Altså 0.05, 0.1, 0.15 og så videre. Prøv engang ;) -- Morten Barklund
09. marts 2005 - 22:19
#3
function lukKnapper() { for(i=1;i<9;i++) { _root["knap" + i].maaly = _root["knap" + i].starty; } } function openKnapper(knapnavn) { tal = knapnavn.substring(3,4); for(i=1;i<9;i++) { if(i<tal) _root["knap" + i].maaly = _root["knap" + i].starty - 10; else if(i>tal) _root["knap" + i].maaly = _root["knap" + i].starty + 10; } } for(i=1;i<9;i++) { _root["knap" + i].stop(); _root["knap" + i].onRollOver = function() { openKnapper(_root["knap" + i]); } _root["knap" + i].onRollOver = lukKnapper(); } Kun knap1 stopper og ingen bevæger sig :'(
09. marts 2005 - 22:21
#4
for(i=1;i<9;i++) { _root["knap" + i].maaly = _root["knap" + i].starty = _root["knap" + i]._y; _root["knap" + i].onRollOver = function() { openKnapper(_root["knap" + i]); } _root["knap" + i].onRollOver = lukKnapper(); } _root["knap" + i].stop(); _root["knap" + i].onRollOver = function() { openKnapper(_root["knap" + i]); } _root["knap" + i].onRollOver = lukKnapper(); } Jeg havde lige glemt at sætte maaly og starty, men alligevel virker det ikke
09. marts 2005 - 22:25
#5
hov, der gik et eller andet helt galt med copy/paste der: function lukKnapper() { for(i=1;i<9;i++) { _root["knap" + i].maaly = _root["knap" + i].starty; } } function openKnapper(knapnavn) { tal = knapnavn.substring(3,4); for(i=1;i<9;i++) { if(i<tal) _root["knap" + i].maaly = _root["knap" + i].starty - 10; else if(i>tal) _root["knap" + i].maaly = _root["knap" + i].starty + 10; } } function openKnapper(knapnavn) { tal = knapnavn.substring(3,4); for(i=1;i<9;i++) { if(i<tal) _root["knap" + i].maaly = _root["knap" + i].starty - 10; else if(i>tal) _root["knap" + i].maaly = _root["knap" + i].starty + 10; } } for(i=1;i<9;i++) { _root["knap" + i].maaly = _root["knap" + i].starty = _root["knap" + i]._y; _root["knap" + i].onRollOver = function() { _root.openKnapper(_root["knap" + i]); } _root["knap" + i].onRollOver = function() { _root.lukKnapper(); } _root["knap" + i].stop(); } men det er stadig ikke helt rigtigt :)
09. marts 2005 - 22:27
#6
lidt dobbelt funktion er jo altid godt... Men bortset fra det, hvad er der så galt ?
09. marts 2005 - 22:31
#7
Tja, knappens navn er jo this._name set inde fra funktionen (og dit forslag virker slet ikke af helt andre årsager): function lukKnapper() { for(var i=1;i<9;i++) { _root["knap" + i].maaly = _root["knap" + i].starty; } } function openKnapper() { var tal = Number(_this_name.substring(3)); for(var i=1;i<9;i++) { if(i<tal) _root["knap" + i].maaly = _root["knap" + i].starty - 10; else if(i>tal) _root["knap" + i].maaly = _root["knap" + i].starty + 10; } } var m; for(var i=1;i<9;i++) { m = _root["knap" + i]; m.maaly = m.starty = m._y; m.onRollOver = openKnapper; m.onRollOver = lukKnapper _root["knap" + i].stop(); } Men derudover er der jo stadig ingen onEnterFrames. Dette kan stadig være en god ide, men de skal kun sættes på, når de skal bruges - og fjernes igen, når de ikke skal bruges længere -- Morten Barklund
09. marts 2005 - 22:32
#8
Hov, m.stop() til sidst er på sin plads :)
09. marts 2005 - 22:33
#9
Og: Number(this._name.substring(3)); Selvfølgelig ;)
09. marts 2005 - 22:36
#10
Er dette virkelig rigtigt, Barklund? m.onRollOver = openKnapper; m.onRollOver = lukKnapper ?????????????????? Jeg var lige lidt panik agtig der, men har nu fået lidt koldt vand i hovedet: function lukKnapper() { for(i=1;i<9;i++) { _root["knap" + i].maaly = _root["knap" + i].starty; } } function openKnapper(knapnavn) { tal = knapnavn.substring(4,5); for(i=1;i<9;i++) { if(i<tal) _root["knap" + i].maaly = _root["knap" + i].starty - 10; else if(i>tal) _root["knap" + i].maaly = _root["knap" + i].starty + 10; } } for(i=1;i<9;i++) { _root["knap" + i].stop(); _root["knap" + i].maaly = _root["knap" + i].starty = _root["knap" + i]._y; _root["knap" + i].onRollOver = function() { _root.openKnapper(this._name); } _root["knap" + i].onRollOut = function() { _root.lukKnapper(); } _root["knap" + i].onEnterFrame = function() { if(Math.abs(this._y - this.maaly) < 2) this._y = this.maaly; else if(this._y < this.maaly) this._y += 2; else if(this._y > this.maaly) this._y -= 2; } } Så var den der :)
09. marts 2005 - 22:39
#11
men smid lige et svar :)
09. marts 2005 - 22:41
#12
Det er meget smukkere at putte det hele på på een gang, men det kiksede for mig første (og anden) gang :) Derfor var jeg havnet der hvor jeg smed et script på hver knap, ak ja...
09. marts 2005 - 22:42
#13
Ja, funktioner er variabler som alle andre. Om jeg skriver:
function foo() {}
foo = function(){}
Er i praksis (næsten) det samme. Og sidstnævte angiver tydeligt, at funktioner er variabler:
foo = function() { trace("hejhej"); };
bar = foo;
bar();
Og jamen dog, funktionen virker under et nyt navn.
Well, det skal vi ikke komme ind på her, det kan du læse meget mere om i
http://globe.dk/?action=detail&vare=FG227-7 :)
Og dit script kan dermed laves mange gange pænere. I stedet for at lave en rollover funktion for hver knap, kan du lave en generel funktion. Så i stedet for at du ovenover bruger i alt 31 funktioner, kan du nøjes med 4. Det er da lidt smartere :)
--
Morten Barklund
09. marts 2005 - 22:46
#14
Jamen som det er nu, er det vel ok (eller er det der der er 27 for mange ?) Skriv lige din rørende version så, så jeg kan få en lille tåre i øjet :P (og svar)
09. marts 2005 - 23:16
#15
Jamen du kan vel selv gætte det? Alle de funktioner, der i praksis er ens, kan erstattes med en enkelt fælles funktion (og se så at var'e dine lokale variabler i funktioner): function lukKnapper() { for(var i=1;i<9;i++) { _root["knap" + i].maaly = _root["knap" + i].starty; } } function openKnapper() { var tal = this._name.substring(4,5); for(var i=1;i<9;i++) { if(i<tal) _root["knap" + i].maaly = _root["knap" + i].starty - 10; else if(i>tal) _root["knap" + i].maaly = _root["knap" + i].starty + 10; } } function flytKnapper() { if(Math.abs(this._y - this.maaly) < 2) this._y = this.maaly; else if(this._y < this.maaly) this._y += 2; else if(this._y > this.maaly) this._y -= 2; } for(i=1;i<9;i++) { m = _root["knap" + i]; m.stop(); m.maaly = m.starty = m._y; m.onRollOver = openKnapper; m.onRollOut = lukKnapper; m.onEnterFrame = flytKnapper; } See ;) At bruge "m" til sidst er primært for overblikkets skyld, men også en smule for hastigheden - det vil nemlig eksekvere lidt hurtigere :)
09. marts 2005 - 23:16
#16
Og et svar. Og jeg synes stadig, at du kun bør sættes dine onEnterFrame's, når de er nødvendige - og slette dem igen, når de ikke skal bruges mere.
09. marts 2005 - 23:22
#17
din brug af "var" er lidt svingende ;) Men ellers fik jeg da noget ud af det :) Takker igen igen
09. marts 2005 - 23:53
#19
1) function openKnapper() { var tal = Number(_this_name.substring(3)); for(var i=1;i<9;i++) { if(i<tal) _root["knap" + i].maaly = _root["knap" + i].starty - 10; else if(i>tal) _root["knap" + i].maaly = _root["knap" + i].starty + 10; } } var m; //HVA SÅ DER for(var i=1;i<9;i++) { m = _root["knap" + i]; m.maaly = m.starty = m._y; 2) function flytKnapper() { if(Math.abs(this._y - this.maaly) < 2) this._y = this.maaly; else if(this._y < this.maaly) this._y += 2; else if(this._y > this.maaly) this._y -= 2; } for(i=1;i<9;i++) { m = _root["knap" + i]; m.stop(); m.maaly = m.starty = m._y; ;);) Den eneste grund til at jeg nævner det, er at du kan tage det. Men Få Lige Lidt KodeDiciplin Der :P
10. marts 2005 - 00:04
#20
Well, at bruge "var" på tidslinje variabler vil du også kunne finde viden om i ovenstående bog. At skrive det er i praksis overflødigt, men da man generelt bør var'e sine variabler, så kan det da ikke skade - for synets skyld :)
10. marts 2005 - 00:17
#21
jeg hører ikke så godt? VAR ??!! ;)
10. marts 2005 - 00:19
#22
Så er det godt! I seng!
10. marts 2005 - 00:24
#23
okay :D
10. marts 2005 - 00:25
#24
Og husk at bestille et eksemplar :)
10. marts 2005 - 00:34
#25
ok, beklager jg var lidt langsom kiggede først på linket nu... så, du har skrevet en bog nu. Det er da rørende. Men hvem fanden skulle ellers gøre det. Fra nu af skal du besvare sørgsmålene: "kig i side 138 i min bog" :P Du er da smuk med det der moderne flash
10. marts 2005 - 09:04
#26
Hehe tak ;)
12. marts 2005 - 10:20
#27
haha god idé legende.dk... en eller anden laver en søgemaskine som søger i bogens tekst og så bliver flash afdelingen bare skiftet ud med den ^__^
12. marts 2005 - 12:25
#28
:)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.