Laver du inline eller ekstern ActionScript kode? Stem nu!

Kategori: Diverse | Kommentarer (4)
Gemt: 2007-06-28 8:48


Kom til at snakke med en kollega om fordelingen, og så var det jo oplagt med en poll.

Med inline kode forståes ActionScript som er skrevet på frames inde i selve fla-filen.
Med ekstern kode forståes ActionScript som er skrevet i en seperat as-fil, hvad enten den er skrevet i Flash eller en anden kodeeditor.

Opdatering
Har fjernet afstemningen da den gjorde siden sløv, men her er resultaterne efter 20 stemmer:

Hvor skriver du det meste af din ActionScript kode?
Al koden inline i fla-filer: 35%
Hovedparten af koden inline i fla-filen: 10%
50/50: 10%
Hovedparten i en ekstern as-fil: 25%
Al kode i en ekstern as-fil: 20%

Ganske interessant, at der er præcis lige mange på hver side af 50/50, så begge tilgange bruges åbenbart lige meget.


Lav din egen højre-kliks menu i Flash

Kategori: Tips og tricks | Kommentarer (0)
Gemt: 2007-05-30 10:26


ContextMenuSkrev i sidste uge en lille indlæg om Jubii Yeah, hvor jeg blandt andet fortalte hvordan vi på det projekt udnytter muligheden for at man kan tilpasse højre-kliks menuen i Flash. Dagens indlæg handler om hvordan du selv kan gøre det samme.

Hjælpen i Flash på dette område er faktisk god og dækkende, men det svære med hjælp er jo at man skal vide hvad tingene hedder for at kunne finde det, og den klasse som styrer højre-kliks menuen hedder ContextMenu, og selve menupunkterne er af typen ContextMenuItem.

Herunder er et meget simpelt eksempel:

var Menu_cm:ContextMenu = new ContextMenu();

//Skjuler de eksisterende menupunkter, svarende til at menu=false i html
Menu_cm.hideBuiltInItems();

//Opretter mit eget menupunkt
var MenuPunkt1_cmi:ContextMenuItem = new ContextMenuItem("Min menu", testFunktion);

//Tilføjer punktet til min menu
Menu_cm.customItems.push(MenuPunkt1_cmi);

//Sætter min menu til at være den menu der skal bruges
this.menu = Menu_cm;

function testFunktion() {
	trace("weeeee :-) ");
}

Koden burde være temmeligt selvforklarende, men der er et par ekstra ting der er værd at bemærke.

Hvis den funktion som du sætter menupunktet til at kalde ikke eksisterer, så dukker menupunktet simpelthen ikke op når man højre-klikker. For i det hele taget at kunne se punktet, så skal du kalde en funktion der findes, som dog så kan være stort set tom som i dette tilfælde.

Når du har planer om at ændrer højre-kliks menuen, så må menu parametret i html’en ikke samtidig være sat til false, det vil nemlig altid overrule det som du sætter det til inde i Flash-filen. Med andre ord, er menu=false, så dukker der ingen punkter op.

Det er også muligt at ændre på menupunktet efter det er tilføjet, eksempelvis kan du disable det:

MenuPunkt1_cmi.enabled = false;

Eller ændre teksten:

MenuPunkt1_cmi.caption = "Ny tekst";

Alt i alt er det super nemt og brugt rigtigt kan det være særdeles nyttigt.


CTRL+T: Check ActionScript syntax inden publish

Kategori: Tips og tricks | Kommentarer (0)
Gemt: 2007-02-19 12:43


Du kender det godt, gør du ikke?
Du sidder med en kæmpe fla, hvor tiden det tager at publishe efterhånden er oppe på over et halvt minut, og når den så endelig har publishet, så ser du med det samme i output-vinduet at der er en simpel syntax-fejl i dit ActionScript. Med andre ord, tid til at rette en [ til en ( og så give sig til at vente igen.

Men, det kan faktisk temmelig nemt undgåes!

Når du inde i Flash er i ActionScript-vinduet, så er det i toppen af vinduet en lille bjælke med ikoner:
Flash - Check Syntax

Hvis man klikker på flueben-ikonet checker Flash din syntax, og viser eventuelle problemer i output-vinduet.

Okay, det vidste du sikkert godt og du bruger den sikkert og regelmæssigt, men af en eller anden grund er det aldrig lykkedes mig at huske at bruge den konsekvent, på trods af at det jo er en smart funktion.

Men, man kan kalde den præcis samme funktion med CTRL+T, og dermed uden at hænderne behøver at forlade tastaturet, og det har gjort en verden til forskel for mig, for nu husker jeg rent faktisk at bruge den.


Kald ActionScript funktion via htmlText

Kategori: Tips og tricks | Kommentarer (2)
Gemt: 2007-02-7 12:21


Et lille hurtigt tip.

Er igang med en opgave hvor jeg har behov for at kunne kalde en ActionScript funktion fra et TextField der viser html.

Der står umiddelbart intet om det i dokumentationen, i hvert fald ikke steder hvor det er nemt at spotte, men det er rent faktisk nemt og simpelt at gøre!

Almindeligt link:
<a href=\"www.jubii.dk\">Jubii</a>

Link der kalder en funktion i ActionScript:
<a href=\"asfunction:minFunktion\">minFunktion</a>

Yderligere information kan findes her:
How can I use htmlText to call an ActionScript function?


Arrays og String.split()

Kategori: Tips og tricks | Kommentarer (5)
Gemt: 2007-01-30 14:29


Jeg kan lige så godt sige det som det er, jeg elsker arrays!
Kan noget ikke laves ved hjælp af et loop, så bør man måske overveje om det i det hele taget er værd at lave?

Spøg til side, jeg er faktisk vild med arrays og i går havde jeg en problemstilling hvor de, sammen med den ligeledes klassiske String.split(), var den perfekte løsning.

Jeg sidder i øjeblikket og arbejder på en kampagne for en unavngiven større dansk radiostation som gå i luften 1. februar.
For at høre radio skal man kende frekvensen på det man ønsker at lytte til, og modsat internettet hvor alle skal indtaste den samme adresse for at finde det samme indhold, så er det en helt anden historie når vi snakker FM frekvenser.

I dette tilfælde er der cirka 25 forskellige frekvenser der hver især dækker forskellige dele af landet.
For at gøre det nemt for brugerne er vi derfor i gang med at producere noget materiale der blandt andet indeholder en lille funktion, hvor man ved at indtaste sit postnummer får en radiofrekvens retur.

Til det formål har jeg modtaget en frekvens liste der starter sådan her:

By Frekvens Postnumre
København 91,4 555-3670
Sydsjælland 103,9 4000-4983
Fyn 93,4 5000-5985
Middelfart 106,6 5500

Og sådan fortsætter den ellers derudaf, intet odiøst i det.

Men, bemærkede du den sidste på listen, Middelfart?
Her er der ikke tale om et postnummer interval, men derimod om et specifikt postnummer, som ovenikøbet er inde i et allerede eksisterende interval, der har en anden frekvens.
Med andre ord, så ville jeg få et positivt match både hvis jeg lavede en funktion der testede om 5500 var mellem 5000-5985, samt hvis jeg lavede en der testede om 5500 var lig med 5500.

I det her tilfælde blev det besluttet, at hvis et postnummer har et præcist match, så har det match højere prioritet end hvis det er med i et interval.
Løsningen er således først at tjekke om der er et præcist match, og hvis der ikke er det, så tjekke om det er med i et interval.

Okay, nu har vi tænkt de mulige scenarier og problemstillinger igennem, så nu er det tid til at kode en løsning.

Første skridt er at lave vores tabel om til nogle data som man kan arbejde videre med.
I mange tilfælde ville man nok vælge at bruge XML, men da dataene i dette tilfælde skal bruges i et banner, er det en stor fordel hvis man kan undgå at loade noget eksternt, så derfor er det simpelthen hardcodet:
(Bynavnene skulle ikke bruges i dette tilfælde, derfor er de udeladt)

var arrFrek1:Array = new Array(); //Specifikke postnumre
var arrFrek2:Array = new Array(); //Intervaller

arrFrek1.push("5500@106,6");

arrFrek2.push("555:3650@91,4");
arrFrek2.push("4000:4983@103,9");
arrFrek2.push("5000:5985@93,4");

Push funktionen gør simpelthen det at den indsætter den pågældende tekststreng som et nyt punkt i enden af array’et.
Så, nu har vi to arrays, et med specifikke postnumre og et med postnummerintervaller.

Næste skridt er så at lave en funktion der løber de to arrays igennem for at finde frekvensen til et bestemt postnummer.
Jeg har forsøgt at forklare koden med kommentarer i koden:

function findFrekvens(Frekvens:Number):String {
	var arrTemp1:Array = new Array();
	var arrTemp2:Array = new Array();
	var frekvensOutput:String = undefined; //Den streng funktionen skal returnere

	for(i = 0; i < arrFrek1.length; i++) {
		arrTemp1 = arrFrek1[i].split("@"); //Splitter data strengen, så vi kan teste på postnummeret
		if(Number(arrTemp1[0]) == Frekvens) { //Er postnummeret lig med postnummeret for denne frekvens
			frekvensOutput = arrTemp1[1]; //Gemmer frekvensen
			break; //Stopper loopet
		}
	}

	if(frekvensOutput == undefined) { //Blev der fundet et match i det første loop?
		for(i = 0; i < arrFrek2.length; i++) {
			arrTemp1 = arrFrek2[i].split("@");
			arrTemp2 = arrTemp1[0].split(":");
			if(Frekvens >= Number(arrTemp2[0]) && Frekvens <= Number(arrTemp2[1])) { //Er postnummeret i intervallet
				frekvensOutput = arrTemp1[1];
				break;
			}
		}
	}

	return frekvensOutput; //Returnerer den fundne frekvens, eller undefined hvis ingen blev fundet
}

Voila, ved hjælp at et par arrays eller fire samt nogle splits, så fik vi lavet en lille simpel funktion.

Hvis det var en funktion der ville blive kaldt mange gange af den samme bruger, så kunne man sagtens vælge at definere data anderledes, så man ikke brugte unødig CPU på at gentage de mange splits, så ville det se sådan her ud:

arrFrek2.push(new Array(new Array("5000","5985"),"93,4");

Men, i dette tilfælde har jeg prioriteret overskueligheden højere, særligt da 9 ud af 10 brugere kun vil kalde funktion én gang.

Så, det var et bud fra min side på en løsning af en meget specifik problemstilling, håber det kan bruges til noget.

NB: Har set at kodedelen bryder designet lidt, men syntes at det var vigtigt at den var rigtigt formatteret for at give et bedre overblik, må lige se om jeg kan få opdateret min template på et tidspunkt.


Forskelle på ActionScript 2.0 og ActionScript 3.0

Kategori: Diverse | Kommentarer (0)
Gemt: 2007-01-25 14:49


Er du på udkig efter en hurtig oversigt af, hvilke funktioner og objekter der har fået nye navne i ActionScript 3.0, samt hvilke nye funktioner der er blevet tilføjet, så er her et super godt overblik fra Adobe:
ActionScript 2.0 Migration


Bevar proportionerne på hjørner når de skaleres med ActionScript

Kategori: Tips og tricks | Kommentarer (0)
Gemt: 2006-12-8 11:14


Hvis der er en ting som hele Web 2.0 bølgen også har haft med i sit kølvand, så er det bokse og knapper med runde hjørner.
Ganske nydeligt, men de har dog ét indbygget problem, når man skalere dem ændres størrelsen og proportionerne på hjørnerne.

Et workaround er at man manuelt deler sin boks op i 9 bidder, og så med script sørger for kun at skalere langsiderne, mens hjørnerne blot placeres, men det er besværligt og tidskrævende.
Flash har faktisk en indbygget funktion der kan gøre præcis det samme på en ekstremt nem måde!

For at se den i funktion, så tegn en firkant med runde hjørner og tryk F8 for at konvertere den til et symbol.
9-slice scaling
Vælg at den skal være et movieclip og kig nu helt i bunden af boksen, her er der et lille punkt der hedder “Enable guides for 9-slice scaling” (kan du ikke se den skal du først klikke på “Advanced”)

9-slice rulers
Herefter kan du nu, ved at dobbelt-klikke på det nye symbol i dit library komme ind og redigere i disse slices.
Det gøres ganske simpelt ved at trække rundt på nogle rulers.
Bemærk, disse rulers kommer kun hvis du går ind i symbolet gennem dit library, dit kommer ikke hvis du dobbeltklikker på det på din stage!

Det eneste ærgelige ved denne 9-slice funktion er, at den kun virker når man skalerer movieclippet via ActionScript.
Laver du justeringer inde i Flash via transform eller bare ved at sætte bredden i dine properties, så vrides hjørnerne stadigvæk ud af proportion.
Men hey, lidt er bedre end intet :-)

Note: Dette var en af de få ting jeg havde med hjem fra mit ellers ikke alt for vellykkede kursus.


XPath i ActionScript - Meget nemmere XML!

Kategori: Tips og tricks | Kommentarer (0)
Gemt: 2006-11-22 13:06


Alle som har prøvet at arbejde bare lidt med XML i ActionScript via XML klassen ved hvor bøvlet det er, et til tider sandt mareridt, særligt hvis den XML man loader er bare en anelse kompliceret.

Men, rent faktisk, så findes der en udokumenteret XPathAPI i Flash, der giver adgang til at bruge XPath, som er en standardiseret måde at “søge” i et XML dokument, og den gør livet meget, meget lettere!

Læs resten af dette indlæg


Actionscript klasser i hobetal!

Kategori: Diverse | Kommentarer (0)
Gemt: 2006-11-10 13:37


Står du lige og mangler en lille utility klasse til at formatere en dato, lave spejlreflesk på et billede, eller noget helt tredje?

Så er ActionscriptClasses.com et rigtig godt sted at starte :-)

Læs resten af dette indlæg


Opdater statusbar på mouseOver - ligesom almindelige links

Kategori: Tips og tricks | Kommentarer (0)
Gemt: 2006-10-12 17:10


Optimal brugervenlighed er som oftest lig med er ensbetydende med, at brugeren skal kunne forudsige hvad der sker, når der for eksempel trykkes på et link.

Ved almindelige html-links opdaterer browseren automatisk statusbaren (den lille grå bjælke for neden) til at vise url’en for der hvor man er på vej hen, når man holder musen over det.

Holder du derimod musen over en knap i Flash med en getURL kommando, så sker der ingenting, men det er der en løsning på.

Læs resten af dette indlæg