For at opnå denne effekt skal vi bruge to ting:
doResize funktionen
For at vi kan opfange når swf'en ændre størrelse, skal 'scaleMode' sættes til "noScale":
Stage.scaleMode = "noScale";
Herefter kan vi oprette et stageListener objekt:
1 2 3 4 |
var stageListener:Object = new Object(); //når swf'en skifter størrelse kalder vi funktionen 'doResize' stageListener.onResize = doResize; Stage.addListener(stageListener); |
(Du kan lærer mere om stageListener i video tutorialen 'Fullscreen flash uden at skalere', samt tutorialen 'Placering af MovieClips i Fullscreen Flash'.)
I funktionen 'doResize' måler vi bredden og højden på swf'en. Den information sender vi til vores 'createTiles' funktion:
1 2 3 4 5 6 |
function doResize(Void):Void { var sw:Number = Stage.width; var sh:Number = Stage.height; createTiles(sw, sh); updateAfterEvent(); } |
createTiles funktionen
For at benytte BitmapData class'en skal vi importere den:
import flash.display.BitmapData;
Næste skridt er at definere mønsteret vi vil benytte.
Det gør vi ved at importere et mønster (billede) til vores library (File > Import > Import to Library...). I eksemplet her, har jeg brugt dette mønster:
Vores mønster
Mønsteret skal have en Linkage Identifier, så vi kan refererer til det i vores script. Det gøres ved at højreklikke på mønsteret i libraryet og vælge 'Linkage...'
Højreklik på billedet og vælg 'Linkage...'
I boxen der kommer frem, vælger vi 'Export for ActionScript' og giver den 'tile' som identifier
Giv billedet identifieren 'tile'
Nu er vi klar til at definere vores mønster:
var tile:BitmapData = BitmapData.loadBitmap("tile");
Inden vi kommer til 'createTiles' funktionen, skal vi huske at sætte Stage.align til top left, så (0,0)-koordinaten ligger i øverste højre hjørne:
1 |
Stage.align = "TL"; |
'createTiles' funktionen modtager swf'ens bredde og højde fra 'doResize' funktionen. Herefter tegner vi en firkant med swf'ens dimensioner og fylder den med vores mønster
1 2 3 4 5 6 7 8 9 |
function createTiles(w:Number, h:Number):Void { this.beginBitmapFill(tile); this.moveTo(0, 0); this.lineTo(w, 0); this.lineTo(w, h); this.lineTo(0, h); this.lineTo(0, 0); this.endFill(0, 0); } |
Den endelige kode kommer altså til at se sådan ud:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/******************************************************* settings *******************************************************/ Stage.align = "TL"; Stage.scaleMode = "noScale"; /******************************************************* classes *******************************************************/ import flash.display.BitmapData; /******************************************************* vars *******************************************************/ var stageListener:Object = new Object(); var tile:BitmapData = BitmapData.loadBitmap("tile"); /******************************************************* functions *******************************************************/ function createTiles(w:Number, h:Number):Void { this.beginBitmapFill(tile); this.moveTo(0, 0); this.lineTo(w, 0); this.lineTo(w, h); this.lineTo(0, h); this.lineTo(0, 0); this.endFill(0, 0); } function doResize(Void):Void { var sw:Number = Stage.width; var sh:Number = Stage.height; createTiles(sw, sh); updateAfterEvent(); } /******************************************************* init *******************************************************/ stageListener.onResize = doResize; Stage.addListener(stageListener); doResize(); |