Fra Kexe
Hej.. Jeg har et problem
jeg har en class der hedder Thumbnail som sjovt nok laver nogle thumbnails, men jeg har også sat en mouseEvent.click på som skal vise et billede i et movieclip på min stage... movie clippet ligger der og hedder "container". men jeg får 1120: fejlen når jeg skriver:
container.addChilde(mitbillede);
det fungere tilgengæld fint hvis jeg adder det til stage :
stage.addChilde(mitbillede);
men det var jo ikke min mening :P har prøvet forslagende på følgende link http://www.actionscript.org/forums/showthread.php3?t=174155 men uden held
Kan du hjælpe mig ??
vedhæfter min filer: (linier der gør vrøvl er i sidste function i Thumbnail.as
ps: hvis noget kan gøres bedre som feks at genbruge min imageLoader men med forskellige preloaders... så kunne det da lige være bonus :P har stirre min blind på det nu
Det er der egentlig ikke noget unaturligt i. Du skal huske på, at referencerne normalt er relative i forhold til, hvor de skrives. Hvis du skriver container inde i klassen Thumbnail, vil den kigge efter en variabel derinde ... den kan den ikke finde. når du skriver stage referer du til det yderste/øverste niveau i filmen. Hvis du så vil have den til at være inde i containerne, kan du skrive den ind lige efter, sådan her:
Lidt mere elegant er det nok at få overført destinationen til selve klassen Thumbnail. Du har allerede oprettet en variabel kaldet _container. Hvis du overfører en reference til den i signaturen kan du bare pege på den. Din klasse vil så se således ud:
package{ import flash.display.Sprite; import flash.display.DisplayObject; import flash.display.DisplayObjectContainer; import flash.display.MovieClip; import flash.events.Event; import flash.events.ProgressEvent; import flash.events.MouseEvent; import flash.net.URLRequest; import flash.display.Loader; import fl.containers.UILoader public class Thumbnail extends Sprite{ protected var _container:DisplayObjectContainer; public var imageLoader:Loader; public var smallimage:String; public var largeimage:String; public var imageKnap:thumb = new thumb(); public function Thumbnail(smallimg:String, largeimg:String, dest:DisplayObjectContainer):void{ smallimage = smallimg; largeimage = largeimg; _container = dest; loadImage(smallimage); } function loadImage(img:String):void{ //trace("start image load"); imageLoader = new Loader(); var pathName:URLRequest = new URLRequest(img); imageLoader.load(pathName); imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress); imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); } function showProgress(e:ProgressEvent):void{ //trace("loadig"); } function imageLoaded(e:Event):void{ //trace("imageloaed"); var ganger:int = imageLoader.width/100; imageLoader.width = imageLoader.width/ganger; imageLoader.height = imageLoader.height/ganger; imageKnap.container_mc.addChild(imageLoader); addChild(imageKnap); addListeners(); } function addListeners():void{ imageKnap.addEventListener(MouseEvent.CLICK, loadLargeImg); } function loadLargeImg(e:MouseEvent):void{ trace(largeimage); imageLoader = new Loader(); imageLoader.load(new URLRequest(largeimage)); imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress); imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, showImage); } function showImage(e:Event):void{ _container.addChild(imageLoader); } } }Her modtager jeg én ekstra parameter i contructeren (dest) og overfører den til _container. Til sidst kan jeg nøjes med at skrive:
for at pege direkte på den.
Det sidste du skal gøre er, at ændre linjen der opretter din thumbnail (i selve flash dokumentet) så der tilføjes en reference til movie clip'et på din scene (container) - sådan her:
var img:Thumbnail=new Thumbnail("images/pic"+i+".jpg","images/pic"+i+".jpg", container);Nu mangler du bare at finde nogle billeder, der passer i størrelsen, eller indbygge en mekanisme, der skalerer dem :-)
Håber det giver mening
Fra Kexe
Fra Kexe
Tak for hjælpen..
havde prøvet :
men det virkede ikke hos mig :(
men det virker fint med container som ekstra paramete, så det er glimrende!