PDA

Volledige versie bekijken : Checken of een ingeladen MC nog speelt


maartenlierop
%Europe/Berlin %422 %2007, 11:08
Hoi!

Ondanks wat ogenschijnlijk bruikbare tips op dit forum kom ik toch niet uit het volgende probleem.

Ik heb een klasse 'kaartview' waarin een MC worden ingelezen wanneer de kaart naar een nieuwe positie schuift. Deze gaat spelen wanneer de kaart op de betreffende positie is aangekomen, en het zou fijn zijn als de gebruiker, terwijl de MC bezig is met afspelen, niet de mogelijkheid heeft met de muis 'weg te bewegen' (want je kan ok kaart ook bewegen door met de muis bij de rand van je scherm te komen). De functie die deze muisbeweging verzorgt moet dus eerst checken of er een MC is ingeldaen, en of deze speelt, of al is gestopt.

Klinkt simpel, maar ik zie niet binnen de MC klasse welke variabele true of false zou worden wanneer een MC wel of niet speelt.

De tweede optie is dat de movieclip zichzelf ontlaad als hij klaar is. Met een REMOVE_FROM_STAGE eventlistener zou je dat moeten kunnen afvangen. Helaas blijit ook dit niet te werken. De Eventlistener wordt al direct na het startten van de MC getriggerd, en wanneer deze, pas veel later ontladen wordt dan wordt hij niet getriggert.

kortom; doe ik nou zo moeilijk of is wat ik wil zo moelijk?

in de kaartview klasse is dit de functie die de MC plaatst (vanuit een Loader)


private function PlaceMC (event:Event):void{
Navigatie = false;

MovieClipCont.addChild(MovieClipContainer);

container.addChild(MovieClipCont);
MovieClipCont.alpha = 1;
MovieClipCont.x = MovieClipCont_x;
MovieClipCont.y = MovieClipCont_y;

var IngeladenMovieClip:* = MovieClipContainer.content;
IngeladenMovieClip.play(); // Ingeldaen MC afspelen
MovieClipContainer.addEventListener(Event.REMOVED_ FROM_STAGE, StartNavigation);
trace("*"+IngeladenMovieClip.VARIABELE);
}

private function StartNavigation(event:Event):void{
trace ("FILMPIE IS KLAAR");
trace("**"+IngeladenMovieClip.currentFrame);
Navigatie = true;
}

public function MoveMap(x_move:int,y_move:int){

if ( Navigatie == true){
if (x_move>0){
if (y_move>0){
.........enzovoorts



Om een MC zichzelf laten de ontladen was al een hele tour, maar met behulp van een util klassetje uit het actionscript 3 cookbook lukt het toch;

import DisplayObjectUtilities;

DisplayObjectUtilities.removeAllChildren(this);
stop();


Zou iemand me willen helpen aan een idee van hoe ik dit gewoon simpel zou kunnen aanpakken? Ik kan me niet voorstellen dat dit echt zo moeilijk moet zijn.

Alvast dank!

Maarten

stefanw_nl
%Europe/Berlin %738 %2007, 18:42
Ik doe dit op deze mannier.

Een int die houd de huidige frame in de gaten.. als de frame hetzelfde is dan moet de swf onzichtbaar en iets ander zichtbaar worden

Misschien heb je er wat aan.


private isFrame:int;
swf.addEventListener(Event.ENTER_FRAME,checkStop);

private function checkStop(event:Event): void
{
if(speel==true)
{
if(isFrame==swf.currentFrame)
{
swf.gotoAndStop(0);
swf.visible=false;
objCon.visible=true;
}
else
{
isFrame=swf.currentFrame;
}
}
}

gijsvdh
%Europe/Berlin %956 %2007, 23:58
Klinkt simpel, maar ik zie niet binnen de MC klasse welke variabele true of false zou worden wanneer een MC wel of niet speelt.

Of je kan die variabele zelf in de clip aanmaken: bijvoorbeeld door in het laatste frame waar hij stopt een variabele ik_ben_afgespeeld = true te zetten.
Die kan je dan checken.

stefanw_nl
%Europe/Berlin %959 %2007, 00:01
Maar dan moet je dat overal doen en niet vergeten. is dus niet echt handig.. dus dynamisch is beter, teminste vind ik :-P

gijsvdh
%Europe/Berlin %682 %2007, 17:23
Tuurlijk! Maar pragmatisch is soms ook wat waard ;-) & ik weet verder niet om hoeveel swfs het hier gaat. Daarbij moet je toch ook een stop-actie zetten aan het einde van de tijdlijn, die kan je vervangen door een functieaanroep waarin je in een keer alles afhandelt.
Maar met currentFrame & totalFrames (of hoe ze in as3 ook heten mogen :-)) moet het ook goed kunnen hoor.

stefanw_nl
%Europe/Berlin %729 %2007, 18:29
Ik denk dat dat ook wel kan idd --> currentFrame & totalFrames