PDA

Volledige versie bekijken : MovieClip Linkage gebruiken in een class


niva
%Europe/Berlin %992 %2007, 00:48
Hoi Allemaal,

Ik heb een vraagje, ik heb een class gemaakt die een jpg inlaat. Allemaal niet zo spannend, werkt ook naar behoren alleen heb ik een probleem met de preloader.

De preloader is een movieclip die in mijn library zit (class: progressBar) en die doormiddel van linkage kan worden benaderd. Zijn Base class is flash.display.MovieClip, dus hij moet alle methods en properties van de movieclip hebben. Echter als ik in mijn rotator class probeer de gotoAndStop() aan te roepen gaat hij lopen piepen, dan krijg ik volgende foutmelding:

1061: Call to a possibly undefined method gotoAndStop through a reference with static type flash.display:DisplayObject.

Ik kan wel gewoon de x en y setten maar de methods lijken niet te werken.

Als ik gewoon in mijn fla file de gotoAndStop op het progressBar object gebruik dan werkt het prima... kan iemand me helpen?

Code in mijn Fla


var container:MovieClip = new MovieClip();
var pb:progressBar = new progressBar();
container.addChild(pb);
addChild(container);
var r:rotator = new rotator("1.jpg", "hier is mijn stukje tekst", container);


Code in mijn rotator.as



package{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.*;
import flash.net.URLRequest;
import flash.display.MovieClip;
import flash.text.TextField;
import flash.display.DisplayObject;

public class rotator{
public function rotator(imgsrc:String, txt:String, container:MovieClip):void {

var rotatorContainer:MovieClip = new MovieClip();
var tf:TextField = new TextField();

//load image
var url:URLRequest = new URLRequest(imgsrc);
var imageLoader:Loader = new Loader();

function completeHandler(event:Event):void {
//do complete
trace("done loading");
}

function progressHandler(pe:ProgressEvent):void {
container.getChildAt(0).x = 30;
container.getChildAt(0).y = 30;
container.getChildAt(0).gotoAndStop(5);
//container.getChildAt(0).gotoAndStop(Math.round(pe. bytesLoaded / pe.bytesTotal * 10));
}

imageLoader.contentLoaderInfo.addEventListener(Eve nt.COMPLETE, completeHandler);
imageLoader.contentLoaderInfo.addEventListener(Pro gressEvent.PROGRESS, progressHandler);
imageLoader.load(url);
container.addChild(imageLoader);



}
}
}

theFlashWizard
%Europe/Berlin %112 %2007, 03:42
volgens mij vergeet je de movieclip te extenden:
public class rotator{
naar:
public class rotator extends MovieClip{

TheDutch
%Europe/Berlin %256 %2007, 07:09
@TFW: Dat hoeft ook niet aangezien de "rotator" class geen gebruik maakt van functionaliteiten die de MovieClip class bezit.

@Niva: Dit zou je moeten helpen:

VERVANG:
container.getChildAt(0).gotoAndStop(5);

DOOR:
MovieClip(container.getChildAt(0)).gotoAndStop(5);

Je cast hier het result van getChildAt() - wat minimaal altijd een DisplayObject teruggeeft - naar een MovieClip, zodat de compiler weet dat het result een MovieClip (die ook afstamt van DisplayObject) zal zijn met bepaalde functionaliteiten :).

niva
%Europe/Berlin %437 %2007, 11:30
Hey man! Bedankt dat werkt. Begrijp ik het dus goed dat als je getChildAt aanroept je niet een MovieClip maar een DisplayObject aanspreekt?

Verder nog een vraagje, is het mogelijk een movieClip direct op de stage te plaatsen vanuit een class?

Groeten