PDA

Volledige versie bekijken : twee movies achter elkaar, de laatste wordt niet getoond


mitsie007
%Europe/Berlin %412 %2010, 09:53
Hallo,

Ik ben bezig met mijn code voor een animatie van boek. Ik loop hier en daar wat vast, omdat ik nog niet eerder gewerkt heb met actionscript.

De code hieronder laat zien dat ik een knop heb: "start_btn" en wanneer je op de knop klikt wordt "onStartClick" aangeroepen. Deze functie laat bladzijde_mc afspelen en roept "startEersteMovie" aan. Daar wordt gecontroleerd of bladzijde_mc is afgelopen. Wanneer dit het geval is wordt kader_mc afgespeeld.
ALTHANS....
Dat is dus de bedoeling. Hij doet alles netjes, behalve dat kader_mc niet wordt afgespeeld. Hij blijft op frame 1 hangen.

Ik had een oplossing gevonden. Dit door een boolean aan te maken en hem daarop te controleren. Dit werkte perfect, behalve dat ik met mijn volgende knop hetzelfde wil laten uitvoeren en dan werkt het afschuwelijk slecht, want dan krijg ik hetzelfde probleem. Voor het gemak heb ik ook dat script toegevoegd aan deze post.

edit: Hetzelfde ervaar ik ook met movieclips in movieclips. Deze wil hij niet afspelen wanneer ik play(); of gotoAndPlay(1); aanroep

Script nu, zonder een boolean

knop_mc.start_btn.addEventListener(MouseEvent.CLIC K, onStartClick);
//knop_mc.home_btn.addEventListener(MouseEvent.CLICK , goHome);
//knop_mc.prev_btn.addEventListener(MouseEvent.CLICK , goPrev);
//knop_mc.next_btn.addEventListener(MouseEvent.CLICK , onVolgendeClick);


//Wanneer click op Start
function onStartClick(e:MouseEvent):void{
//kader, tekening en knop worden onzichbaar
kader_mc.visible = false;
toonPagina_mc.tekening1_mc.visible = false;
knop_mc.visible = false;

//bladzijde_mc wordt afgespeeld
bladzijde_mc.play();

//reactie op afspelen bladzijde_mc
knop_mc.start_btn.addEventListener(Event.ENTER_FRA ME, startEersteMovie);
}


//Controleer actie afspelen bladzijde_mc
function startEersteMovie(event:Event){

//als nog niet alle frames zijn getoond, zet huidige frame op outputscherm
if(bladzijde_mc.currentFrame !== bladzijde_mc.totalFrames){
trace(bladzijde_mc.currentFrame);
}
//anders....
else{
//stop bladzijde_mc en maak onzichtbaar
bladzijde_mc.stop();
bladzijde_mc.visible = false;

//toon kader_mc en speel vanaf 1
kader_mc.visible = true;
kader_mc.gotoAndPlay(1);

//toon knop_mc en speel vanaf 2
knop_mc.visible = true;
knop_mc.gotoAndPlay(2);
}


//wanneer alle frames van kader_mc zijn afgespeeld, stop kader_mc
if(kader_mc.currentFrame == kader_mc.totalFrames){
kader_mc.stop();
}
//anders toon huidige frame op het outputscherm
else{
trace(kader_mc.currentFrame);
}
}

Script met een boolean

var firstOneDone:Boolean = false;
//var homeFirstOneDone:Boolean = false;
//var prevFirstOneDone:Boolean = false;
//var nextFirstOneDone:Boolean = false;

knop_mc.start_btn.addEventListener(MouseEvent.CLIC K, onStartClick);
//knop_mc.home_btn.addEventListener(MouseEvent.CLICK , goHome);
//knop_mc.prev_btn.addEventListener(MouseEvent.CLICK , goPrev);
knop_mc.next_btn.addEventListener(MouseEvent.CLICK , onVolgendeClick);


//Wanneer click op start_btn
function onStartClick(e:MouseEvent):void{
//kader, tekening en knop worden onzichbaar
kader_mc.visible = false;
toonPagina_mc.tekening1_mc.visible = false;
knop_mc.visible = false;

//bladzijde_mc wordt afgespeeld
bladzijde_mc.play();

//reactie op afspelen bladzijde_mc
knop_mc.start_btn.addEventListener(Event.ENTER_FRA ME, startEersteMovie);
}

//Controleer actie afspelen bladzijde_mc
function startEersteMovie(event:Event){

//als firstOneDone gelijk is aan false
if(!firstOneDone)
{
//als nog niet alle frames zijn getoond, zet huidige frame op outputscherm
if(bladzijde_mc.currentFrame !== bladzijde_mc.totalFrames){
trace(bladzijde_mc.currentFrame);
}
//anders...
else{
//stop bladzijde_mc en maak onzichtbaar
bladzijde_mc.stop();
bladzijde_mc.visible = false;

//toon kader_mc en speel vanaf 1
kader_mc.visible = true;
kader_mc.gotoAndPlay(1);

//toon knop_mc en speel vanaf 2
knop_mc.visible = true;
knop_mc.gotoAndPlay(2);

//firstOneDone is true
firstOneDone = true;
}

}
//als firstOneDone gelijk is aan true
else{
//wanneer alle frames van kader_mc zijn afgespeeld, stop kader_mc
if(kader_mc.currentFrame == kader_mc.totalFrames){
kader_mc.stop();
}
}
}

//Wanneer geklikt is op next_btn
function onVolgendeClick(e:MouseEvent):void{
//zet kader_mc en knop_mc op onzichtbaar
kader_mc.visible = false;
knop_mc.visible = false;
//tekening onzichtbaar??

//bladzijde_mc wordt getoond en afgespeeld
bladzijde_mc.visible = true;
bladzijde_mc.gotoAndPlay(2);

//reactie afspelen op toonPagina_mc.next_btn
knop_mc.next_btn.addEventListener(Event.ENTER_FRAM E, nextEersteMovie);
}


//Controleer actie afspelen bladzijde_mc
function nextEersteMovie(event:Event){

var nextFirstOneDone:Boolean = false;

//als nextFirstOneDone gelijk is aan false
if(!nextFirstOneDone)
{
//als nog niet alle frames zijn getoond, zet huidige frame op outputscherm
if(bladzijde_mc.currentFrame !== bladzijde_mc.totalFrames){
trace(bladzijde_mc.currentFrame);
}
//anders...
else{
//stop bladzijde_mc en maak onzichtbaar
bladzijde_mc.stop();
bladzijde_mc.visible = false;

//toon kader_mc en speel vanaf 1
kader_mc.visible = true;
kader_mc.gotoAndPlay(1);

//toon knop_mc en speel vanaf 2
knop_mc.visible = true;
knop_mc.gotoAndPlay(3);

//nextFirstOneDone is true
nextFirstOneDone = true;
}

}
//als firstOneDone gelijk is aan true
else{
//wanneer alle frames van kader_mc zijn afgespeeld, stop kader_mc
if(kader_mc.currentFrame == kader_mc.totalFrames){
kader_mc.stop();
removeEventListener(Event.ENTER_FRAME, nextEersteMovie);
}
else{
trace(kader_mc.currentFrame);
}
}
}

Dauntless
%Europe/Berlin %688 %2010, 16:30
Je verwijdert je ENTER_FRAME niet. Zodus blijft hij deze uitvoeren, hij blijft vaststellen dat currentFrame == totalFrames en hij blijft dit uitvoeren:
kader_mc.gotoAndPlay(1);Je zegt dus elke frame opnieuw 'ga naar frame 1'.

Eenvoudigste oplossing is dus gewoon de ENTER_FRAME terug te verwijderen en er een nieuwe aan te maken.

Wat ook een handige constructie is, is om op de laatste frame van je bladzijde_mc dit te zetten:this.dispatchEvent(new Event(Event.COMPLETE));
En dan luister je naar Event.COMPLETE in plaats van het ENTER_FRAME. Deze wordt dan ook maar 1x uitgevoerd (dus die if(frames = fames) is niet meer nodig) en daarna kan je luisteren naar het Event.COMPLETE event van de kader_mc. Begrijp je ?

mitsie007
%Europe/Berlin %812 %2010, 19:29
Dank je,

Ik heb momenteel voor je bovenste optie gekozen, omdat ik nog niet veel ken van actionscript. Wat je beschreef had ik geprobeerd, maar ergens verkeerd neer gezet. Nu staat het goed en doet het redelijk wat het moet doen. :)

Dankjewel.

Je andere optie ga ik binnenkort ook eens uitvogelen en uitproberen.