Hi- I'm very new to actionScript 3. My project starts out by plying one movie clip(startPage), then onClick, moviecip startPage disappears and a random movieclip(sc01-sc03) loads and plays. Once each random movieclip plays, I want to remove it from the stage and reload startPage. I have the random part figured out using an array, but I can't figure out how to remove the random sc movieClip once it is loaded. I tried using removeChild, but Flash isn't recognizing that I have added and of the sc movieclips as childen. Help!
My current code below:
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends MovieClip
{
var startPage:StartPage;
var sc01:Sc01;
var sc02:Sc02;
var sc03:Sc03;
private var _scenario:Array;
public function Main()
{
startPage = new StartPage();
sc01 = new Sc01();
sc02 = new Sc02();
sc03 = new Sc03();
_scenario = new Array();
MC.addChild(startPage);
//Add Scenes to array
_scenario[0] = sc01;
_scenario[1] = sc02;
_scenario[2] = sc03;
//Add Event Listeners
startPage.boxButton.addEventListener(MouseEvent.CLICK, onBoxButtonClick);
startPage.addFrameScript(startPage.totalFrames - 1, stopPageFunc);
sc01.addEventListener(Event.ENTER_FRAME, everyFrame01);
sc02.addEventListener(Event.ENTER_FRAME, everyFrame02);
sc03.addEventListener(Event.ENTER_FRAME, everyFrame03);
//stop at end of startPage timeline
function stopPageFunc()
{
startPage.stop();
}
function onBoxButtonClick(event:MouseEvent):void
{
MC.removeChild(startPage);
MC.addChild(_scenario[Math.floor(Math.random()*_s cenario.length)]);
}
function everyFrame01():void
{
if (sc01.currentFrame == 50)
{
MC.removeChild(sc01);
MC.addChild(startPage);
startPage.gotoAndPlay(1);
}
else
{sc01.play();
}
}
function everyFrame02():void
{
if (sc02.currentFrame == 50)
{
MC.removeChild(sc02);
MC.addChild(startPage);
startPage.gotoAndPlay(1);
}
else
{sc02.play();
}
}
function everyFrame03():void
{
if (sc03.currentFrame == 50)
{
MC.removeChild(sc03);
MC.addChild(startPage);
startPage.gotoAndPlay(1);
}
else
{sc03.play();
}
}
//go to startPage when scenario done
}
}
}
use:
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends MovieClip
{
var startPage:StartPage;
private var _scenario:Array;
public function Main()
{
startPage = new StartPage();
_scenario = new Array();
MC.addChild(startPage);
//Add Scenes to array
_scenario[0] = new Sc01();
_scenario[1] = new Sc02();
_scenario[2] = new Sc03();
shuffle(_scenario);
//Add Event Listeners
startPage.boxButton.addEventListener(MouseEvent.CLICK, onBoxButtonClick);
startPage.addFrameScript(startPage.totalFrames - 1, stopPageFunc);
this.addEventListener(Event.ENTER_FRAME, everyFrame;
//stop at end of startPage timeline
function stopPageFunc()
{
startPage.stop();
}
function onBoxButtonClick(event:MouseEvent):void
{
if(startPage.stage){
MC.removeChild(startPage);
}
if(_scenario.length>0){
MC.addChild(_scenario[0]);
}
}
function everyFrame():void
{
if(_scenario[0].currentFrame==_scenario[0].totalFrames){
MC.removeChild(_scenario[0]);
_scenario.shift();
if(_scenario.length==0){
// startPage.gotoAndPlay(1); ???
MC.addChild(startPage);
}
}
}
function shuffle(a:Array) {
var i:int;
var j:int;
var e:*;
var len:int = a.length;
for (i = len-1; i>=0; i--) {
j=Math.floor((i+1)*Math.random());
e = a[i];
a[i] = a[j];
a[j] = e;
}
}
}
}
Thank you!
I keep getting this error though:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at Function/<anonymous>()
I get this error when Flash tries to remove the random sc movieclip from the stage. I got this a bunch using my other code too. Any idea what is causing this? Is this because I have called up my sc movieclips with an array and Flash doesn't know where to find it?
Also, when my sc movieclips play on the stage, they don't play from the beginning. It's as if they were already playing before they were added to the stage. Do you know how to fix this?
Thanks so much for your help!
use:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends MovieClip {
var startPage:StartPage;
private var _scenario:Array;
public function Main() {
startPage = new StartPage();
MC.addChild(startPage);
//Add Scenes to array
scenarioF();
//Add Event Listeners
startPage.boxButton.addEventListener(MouseEvent.CLICK, onBoxButtonClick);
startPage.addFrameScript(startPage.totalFrames - 1, stopPageFunc);
}
function scenarioF():void{
_scenario = new Array();
_scenario[0] = new Sc01();
_scenario[1] = new Sc02();
_scenario[2] = new Sc03();
shuffle(_scenario);
}
function stopPageFunc() {
startPage.stop();
}
function onBoxButtonClick(event:MouseEvent):void {
if (startPage.stage) {
MC.removeChild(startPage);
}
if (_scenario.length>0) {
MC.addChild(_scenario[0]);
_scenario[0].addEventListener(Event.ENTER_FRAME,everyFrame);
}
}
function everyFrame(e:Event):void {
if (e.currentTarget.currentFrame==e.currentTarget.totalFrames) {
MC.removeChild(e.currentTarget);
e.currentTarget.removeEventListener(Event.ENTER_FRAME,everyFrame);
_scenario.shift();
if (_scenario.length==0) {
// startPage.gotoAndPlay(1); ???
// repopulate _scenario? if yes, call scenarioF();
MC.addChild(startPage);
}
}
}
function shuffle(a:Array) {
var i:int;
var j:int;
var e:*;
var len:int=a.length;
for (i = len-1; i>=0; i--) {
j=Math.floor((i+1)*Math.random());
e=a[i];
a[i]=a[j];
a[j]=e;
}
}
}
}
Thanks- I'm not getting any errors any more and playing random scenes is working once the boxButton is clicked, but it's still not behaving how I would like. Once, each random scene is done playing, I want startPage to play again from the beginning, and start the whole process over again. Currently, once the randomly added sc finishes playing, the screen goes blank. ???
read the comments:
// startPage.gotoAndPlay(1); ???
// repopulate _scenario? if yes, call scenarioF();
use:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends MovieClip {
var startPage:StartPage;
private var _scenario:Array=[];
public function Main() {
startPage = new StartPage();
MC.addChild(startPage);
//Add Scenes to array
scenarioF();
//Add Event Listeners
startPage.boxButton.addEventListener(MouseEvent.CLICK, onBoxButtonClick);
startPage.addFrameScript(startPage.totalFrames - 1, stopPageFunc);
}
function scenarioF():void{
_scenario[0] = new Sc01();
_scenario[1] = new Sc02();
_scenario[2] = new Sc03();
shuffle(_scenario);
}
function stopPageFunc() {
startPage.stop();
}
function onBoxButtonClick(event:MouseEvent):void {
if (startPage.stage) {
MC.removeChild(startPage);
}
if (_scenario.length>0) {
MC.addChild(_scenario[0]);
_scenario[0].addEventListener(Event.ENTER_FRAME,everyFrame);
}
}
function everyFrame(e:Event):void {
if (e.currentTarget.currentFrame==e.currentTarget.totalFrames) {
MC.removeChild(MovieClip(e.currentTarget));
e.currentTarget.removeEventListener(Event.ENTER_FRAME,everyFrame);
_scenario.shift();
if (_scenario.length==0) {
startPage.gotoAndPlay(1);
scenarioF();
MC.addChild(startPage);
}
}
}
function shuffle(a:Array) {
var i:int;
var j:int;
var e:*;
var len:int=a.length;
for (i = len-1; i>=0; i--) {
j=Math.floor((i+1)*Math.random());
e=a[i];
a[i]=a[j];
a[j]=e;
}
}
}
}
p.s. please mark helpful/correct responses.
what's the trace function reveal:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends MovieClip {
var startPage:StartPage;
private var _scenario:Array=[];
public function Main() {
startPage = new StartPage();
MC.addChild(startPage);
//Add Scenes to array
scenarioF();
//Add Event Listeners
startPage.boxButton.addEventListener(MouseEvent.CLICK, onBoxButtonClick);
startPage.addFrameScript(startPage.totalFrames - 1, stopPageFunc);
}
function scenarioF():void{
_scenario[0] = new Sc01();
_scenario[1] = new Sc02();
_scenario[2] = new Sc03();
shuffle(_scenario);
}
function stopPageFunc() {
startPage.stop();
}
function onBoxButtonClick(event:MouseEvent):void {
trace(_scenario.length,_scenario[0]);
if (startPage.stage) {
MC.removeChild(startPage);
}
if (_scenario.length>0) {
MC.addChild(_scenario[0]);
_scenario[0].addEventListener(Event.ENTER_FRAME,everyFrame);
}
}
function everyFrame(e:Event):void {
if (e.currentTarget.currentFrame==e.currentTarget.totalFrames) {
MC.removeChild(MovieClip(e.currentTarget));
e.currentTarget.removeEventListener(Event.ENTER_FRAME,everyFrame);
_scenario.shift();
if (_scenario.length==0) {
startPage.gotoAndPlay(1);
scenarioF();
MC.addChild(startPage);
trace("startPage added",startPage,startPage.stage)
}
}
}
function shuffle(a:Array) {
var i:int;
var j:int;
var e:*;
var len:int=a.length;
for (i = len-1; i>=0; i--) {
j=Math.floor((i+1)*Math.random());
e=a[i];
a[i]=a[j];
a[j]=e;
}
}
}
}
p.s. please mark helpful/correct responses.
use:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends MovieClip {
var startPage:StartPage;
private var _scenario:Array=[];
public function Main() {
startPage = new StartPage();
MC.addChild(startPage);
//Add Scenes to array
scenarioF();
//Add Event Listeners
startPage.boxButton.addEventListener(MouseEvent.CLICK, onBoxButtonClick);
startPage.addFrameScript(startPage.totalFrames - 1, stopPageFunc);
}
function scenarioF():void {
_scenario[0] = new Sc01();
_scenario[1] = new Sc02();
_scenario[2] = new Sc03();
shuffle(_scenario);
}
function stopPageFunc() {
startPage.stop();
}
function onBoxButtonClick(event:MouseEvent):void {
if (startPage.stage) {
MC.removeChild(startPage);
}
if (_scenario.length>0) {
MC.addChild(_scenario[0]);
_scenario[0].addEventListener(Event.ENTER_FRAME,everyFrame);
}
}
function everyFrame(e:Event):void {
if (e.currentTarget.currentFrame==e.currentTarget.totalFrames) {
MC.removeChild(MovieClip(e.currentTarget));
e.currentTarget.removeEventListener(Event.ENTER_FRAME,everyFrame);
_scenario.shift();
if (_scenario.length==0) {
startPage.gotoAndPlay(1);
scenarioF();
MC.addChild(startPage);
} else {
MC.addChild(_scenario[0]);
_scenario[0].addEventListener(Event.ENTER_FRAME,everyFrame);
}
}
}
function shuffle(a:Array) {
var i:int;
var j:int;
var e:*;
var len:int=a.length;
for (i = len-1; i>=0; i--) {
j=Math.floor((i+1)*Math.random());
e=a[i];
a[i]=a[j];
a[j]=e;
}
}
}
}
North America
Europe, Middle East and Africa
Asia Pacific