theFlashWizard
%Europe/Berlin %972 %2005, 00:19
AStips
(voor beginners)
Hier een opsomming van een paar tips en weetjes over ActionScript.
Dingen die je anders alleen door n vlink zooitje experimenten, of door een boel ervaring leert.
theFlashWizard:
Elke mc bevat zijn eigen Depths.
Grapichs kan je niet aanspreken want die hebben geen instancename
Eventuele textvakken kun je in buttons niet bewerken, in mc's wel
gebruik de trace method daarbij kan je 98% van de bugs vinden
Voor wanneer je buttons in een for() lus wilt zetten.
De i is dan niet meer opvraagbaar in een onRelease omdat wanneer je op de knop drukt
de for lus al gemaakt is en de i de waarde al heeft van de laatste i die de lus gemaakt heeft.
for(i=1;i<=4;i++){
this["button"+i].onRelease = function(){
trace(i) //dat geeft: 4
}
}
TheZwier:
De beste oplossing is een variabele aan te maken in de mc/button zelf met de i.
Dus zoiets:
for(i=1;i<=4;i++){
this["button"+i].i = i
this["button"+i].onRelease = function(){
trace(i) //dat geeft: 4
trace(this.i) //dat geeft: de echte i
}
}
Een onRelease kan je geen argumenten mee geven
Andere kortere if else constructies:
if(...)...
else ....
of
(...)? ... : ...
Probeer niet alles in een onEnterFrame te zetten, leer functies gebruiken
Leer ook array's gebruiken, komen veel vaker te pas dan je zou denken
Kom je ergens niet uit, pak pen en papier en schrijf en teken het uit.
Je kan maar 1 onEnterFrame maken per mc. anders overschrijven ze elkaar.
Je kan geen behaviors/events aan iets toekennen dat al in iets zit dat al behaviors/events heeft.
je kan aan meerdere events 1 functie hangen:
mc1.onRelease = mc1.onReleaseOutside = function(){
//actie
}
Als je met een button werkt, verwijst this. niet naar de button zelf maar naar zijn parent. Dus met een button met de actie:
on (release){
this.nextFrame();
}
Gaat de timeline waar de button opstaat naar de nextframe.
Roenes
Dat komt doordat de button zelf geen timeline heeft. Bij een mc werkt dat grapje dus niet omdat een dergelijke actie direct invloed heeft zijn timeline. Aangezien een button dat niet kan, wordt er naar de parent verwezen.
Saphua:
Ikzeld vind het prettiger om alle (98% van de) code op frame1 te zetten, zo blijft alles overzichtelijker.
Verder vermijd ik het gebruik van scenes *altijd*
Wat ik persoonlijk fijn coden vind is het volgende; als voorbeeld genomen, een spel
waarin een poppetje een upgrade kan krijgen waarin hij van normal- naar supermode
veranderd en sneller kan lopen:
function normalMode(){
hero._x += 5;
}
this.onEnterFrame = normalMode;
Zoals je ziet maak ik van een functie een onEnterFrame, en kan ik deze razendsnel switchen.
Dit is zeer fijn om te gebruiken voor dit soort type applicaties/games.
theFlashWizard:
Op deze manier kun je dus functies verbinden aan events, zo kan je dus ook makkelijk de functie achter een onRelease wisselen.
Het is ook voor flash makkelijker als je binnen een for() lus verschillende rollovers naar dezelfde functie stuurd..
Dan heeft hij die text maar 1x namelijk en anders x het aantal bijv rollOvers
Dauntless:
Als je dus een poppetje wilt laten lopen, maak dan een tijdelijke x en y aan voor het poppetje. Bereken dan (dmv wiskunde) of
het poppetje iets raakt en pas de x en y aan. Op het einde van de frame dan de _x en _y gelijkstellen aan x en y.
Nog een tip, zet ALLES op frames! Anders vind je het moeilijk terug! Frames zijn overzichtelijk!
Gebruik altijd framelabels. Het verwijzen naar framenumbers is namelijk nog altijd bugy. Lees dit maar (http://www.macromedia.com/cfusion/knowledgebase/index.cfm?id=tn_15703).
Probeer alles zo dynamisch mogelijk te houden, dat schilt je achteraf een heleboel werk.
Voorbeeld1:
Goed:
speedX = 5
_root.onEnterFrame = function(){
hero._x += speedX
}
Fout:
_root.onEnterFrame = function(){
hero._x += 5
}
Voorbeeld2:
Goed:
speedX = 5
radiusX = hero._width/2
minX = 0+radiusX
_root.onEnterFrame = function(){
if(hero._x <= minX){
hero._x = minX
}else{
hero._x -= speedX
}
}
Fout:
_root.onEnterFrame = function(){
if(hero._x <= 50){
hero._x = 50
}else{
hero._x -= 5
}
}
F1 is uitgebreid!
geef duidelijke instance namen, da's ook handig om te debuggen
zoek uit hoe die debugger werkt (en als je het weet, zeg het me dan eens het lukt me echt niet ... :-p)
Gebruik bij txtvakken altijd de instancenaam. Alleen voor debuggen is de var naam handig, aangezien je dan geen
rekening moet houden met scoping (of toch in sommige gevallen niet) en de var wordt altijd geupdate.
Houdt zoveel mogelijk extern!
Werk relatief! dus met this en parent ipv _root. dat voorkomt ondereandere problemen die je anders geheid krijgt.
Snelste manier om met Drawing API een bol te tekenen:
this.lineStyle(20, 0xFF0000, 100);
this.lineTo(0, 1);
En je hebt een mooie grote rode bol.
Roenes:
Gebruik de nieuwe syntax, dus ipv:
setProperty(hero,_x,5)
dit:
hero._x = 5
ziet er ook een stuk logischer uit.
Hanteer je eigen opmaak regels tijdens zet scripten. bijv een { wel of niet op een volgende regel,
variabelen wel of niet in hoofdletters
en zo zijn er nog heeeeeel veeeeel van dat soort "regeltjes" die je kan hanteren.
Schrijf scripts ook altijd in 1 taal.
Tips over hoe je je script sneller of minder CPU intensief laat werken: klik (http://www.flashfiles.nl/forum/topic.asp?TOPIC_ID=36253&FORUM_ID=801&CAT_ID=21&Topic_Title=%5BDISCUSSIE%5D+Snelheids+verbetering% 2Ftrucjes+in+AS&Forum_Title=4%2E+Actionscript+Showcase)
Je kan date objecten gewoon vergelijken:
var d1 = new Date(2005, 5, 28, 17, 0, 0, 0);
var d2 = new Date(2005, 5, 28, 18, 0, 0, 0);
var nu = new Date();
trace(nu > d1 && nu < d2); //Wordt true op het moment van post
laiverd :
verdeel je applicatiecode in zo klein mogelijke stukjes en bouw zo steeds kleine steentjes die je test
gebruik de voorbeelden in de handleiding actionscript als je even niet snapt hoe iets werkt
zet voordat je begint je computer uit en maak eerst een plan:
Verdeling van je movie in verschillende swf bestanden,
welke data hou je extern en hoe wil je ze binnen halen.
Zet dan eerst de structuur neer in directories en dummy swf bestanden, maak alle nodige assets (foto's, xml etc) en ga dan pas echt aan de slag.
Zo voorkom je dat achteraf blijkt dat je dingen niet zo handig hebt aangepakt en je dus meer tijd kwijt bent
maak dingen niet moeilijker dan ze hoeven te zijn. In mijn ervaring zijn zaken vaak veel simpeler op te lossen dan je in eerste instantie denkt
Jordy:
als je een bepaalde AS functie niet snapt, test het dan eerst in een lege flash movie, alvorens je m gaat oefenen in je huidige flashmovie.
Zo voorkom je fouten.
Invisible:
Let goed op de wiskundige operatoren.
hou in de gaten dat = een toekennings teken is en == een gelijk aan teken is
Khoop dat jullie er wat aan hebben, voor meer goede tips of aanvullingen kun je me altijd mailen.
(voor beginners)
Hier een opsomming van een paar tips en weetjes over ActionScript.
Dingen die je anders alleen door n vlink zooitje experimenten, of door een boel ervaring leert.
theFlashWizard:
Elke mc bevat zijn eigen Depths.
Grapichs kan je niet aanspreken want die hebben geen instancename
Eventuele textvakken kun je in buttons niet bewerken, in mc's wel
gebruik de trace method daarbij kan je 98% van de bugs vinden
Voor wanneer je buttons in een for() lus wilt zetten.
De i is dan niet meer opvraagbaar in een onRelease omdat wanneer je op de knop drukt
de for lus al gemaakt is en de i de waarde al heeft van de laatste i die de lus gemaakt heeft.
for(i=1;i<=4;i++){
this["button"+i].onRelease = function(){
trace(i) //dat geeft: 4
}
}
TheZwier:
De beste oplossing is een variabele aan te maken in de mc/button zelf met de i.
Dus zoiets:
for(i=1;i<=4;i++){
this["button"+i].i = i
this["button"+i].onRelease = function(){
trace(i) //dat geeft: 4
trace(this.i) //dat geeft: de echte i
}
}
Een onRelease kan je geen argumenten mee geven
Andere kortere if else constructies:
if(...)...
else ....
of
(...)? ... : ...
Probeer niet alles in een onEnterFrame te zetten, leer functies gebruiken
Leer ook array's gebruiken, komen veel vaker te pas dan je zou denken
Kom je ergens niet uit, pak pen en papier en schrijf en teken het uit.
Je kan maar 1 onEnterFrame maken per mc. anders overschrijven ze elkaar.
Je kan geen behaviors/events aan iets toekennen dat al in iets zit dat al behaviors/events heeft.
je kan aan meerdere events 1 functie hangen:
mc1.onRelease = mc1.onReleaseOutside = function(){
//actie
}
Als je met een button werkt, verwijst this. niet naar de button zelf maar naar zijn parent. Dus met een button met de actie:
on (release){
this.nextFrame();
}
Gaat de timeline waar de button opstaat naar de nextframe.
Roenes
Dat komt doordat de button zelf geen timeline heeft. Bij een mc werkt dat grapje dus niet omdat een dergelijke actie direct invloed heeft zijn timeline. Aangezien een button dat niet kan, wordt er naar de parent verwezen.
Saphua:
Ikzeld vind het prettiger om alle (98% van de) code op frame1 te zetten, zo blijft alles overzichtelijker.
Verder vermijd ik het gebruik van scenes *altijd*
Wat ik persoonlijk fijn coden vind is het volgende; als voorbeeld genomen, een spel
waarin een poppetje een upgrade kan krijgen waarin hij van normal- naar supermode
veranderd en sneller kan lopen:
function normalMode(){
hero._x += 5;
}
this.onEnterFrame = normalMode;
Zoals je ziet maak ik van een functie een onEnterFrame, en kan ik deze razendsnel switchen.
Dit is zeer fijn om te gebruiken voor dit soort type applicaties/games.
theFlashWizard:
Op deze manier kun je dus functies verbinden aan events, zo kan je dus ook makkelijk de functie achter een onRelease wisselen.
Het is ook voor flash makkelijker als je binnen een for() lus verschillende rollovers naar dezelfde functie stuurd..
Dan heeft hij die text maar 1x namelijk en anders x het aantal bijv rollOvers
Dauntless:
Als je dus een poppetje wilt laten lopen, maak dan een tijdelijke x en y aan voor het poppetje. Bereken dan (dmv wiskunde) of
het poppetje iets raakt en pas de x en y aan. Op het einde van de frame dan de _x en _y gelijkstellen aan x en y.
Nog een tip, zet ALLES op frames! Anders vind je het moeilijk terug! Frames zijn overzichtelijk!
Gebruik altijd framelabels. Het verwijzen naar framenumbers is namelijk nog altijd bugy. Lees dit maar (http://www.macromedia.com/cfusion/knowledgebase/index.cfm?id=tn_15703).
Probeer alles zo dynamisch mogelijk te houden, dat schilt je achteraf een heleboel werk.
Voorbeeld1:
Goed:
speedX = 5
_root.onEnterFrame = function(){
hero._x += speedX
}
Fout:
_root.onEnterFrame = function(){
hero._x += 5
}
Voorbeeld2:
Goed:
speedX = 5
radiusX = hero._width/2
minX = 0+radiusX
_root.onEnterFrame = function(){
if(hero._x <= minX){
hero._x = minX
}else{
hero._x -= speedX
}
}
Fout:
_root.onEnterFrame = function(){
if(hero._x <= 50){
hero._x = 50
}else{
hero._x -= 5
}
}
F1 is uitgebreid!
geef duidelijke instance namen, da's ook handig om te debuggen
zoek uit hoe die debugger werkt (en als je het weet, zeg het me dan eens het lukt me echt niet ... :-p)
Gebruik bij txtvakken altijd de instancenaam. Alleen voor debuggen is de var naam handig, aangezien je dan geen
rekening moet houden met scoping (of toch in sommige gevallen niet) en de var wordt altijd geupdate.
Houdt zoveel mogelijk extern!
Werk relatief! dus met this en parent ipv _root. dat voorkomt ondereandere problemen die je anders geheid krijgt.
Snelste manier om met Drawing API een bol te tekenen:
this.lineStyle(20, 0xFF0000, 100);
this.lineTo(0, 1);
En je hebt een mooie grote rode bol.
Roenes:
Gebruik de nieuwe syntax, dus ipv:
setProperty(hero,_x,5)
dit:
hero._x = 5
ziet er ook een stuk logischer uit.
Hanteer je eigen opmaak regels tijdens zet scripten. bijv een { wel of niet op een volgende regel,
variabelen wel of niet in hoofdletters
en zo zijn er nog heeeeeel veeeeel van dat soort "regeltjes" die je kan hanteren.
Schrijf scripts ook altijd in 1 taal.
Tips over hoe je je script sneller of minder CPU intensief laat werken: klik (http://www.flashfiles.nl/forum/topic.asp?TOPIC_ID=36253&FORUM_ID=801&CAT_ID=21&Topic_Title=%5BDISCUSSIE%5D+Snelheids+verbetering% 2Ftrucjes+in+AS&Forum_Title=4%2E+Actionscript+Showcase)
Je kan date objecten gewoon vergelijken:
var d1 = new Date(2005, 5, 28, 17, 0, 0, 0);
var d2 = new Date(2005, 5, 28, 18, 0, 0, 0);
var nu = new Date();
trace(nu > d1 && nu < d2); //Wordt true op het moment van post
laiverd :
verdeel je applicatiecode in zo klein mogelijke stukjes en bouw zo steeds kleine steentjes die je test
gebruik de voorbeelden in de handleiding actionscript als je even niet snapt hoe iets werkt
zet voordat je begint je computer uit en maak eerst een plan:
Verdeling van je movie in verschillende swf bestanden,
welke data hou je extern en hoe wil je ze binnen halen.
Zet dan eerst de structuur neer in directories en dummy swf bestanden, maak alle nodige assets (foto's, xml etc) en ga dan pas echt aan de slag.
Zo voorkom je dat achteraf blijkt dat je dingen niet zo handig hebt aangepakt en je dus meer tijd kwijt bent
maak dingen niet moeilijker dan ze hoeven te zijn. In mijn ervaring zijn zaken vaak veel simpeler op te lossen dan je in eerste instantie denkt
Jordy:
als je een bepaalde AS functie niet snapt, test het dan eerst in een lege flash movie, alvorens je m gaat oefenen in je huidige flashmovie.
Zo voorkom je fouten.
Invisible:
Let goed op de wiskundige operatoren.
hou in de gaten dat = een toekennings teken is en == een gelijk aan teken is
Khoop dat jullie er wat aan hebben, voor meer goede tips of aanvullingen kun je me altijd mailen.