Jordy
%Europe/Berlin %920 %2005, 23:05
Originele post bij theFlashWizard
AStips:
(voor beginners)
Hier een opsomming van een paar tips en weetjes over ActionScript.
Dingen waar je anders n vlink zooitje experimenten voor zou moeten maken.
Of dingen die je alleen door ervaring leert.
theFlashWizard:
1. Elke mc bevat zijn eigen Depths.
2. Grapichs kan je niet aanspreken want die hebben geen instancename
3. Eventuele textvakken kun je in buttons niet bewerken, in mc's wel
4. gebruik de trace method daarbij kan je 98% van de bugs vinden
5. 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
}
}
6. Een onRelease kan je geen argumenten mee geven
7. Andere kortere if else constructies:
if(...)...
else ....
of
(...)? ... : ...
8. Probeer niet alles in een onEnterFrame te zetten, leer functies gebruiken
9. Leer ook array's gebruiken, komen veel vaker te pas dan je zou denken
10. Kom je ergens niet uit, pak pen en papier en schrijf en teken het uit.Kom je ergens niet uit, pak pen en papier en schrijf en teken het uit.
11. Je kan maar 1 onEnterFrame maken per mc. anders overschrijven ze elkaar.
12. Je kan geen behaviors/events aan iets toekennen dat al in iets zit dat al behaviors/events heeft.
13. je kan aan meerdere events 1 functie hangen:
mc1.onRelease = mc1.onReleaseOutside = function(){
//actie
}
Saphua:
1. 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*
2. 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:]
1. 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.
2. Nog een tip, zet ALLES op frames! Anders vind je het moeilijk terug! Frames zijn overzichtelijk!
3. Gebruik altijd framelabels. Het verwijzen naar framenumbers is namelijk nog altijd bugy. Lees dit maar.
4. 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
}
}
5. F1 is uitgebreid!
6. geef duidelijke instance namen, da's ook handig om te debuggen
7. zoek uit hoe die debugger werkt (en als je het weet, zeg het me dan eens :D het lukt me echt niet ... :-p)
8. 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.
9. Houdt zoveel mogelijk extern!
10. Werk relatief! dus met this en parent ipv _root. dat voorkomt ondereandere problemen die je anders geheid krijgt.
11. 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:
1. Gebruik de nieuwe syntax, dus ipv:
setProperty(hero,_x,5)
dit:
hero._x = 5
ziet er ook een stuk logischer uit.
2. 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.
3. Schrijf scripts ook altijd in 1 taal.
4. Tips over hoe je je script sneller of minder CPU intensief laat werken: klik (http://www.flashfocus.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)
laiverd :
1. verdeel je applicatiecode in zo klein mogelijke stukjes en bouw zo steeds kleine steentjes die je test
2. gebruik de voorbeelden in de handleiding actionscript als je even niet snapt hoe iets werkt
3. 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
4. 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:
1. 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:
1. Let goed op de wiskundige operatoren.
getal = 0
if(getal = 1) {
trace("getal is 1")
}
Zal niet goed gaan werken, de "=" betekent in AS (en javascript e.d.) als een toekennings teken. Hier kent hij dus het cijfer 1 aan de variabele "getal" toe.
getal = 0
if(getal == 1) {
trace("getal is 1")
}
de "==" staat voor "is gelijk aan". Dit betekent dus, als de variabele "getal" gelijk staat aan de waarde "1".
AStips:
(voor beginners)
Hier een opsomming van een paar tips en weetjes over ActionScript.
Dingen waar je anders n vlink zooitje experimenten voor zou moeten maken.
Of dingen die je alleen door ervaring leert.
theFlashWizard:
1. Elke mc bevat zijn eigen Depths.
2. Grapichs kan je niet aanspreken want die hebben geen instancename
3. Eventuele textvakken kun je in buttons niet bewerken, in mc's wel
4. gebruik de trace method daarbij kan je 98% van de bugs vinden
5. 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
}
}
6. Een onRelease kan je geen argumenten mee geven
7. Andere kortere if else constructies:
if(...)...
else ....
of
(...)? ... : ...
8. Probeer niet alles in een onEnterFrame te zetten, leer functies gebruiken
9. Leer ook array's gebruiken, komen veel vaker te pas dan je zou denken
10. Kom je ergens niet uit, pak pen en papier en schrijf en teken het uit.Kom je ergens niet uit, pak pen en papier en schrijf en teken het uit.
11. Je kan maar 1 onEnterFrame maken per mc. anders overschrijven ze elkaar.
12. Je kan geen behaviors/events aan iets toekennen dat al in iets zit dat al behaviors/events heeft.
13. je kan aan meerdere events 1 functie hangen:
mc1.onRelease = mc1.onReleaseOutside = function(){
//actie
}
Saphua:
1. 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*
2. 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:]
1. 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.
2. Nog een tip, zet ALLES op frames! Anders vind je het moeilijk terug! Frames zijn overzichtelijk!
3. Gebruik altijd framelabels. Het verwijzen naar framenumbers is namelijk nog altijd bugy. Lees dit maar.
4. 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
}
}
5. F1 is uitgebreid!
6. geef duidelijke instance namen, da's ook handig om te debuggen
7. zoek uit hoe die debugger werkt (en als je het weet, zeg het me dan eens :D het lukt me echt niet ... :-p)
8. 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.
9. Houdt zoveel mogelijk extern!
10. Werk relatief! dus met this en parent ipv _root. dat voorkomt ondereandere problemen die je anders geheid krijgt.
11. 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:
1. Gebruik de nieuwe syntax, dus ipv:
setProperty(hero,_x,5)
dit:
hero._x = 5
ziet er ook een stuk logischer uit.
2. 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.
3. Schrijf scripts ook altijd in 1 taal.
4. Tips over hoe je je script sneller of minder CPU intensief laat werken: klik (http://www.flashfocus.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)
laiverd :
1. verdeel je applicatiecode in zo klein mogelijke stukjes en bouw zo steeds kleine steentjes die je test
2. gebruik de voorbeelden in de handleiding actionscript als je even niet snapt hoe iets werkt
3. 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
4. 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:
1. 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:
1. Let goed op de wiskundige operatoren.
getal = 0
if(getal = 1) {
trace("getal is 1")
}
Zal niet goed gaan werken, de "=" betekent in AS (en javascript e.d.) als een toekennings teken. Hier kent hij dus het cijfer 1 aan de variabele "getal" toe.
getal = 0
if(getal == 1) {
trace("getal is 1")
}
de "==" staat voor "is gelijk aan". Dit betekent dus, als de variabele "getal" gelijk staat aan de waarde "1".