PDA

Volledige versie bekijken : AS tips (2)


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.

Roenes
%Europe/Berlin %492 %2005, 12:48
Waarom een 2e topic? Ik heb niet alles doorgelezen maar op het eerste gezicht staat er hetzelfde maar is het iets anders opgemaakt. Had je ook je originele post kunnen editten.

Of zie ik iets over het hoofd? :)

Jordy
%Europe/Berlin %531 %2005, 13:44
Ja roenes, hij wilde dit topic graag weer terug in handen nemen (ik had eerst t topic geopent). OMdat hij met een tutorial op basis van dit bezig is.

Roenes
%Europe/Berlin %538 %2005, 13:55
Ohw oke, op die manier :)

theFlashWizard
%Europe/Berlin %638 %2005, 16:19
dat was idd de bedoeling :)
enne voor TheSilentWitness en andere geintreseerde hier n paar goede tuturials:

AS beginners tuturials:
de 1ste 3 van:
http://www.actionscripts.org/tutorials.shtml
http://www.flashfocus.nl/showDetail.asp?TypeId=2&NewsId=4054

Hiėrarchie:
http://www.kirupa.com/developer/actionscript/tricks/root_parent_this.htm

functies
http://www.kirupa.com/developer/actionscript/functions.htm

Arrays:
http://www.actionscripts.org/tutorials/intermediate/Arrays/index.shtml

Loops
http://www.actionscripts.org/tutorials/intermediate/loops/index.shtml
http://www.actionscripts.org/tutorials/intermediate/Nested_loops/index.shtml

intervals
http://www.kirupa.com/developer/actionscript/setinterval.htm
http://www.actionscripts.org/tutorials/intermediate/setInterval/index.shtml

debugging:
http://www.actionscripts.org/tutorials/beginner/Common_Errors_and_Debugging/index.shtml

attach:
http://www.actionscripts.org/tutorials/beginner/attachMovie/index.shtml

loadVariables & loadVars:
http://www.actionscripts.org/tutorials/beginner/loadVariables_and_loadVars/index.shtml

loadMovie:
http://www.flashfocus.nl/showDetail.asp?TypeId=2&NewsId=5702

MovieClipLoader:
http://www.kirupa.com/developer/actionscript/moviecliploader2.htm
http://www.actionscripts.org/tutorials/intermediate/MovieClipLoader_in_Flash_MX_2004/index.shtml
http://www.actionscripts.org/tutorials/intermediate/MovieClipLoader_in_Flash_MX_2004_Part2/index.shtml

optimization:
http://www.gotoandplay.it/_articles/2004/01/as_optimizations.php

ik mis nog:
property's
events
date object

aanvullingen, opmerkingen enz zijn welkom! :)

FredericCox
%Europe/Berlin %653 %2005, 16:40
Uitleg ivm date object, datums vergelijken ed zou handig zijn

Roenes
%Europe/Berlin %679 %2005, 17:19
Uitleg ivm date object, datums vergelijken ed zou handig zijnMijn antwoord rechtstreeks uit jouw topic (en tevens een tip denk ik)

---

Kan heel makkelijk:
- Maak 2 date objecten aan. 1 met de begindatum en 1 met de einddatum
- Maak een date object aan met de huidige tijd.
- vergelijk dan of nu groter is als begindatum en kleiner is als einddatum.

Je kan dit gewoon doen omdat een date object ook te representeren is als een aantal milliseconden. Daarom kun je gewoon vergelijkingen erop los laten.

Klein voorbeeld:

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 posten

theFlashWizard
%Europe/Berlin %070 %2005, 01:42
Bump!
Ik wou deze post nog heel even onder de aandacht brengen.
Het is een tijd terug dat ik deze post ben begonnen, mischien weten er mensen nog simpele nieuwe tips en weetjes voor de beginnende actionscripter?
Ook is het waarscheinlijk nog best wel leerzaam voor de nieuwe bezoekers onder ons.

Ik heb alles even doorgekeken en bijv alle [ code] tags voor [ as] tags vervangen en per persoon duidelijker aangegeven dat het zijn lijst is door een groter, bold en gekleurt lettertype.
De mensen die bij anderen wat op te merken hadden heb ik nu gewoon bold gelaten.
Ik heb deze post ook even apart en dus duidelijker onder tips neergezet in het beginners gedeelte van de actionscript tutorials sticky.

Heel mischien is het een optie alle losse posts hierboven te verwijderen aangezien die nu nutteloos zijn?

Stuf
%Europe/Berlin %085 %2005, 02:03
goed man..

Heb deze post nooit gezien..
Het zit nu in mn favorieten..

theFlashWizard
%Europe/Berlin %123 %2005, 02:58
nuttige handtekening man ;)
easing en scaling tutz staan bij me tutz sticky onder beweging/easing
via the big list ben ik zeker 6 nieuwe flash recource sites tegengekomen :)
waaronder deze dictionary die veel sneller werkt dan f1 of de livedocs:
http://www.flashmove.com/dictionary/dictionary.php?action=show&grpid=1

Pointer
%Europe/Berlin %126 %2005, 03:01
Description Go to a frame of movie clip and start playing
Examples .gotoAndPlay(frame)
Quick Keys Esc + g + p

Ja en dan nog meer codes uit je hoofd gaan leren.

Anyway misschien is dit wel een leuke tip voor mensen, aangezien ze ((te)weinig/ - of geen) gebruik maken van Livedocs, en - of F1

html ActionScript 2.0 References :) nog sneller.
Linkie:
Hier (http://weblogs.macromedia.com/dehaan/archives/2005/09/index.cfm)



Greetz://
http://home.student.utwente.nl/l.d.meijerink/Option/signature.swf

theFlashWizard
%Europe/Berlin %138 %2005, 03:19
hihi tja.. esc sneltoetsen kunnen handig zijn.. bijv voor functies: esc+f+n of trace esc+t+r dacht ik..

whow.. maar geef dan direct deze link:
http://download.macromedia.com/pub/documentation/en/flash/fl8/flash_as2lr.zip
Kmis alleen heel erg een zoekfunctie hierbij

Pointer
%Europe/Berlin %631 %2005, 15:09
Er zit een index in eh. =]


Maar idd, zoeken is niet geregeld daar. F3, kun je wel binnen je pagina zoeken, of CTRL - F :)


Greetz://
http://home.student.utwente.nl/l.d.meijerink/Option/signature.swf

theFlashWizard
%Europe/Berlin %775 %2005, 18:36
maar back on topic, niemand meer handige tips of weetjes?
alvast bedankt

TheZwier
%Europe/Berlin %001 %2005, 00:02
klein tipje:
Als je met een button werkt, verwijst this. niet naar de button zelf maar naar zijn parent! Dus met een button op de _root met de actie:
on (release){
this.nextFrame();
} Gaat de _root naar de nextframe!

Roenes
%Europe/Berlin %034 %2005, 00:49
klein tipje:
Als je met een button werkt, verwijst this. niet naar de button zelf maar naar zijn parent!ter aanvulling: dat komt doordat de button zelf geen timeline heeft. Bij een mc werkt dat grapje dus niet omdat een dergelijke actie direct invloed heeft op de timeline van zichzelf. Aangezien een button dat niet kan, wordt er naar de parent verwezen :)

theFlashWizard
%Europe/Berlin %069 %2005, 01:40
staat erbij jongens :)