Copy link to clipboard
Copied
I have 48 movie clips numbered as follows:
Music_mc1, Music_mc2, Music_mc3, etc. to Music_mc48
I need a code that will trigger a random movie clip at each location where the code resides on the main timeline.
Here is what I have:
var SelectMC: Number = 0; {
function GetMC(): void {
var SelRandom: Number = Math.random();
SelectMC = Math.round(SelRandom * 47 + 1);
//trace (SelectMC);
}
GetMC();
var Holder: Object = new Object();
Holder = ("Music_mc" + String(SelectMC));
trace(Holder);
this[Holder].gotoAndPlay(2);
}
By the Output panel, the random MCs are selected correctly. But the swf stops at the first instance of the code (frame 222), and I get this error message:
TypeError: Error #1010: A term is undefined and has no properties.
at Unit19_fla::MainTimeline/frame222()
All help is appreciated!
Hi.
I'm not sure exactly how you setup the objects in the timeline. So please check if this is what you want.
You can call the function when a button is clicked as well.
AS3 code:
Frame 1:
var total:uint = 3;
function playRandomMovieClip():void
{
this["Music_mc" + Math.round(1 + Math.random() * (total - 1))].gotoAndPlay(1);
}
Frame 222:
playRandomMovieClip();
FLA download:
animate_cc_as3_play_random_movie_clip.zip - Google Drive
Regards,
JC
Copy link to clipboard
Copied
Where are the mc's located?
Copy link to clipboard
Copied
Thanks, Ned.
The movie clips are on a layer of the timeline. That is a single cell that extends from Frame 222 to the end of the timeline.
Each movie clip is 93 frames long with stop(); on Frame 1. The layer in which the movie clips reside has nothing from frames 1-221, and the movie clips are ln frames 222 to the end of the fla.
Copy link to clipboard
Copied
For the time being, try moving that single cell that holds the movieclips from frame 222 to frame 1 of the main timeline and see if the error persists.
Copy link to clipboard
Copied
Thanks again, Ned!
I moved the movie clip cell to frame 1 and got the same error on frame 222.
then . . .
I moved the AS code to frame 1, got the same error on frame 1, but the test movie plays.
Is that an error I can ignore, since the swf plays?
In continuing to fiddle with this, I moved the AS back to frame 222 and tried the debug test. The debug movie freezes at frame 222, throws the same error, and highlights the following line of the script above:
this[Holder].gotoAndPlay(2);
Copy link to clipboard
Copied
If you get an error it is best to not ignore it regardless if things play or not.
Try tracing this[Holder] and see what you get.
Also, since Holder is a String, try changing it to be a String rather than an Object.
Copy link to clipboard
Copied
Thanks, Ned.
Ned - I found a mc that was not instantiated (is that the right word?). I suspect that was the problem.
I will report back.
Thanks!!
Copy link to clipboard
Copied
Ned,
In getting the random call of the movie clips fixed, I seem to have disabled a set of buttons that control another set of movie clips.
My interpretation of what I see is that the memory required to randomize and play the movie clips according to the timeline progress does not leave enough memory for the buttons to function.
Is there a way that I can minimize that problem - or cancel some event listeners to free up the memory required?
Thanks for all of your help?
Copy link to clipboard
Copied
I doubt there is a memory issue relative to the buttons not working. I suspect that the buttons were the next thing in line to be fixed and they finally had a chance to make that known.
Copy link to clipboard
Copied
Hi.
I'm not sure exactly how you setup the objects in the timeline. So please check if this is what you want.
You can call the function when a button is clicked as well.
AS3 code:
Frame 1:
var total:uint = 3;
function playRandomMovieClip():void
{
this["Music_mc" + Math.round(1 + Math.random() * (total - 1))].gotoAndPlay(1);
}
Frame 222:
playRandomMovieClip();
FLA download:
animate_cc_as3_play_random_movie_clip.zip - Google Drive
Regards,
JC
Copy link to clipboard
Copied
Thanks for the simpler code. What additions to that simple code would eliminate immediate duplications? I don't mind ABA, but I would prefer to avoid AAB or ABB, etc.
I am now having problems with another set of movieclips (13 of them) that run in sync with the main timeline because they have to precisely hide/reveal elements on the main timeline at exact points in the timing/progress of the printed music. I have used buttons to make them visible or invisible as needed, but they are always running to ensure synchronization with the main timeline. That is an issue that may be requiring lots of memory.
I am working through that issue. Before I am finished, I am almost certain that I will be back to this string for one problem or the other.
Thanks again - to JC and Ned.
Copy link to clipboard
Copied
For the randomization, you could store the possible indexes in a array and then randomize it every time all the values are picked.
if (!this.started)
{
var total:uint = 3;
var indexes:Array = [];
var count:uint = 0;
for (var i:int = 0; i < total; i++)
indexes = i + 1;
randomizeArray();
this.started = true;
}
function playRandomMovieClip():void
{
var index:uint = ++count % total;
this["Music_mc" + indexes[index]].gotoAndPlay(1);
if (index == 0)
randomizeArray();
}
function randomizeArray():void
{
indexes.sort(function(a:*, b:*):int
{
if (Math.random() < 0.5)
return -1;
else
return 1;
});
}
About the other issues, I'll need to see your FLA.
Regards,
JC
Copy link to clipboard
Copied
I am going to need help with those buttons. There are 13 of them, and only one of them functions as it should. The others don't even respond as it should to the roll-over stage.
I can put the fla on my server if that is OK.
Suggestions are welcome.
Copy link to clipboard
Copied
Hi.
Sure. You can put on your server or somewhere else.
Thanks,
JC
Copy link to clipboard
Copied
Thanks!! Here is a link to the fla.
https://www.rhythmbee.com/programs/12876/download
My problem is that the 14 red and white buttons at the bottom of the screen should be active from 222 on. As is, they are not useable.
Thank you!!
Copy link to clipboard
Copied
Thanks to all who have responded.
As always, we learn a lot by letting the end user tell us what he/she needs next.
I need code that will let a single button pause the main timeline and the currently playing movieclip(s). (It may be one or two.)
I tried pausing all timelines (main and movieclips) by giving instructions such as:
stop();
Music_mc1.stop();
Music_mc2.stop();
Music_mc3.stop();
Music_mc4.stop();
Music_mc5.stop();
Music_mc6.stop();
Music_mc7.stop();
Music_mc8.stop();
Music_mc9.stop();
etc. through all 48 movie clips.
That works to stop everything in it's tracks. But strange things happen when I restart with the "play" button.
I also tried letting the pause button change the fps to zero. That also works, but then I need the play button to restore the previous fps, which may be anything from 10fps to 60 fps, depending on the music tempo that the user has selected before the pause.
Thanks for the great assistance in the past. I look forward to your answer.