编辑:我不敢相信我没有早点发现这个。原来我的问题是一遍又一遍地重新声明我的第一个变量,基本上是重新启动程序而不是继续它。为了解决这个问题,我将前两行替换为:
if (initialized === undefined) {
trace("INITIALIZING");
var MCs = [];
var lastPos = "intializer";
var initialized = 1;
}
现在它就像一个魅力。对于这个,我觉得自己像个菜鸟;对不起任何我浪费时间的人。我会将其发布为我自己问题的答案,但由于我还是新手,它不会让我这样做。
原帖如下:
我正在尝试制作一个随机选择一个广告,播放它,然后随机播放另一个的 Flash。为此,我成功地改组了一个数组,然后gotoAndPlay
在数组的第一个元素中添加标签,然后删除该元素。在每个广告的末尾,gotoAndPlay(1);
所有主要代码都在第一帧上。如果数组是空的,它会重建它并重新洗牌。
问题是,我不希望它重复任何广告,直到它贯穿所有广告;我想我已经明白了,但我并不积极。此外,我不希望数组中的最后一个元素与新元素中的第一个元素相同,因此同一广告不会连续显示两次。我试图让它检测它刚刚使用的元素是否与它即将使用的元素匹配,如果发生这种情况则重新洗牌,但在我的测试中,它偶尔会连续两次显示相同的广告。
我显然做错了什么,但是对于 ActionScript3 (实际上是 flash)是全新的,我在识别它是什么时遇到了很多麻烦。这是我现在拥有的:
var MCs = [];
var lastPos = "intializer";
if (MCs.length == 0) {
MCs = reset();
if (lastPos == MCs[0]) {
while (lastPos == MCs[0]) {
MCs = reset();
}
}
}
if (MCs.length > 0) {
lastPos = MCs[0];
MCs.splice(0,1);
gotoAndPlay(lastPos+"MC");
}
function reset(){
var PrepMCs = new Array("Image1", "Image2", "Image3");
var WorkMCs = new Array(PrepMCs.length);
var randomPos:Number = 0;
for (var i:int = 0; i < WorkMCs.length; i++)
{
randomPos = int(Math.random() * PrepMCs.length);
WorkMCs[i] = PrepMCs.splice(randomPos, 1)[0];
}
return WorkMCs;
}
就个人而言,我宁愿只用 JavaScript、HTML 和图像来做这件事;这真的很简单。但出于托管/CMS 的原因,我无法控制,我仅限于单个文件或单个代码块;我不能在外部托管任何东西,据我所知,Flash 是我最好的选择。
任何帮助将不胜感激,谢谢!如果我做了什么可怕的、可怕的错误的事情,这甚至是一个奇迹,请不要犹豫告诉我!
编辑:我刚刚想到,如果第二次运行的顺序与第一次运行的顺序相同,则完全没问题,等等。主要的是,它需要是随机的。这可能更容易实现。
编辑 2:这里有大量的 DERP。每次它运行时,它都会重新初始化MCs
并且lastPos
......换句话说,它每次都在洗牌并重新开始。我应该研究的是如何在变量尚未初始化的情况下只运行一行代码。