hej alle.
jeg arbejder pt. på et banner, der skal læse en .xml hvori der er nogle billeder og retningslinier.
xml'en ser således 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 | <?xml version="1.0" encoding="utf-8"?> <galleri> <tid>3</tid> <indhold> <billede>eksempel01.jpg</billede> <retning>n</retning> </indhold> <indhold> <billede>eksempel03.jpg</billede> <retning>s</retning> </indhold> <indhold> <billede>eksempel02.jpg</billede> <retning>nw</retning> </indhold> <indhold> <billede>eksempel01.jpg</billede> <retning>n</retning> </indhold> <indhold> <billede>eksempel02.jpg</billede> <retning>nw</retning> </indhold> <indhold> <billede>eksempel03.jpg</billede> <retning>s</retning> </indhold> </galleri> |
en hurtig forklaring til xml'en.
brugeren skriver en tid ind, over hvilken billedet skal bevæge sig.
billedet bliver så loadet ind, og hvis retningen billedet skal bevæge sig i er n, skal billedet altså bevæge sig mod nord (opad).
er billedet 50 px større end scenen, flytter billedet sig så 50 px over det antal sekunder, der er skrevet i xml'en.
det er nogenlunde den opsætning kunden har ønsket, og resten er nu finpudsning.
her kan banneret ses:
http://campjohn.dk/AS3/Co3/Lubker/Topbanner/
en af de ting jeg allerhelst vil have kommentarer til, er om I synes at bevægelsen af billederne er ok.
jeg har sørget for at lave bitmaps ud af billederne, når de er loadede, for at kunne sætte smoothing til true:
1 2 3 4 5 6 7 8 | private function doneLoading(e:Event) { var bit:Bitmap = e.target.content if(bit != null){ bit.smoothing = true; } ... |
men jeg synes ikke umiddelbart at kunne se nogen forskel på om denne del af koden er med eller udkommenteret.
er der nogle af jer, der har arbejdet så meget med bitmap smoothing, at I kan gennemskue om dette er slået igennem i min flash eller ej?
derudover, er der forslag til, hvordan dette kan optimeres?
på forhånd tak for hjælpen
felisan
alt koden kan ses her.
Preloader:
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | //imports import NewCustomContextMenu; //global vars var _bytestotal:Number; var _bytesloaded:Number; var _isInitiated:Boolean = false; var _backgroundGraphic:Sprite = new Sprite(); var _preloadGraphic:Sprite = new Sprite(); var _color:uint; var _sclbar:Number; var _textfield:TextField = new TextField(); var _textformat:TextFormat = new TextFormat(); var _l:Loader = new Loader(); var _theParameter:String = String(root.loaderInfo.parameters.whatXML); //var _theParameter:String = "galleri.xml"; //setup of CustomContextMenu var menuData:Array = []; menuData.push( {caption:"© 2009 Co3", url:"http://www.co3.dk"} ); var ncm:NewCustomContextMenu = new NewCustomContextMenu(menuData, this); //the loader _l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop); _l.contentLoaderInfo.addEventListener(Event.COMPLETE, done); _l.load(new URLRequest("LGRTopbannerContent.swf")); //the swf here // //functions // function loop(e:ProgressEvent):void { doTheGraphics(); init(e.bytesTotal, e.bytesLoaded, 0x000000); //change color of preloader here! } function init(bytesTotally:Number, bytesToLoad:Number, _colorToUse:uint):void { _bytestotal = bytesTotally; _bytesloaded = bytesToLoad; _color = _colorToUse; trace("completion = "+_bytesloaded+" / "+_bytestotal); _sclbar = Math.round(_bytesloaded/_bytestotal * 100) * 2; if (_bytesloaded >= _bytestotal) { trace("bytesloaded >= bytestotal"); } } function doTheGraphics():void { if (_isInitiated == false) { _isInitiated = true; _backgroundGraphic.graphics.lineStyle(0, 0, 0); _backgroundGraphic.graphics.beginFill(_color); _backgroundGraphic.graphics.lineTo(200, 0); _backgroundGraphic.graphics.lineTo(200, 10); _backgroundGraphic.graphics.lineTo(0, 10); _backgroundGraphic.graphics.lineTo(0, 0); _backgroundGraphic.graphics.endFill(); _backgroundGraphic.alpha = 0.1; _backgroundGraphic.x = ((this.stage.stageWidth/2) - (_backgroundGraphic.width/2)); _backgroundGraphic.y = ((this.stage.stageHeight/2) - (_backgroundGraphic.height/2)); addChild(_backgroundGraphic); // _preloadGraphic.graphics.lineStyle(0, 0, 0); _preloadGraphic.graphics.beginFill(_color); _preloadGraphic.graphics.lineTo(200, 0); _preloadGraphic.graphics.lineTo(200, 10); _preloadGraphic.graphics.lineTo(0, 10); _preloadGraphic.graphics.lineTo(0, 0); _preloadGraphic.graphics.endFill(); _preloadGraphic.alpha = 1; _preloadGraphic.x = _backgroundGraphic.x; _preloadGraphic.y = _backgroundGraphic.y; addChild(_preloadGraphic); // _textformat.font = "FFF Harmony"; _textformat.size = 8; _textfield.border = false; _textfield.embedFonts = true; _textfield.width = 90; _textfield.height = 30; _textfield.selectable = false; _textfield.y = _preloadGraphic.y - 20; addChild(_textfield); } _textfield.text = (_sclbar/2)+" % loaded"; _textfield.setTextFormat(_textformat); _textfield.x = _preloadGraphic.x + _sclbar; _preloadGraphic.width = _sclbar; } function done(e:Event):void { removeChild(_backgroundGraphic); removeChild(_preloadGraphic); removeChild(_textfield); trace("done loading"); addChild(_l); trace("_theParameter = "+_theParameter); Object(_l.content ).init(_theParameter); } |
Koden til den flash, der loades ind i preloaderen.
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | package { import caurina.transitions.Tweener; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import MovingFadeGallery; public class LGRTopbannerContent extends Sprite { private var _theXML:String; private var _logo:MovieClip;; private var _xml:XML; private var _pictureArray:Array = []; private var _movementArray:Array = []; private var _movingFadeGallery:MovingFadeGallery; private var _time:Number; public function LGRTopbannerContent() { // } public function init(someURL:String):void { _theXML = someURL; //trace("_theParameter passed to the loaded flash = "+_theXML); getXML(); setupLogo(); } private function getXML():void { var xmlLoader:URLLoader = new URLLoader(); xmlLoader.addEventListener(Event.COMPLETE, parseXML); xmlLoader.load(new URLRequest(_theXML)); } private function parseXML(e:Event):void { try { _xml = new XML(e.target.data); } catch (e:TypeError) { trace("error = "+e.message); } XMLcontentIntoArray(); } private function XMLcontentIntoArray():void { var i:Number = 0; while(i < _xml.indhold.length()){ _pictureArray.push(_xml.indhold[i].billede); _movementArray.push(_xml.indhold[i].retning); i++; } _time = Number(_xml.tid); _movingFadeGallery = new MovingFadeGallery(); _movingFadeGallery.init(_pictureArray, _movementArray, _time, 930, 184); addChildAt(_movingFadeGallery, 0); } private function setupLogo():void{ _logo = new Logo(); _logo.x = 900; _logo.y = 30; addChild(_logo); Tweener.addTween(_logo, {x:765, time: 0.7, delay:1, transition:"easeinsine"}); } } } |
koden til class'en MovingFadeGallery:
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 | package { import caurina.transitions.Tweener; import flash.display.Loader; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.ProgressEvent; import flash.display.Bitmap; import flash.net.URLRequest; public class MovingFadeGallery extends Sprite { private var _pictureArray:Array; private var _movementArray:Array; private var _movingFadeGallery:MovieClip; private var _initPreloader:Boolean = true; private var _numLoadedItems:Number = 0; private var _preloader:Preloader; private var _loader:Loader; private var _arrayContent:Array = []; private var _myDelay:Number; private var _movementTime:Number; private var _j:Number = 1; private var _theWidth:Number; private var _theHeight:Number; private var _initY:Number; private var _initX:Number; public function MovingFadeGallery() { // } public function init(firstArray:Array, secondArray:Array, delayTime:Number, theWidth:Number, theHeight:Number) { _movingFadeGallery = new MovieClip(); _movingFadeGallery.buttonMode = true; _pictureArray = firstArray; _movementArray = secondArray; _myDelay = delayTime; _movementTime = delayTime; _theWidth = theWidth; _theHeight = theHeight; var switchexpression:Number = _pictureArray.length; switch(switchexpression) { case 1: setUpSeveralPictures(); break; case 2: setUpSeveralPictures(); break; default: setUpSeveralPictures(); } } private function setUpSinglePicture():void { var l:Loader = new Loader(); l.load(new URLRequest(_pictureArray[0])); _movingFadeGallery.addChild(l); addItToStage(); } private function setUpDoublePicture():void { var l:Loader = new Loader(); l.load(new URLRequest(_pictureArray[0])); _movingFadeGallery.addChild(l); addItToStage(); } private function setUpSeveralPictures():void { var i:Number = 0; while(i < _pictureArray.length) { _loader = new Loader(); _loader.alpha = 0; _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showLoading); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, doneLoading); _loader.load(new URLRequest(_pictureArray[i])); _arrayContent.push(_loader); _movingFadeGallery.addChild(_loader); i++ } } private function showLoading(e:Event):void { if(_initPreloader){ _preloader = new Preloader(); _preloader.x = 386; _preloader.y = 215; addChild(_preloader); _initPreloader = false; } } private function doneLoading(e:Event) { var bit:Bitmap = e.target.content if(bit != null){ bit.smoothing = true; } _numLoadedItems++; if(_numLoadedItems == _pictureArray.length){ _loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, showLoading); _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, doneLoading); removeChild(_preloader); } correctOrderAndVisibility(); } private function correctOrderAndVisibility():void { var i:Number = 0; while(i < _arrayContent.length) { _movingFadeGallery.addChild(_arrayContent[i]); i++; } //addChild(_pictureHolder); var bottomPicture = _movingFadeGallery.getChildAt(0); bottomPicture.alpha = 1; addItToStage(); startAutofading(); } //HER SÆTTES ALLE BILLEDERNE TIL AT FADE IND; DOG MED LØBENDE FORSINKELSE private function startAutofading():void { trace("function startAutofading"); var i:Number = 0; var delay:Number = _myDelay; while(i < _arrayContent.length) { var theCurrentPicture = _movingFadeGallery.getChildAt(i); var theX:Number = 0; var theY:Number = 0; var switchExpression:String = _movementArray[i]; switch(switchExpression){ case "n": theCurrentPicture.y = 0; theY = _theHeight - theCurrentPicture.height; break; case "s": theY = 0; theCurrentPicture.y = _theHeight - theCurrentPicture.height; break; case "e": theX = 0; theCurrentPicture.x = _theWidth - theCurrentPicture.width; break; case "w": theCurrentPicture.x = 0; theX = _theWidth - theCurrentPicture.width; break; case "nw": theCurrentPicture.y = 0; theCurrentPicture.x = 0; theY = _theHeight - theCurrentPicture.height; theX = _theWidth - theCurrentPicture.width; break; case "ne": theCurrentPicture.y = 0; theCurrentPicture.x = _theWidth - theCurrentPicture.width; theY = _theHeight - theCurrentPicture.height; theX = 0; break; case "se": theCurrentPicture.x = _theWidth - theCurrentPicture.width; theCurrentPicture.y = _theHeight - theCurrentPicture.height; theY = 0; theX = 0; break; case "sw": theCurrentPicture.y = _theHeight - theCurrentPicture.height; theCurrentPicture.x = 0; theX = _theWidth - theCurrentPicture.width; theY = 0; break; default: trace("default found"); } if(i > 0) { if(i == 1){ Tweener.addTween(theCurrentPicture, {alpha:1, time:1, delay:delay, transition:"linear", onComplete:fadedIn}); Tweener.addTween(theCurrentPicture, {x:theX, y:theY, time:_movementTime, delay:delay+1, transition:"easeinoutsine"}); delay += _myDelay; } else { trace("i = "+i); Tweener.addTween(theCurrentPicture, {alpha:1, time:1, delay:delay+i, transition:"linear", onComplete:fadedIn}); Tweener.addTween(theCurrentPicture, {x:theX, y:theY, time:_movementTime, delay:delay+i+1, transition:"easeinoutsine"}); delay += _myDelay; } } else { trace("first picture"); _initX = theCurrentPicture.x; _initY = theCurrentPicture.y; Tweener.addTween(theCurrentPicture, {x:theX, y:theY, time:_movementTime, transition:"easeinoutsine", onComplete:moveBottomPictureBack}); } i++; } } //HVER GANG ET BILLEDE ER FADED IN KØRES DENNE. NÅR ALLE BILLEDER ER FADEDE IN KØRES FUNKTIONEN hideMiddlePictures private function fadedIn():void { if(_j == _arrayContent.length -1){ hideMiddlePictures(); _j = 1; } else { _j++ } } //ALLE BILLEDER UNDTAGET DET ØVERSTE OG DET NEDERSTE GØRES USYNLIGT private function hideMiddlePictures():void { var i:Number = 1; while(i < _arrayContent.length - 1) { var theCurrentPicture = _movingFadeGallery.getChildAt(i); theCurrentPicture.alpha = 0; i++; } restartAutofading(); } //DET ØVERSTE BILLEDE FADES UD private function restartAutofading():void { var theCurrentPicture = _movingFadeGallery.getChildAt(_arrayContent.length - 1); var delay:Number = _myDelay; Tweener.addTween(theCurrentPicture, {alpha:0, time:1, delay:delay, transition:"linear", onComplete:startAutofading}); } //NÅR DET ØVERSTE BILLEDE ER FADED UD SÅ STARTES DET HELE FORFRA private function fadedOut():void{ startAutofading(); } private function moveBottomPictureBack():void { var theCurrentPicture = _movingFadeGallery.getChildAt(0); if(_arrayContent.length == 1){ Tweener.addTween(theCurrentPicture, {x:_initX, y:_initY, time:_movementTime, delay:1, transition:"easeinoutsine", onComplete:perhapsStartOver}); } else { Tweener.addTween(theCurrentPicture, {x:_initX, y:_initY, time:.5, delay:1.5, transition:"easeinoutsine"}); } } //DENNE FUNKTION BRUGES KUN NÅR DER KUN FINDES 1 BILLEDE PÅ STAGE private function perhapsStartOver():void { if(_arrayContent.length == 1){ trace("der er kun et billede på stage!"); var theCurrentPicture = _movingFadeGallery.getChildAt(0); Tweener.addTween(theCurrentPicture, {alpha:1, time:1, transition:"linear", onComplete:startAutofading}); } } private function addItToStage():MovieClip { addChild(_movingFadeGallery); return _movingFadeGallery; } } } |