嘿大家我看过一些有关此问题的论坛,但似乎无法解决这个问题。
所以我有一个名为aClockArray
的数组,这是一个自定义数组,里面有4个Movie剪辑。嵌套的Movie剪辑为每个帧都有不同的颜色。我在构造函数中设置了这样的数组:
aClockArray = [playScreen.wire_5, playScreen.wire_6, playScreen.wire_7, playScreen.wire_8];
然后在另一个函数中我有一个for循环设置迭代遍历数组中的所有对象,并将它们gotoAndStop放在它们的嵌套电影剪辑中的随机帧上,它从2-7开始随机化,如下所示:
private function randomColorGenerator():void
{
//Loop through wires and make them randomn generate color
for (var i:int = 0; i < aClockArray.length; i++)
{
var currentWires = aClockArray[i];
nWire = randomNumber(2, 7);
currentWires.gotoAndStop(nWire);
}
}
现在这种方法非常完美,每次重新启动时都会得到随机颜色。但我想要完成的是颜色不重复,所以不要重复nWire = randomNumber(2, 7);
2-7个数字。如何让这些数字随机生成而不重复?
此处还有我的randomNumber
功能:
//Generates a truly "random" number
function randomNumber(low:Number=0, high:Number=1):Number
{
return Math.floor(Math.random() * (1+high-low)) + low;
}
谢谢你的任何帮助将不胜感激!
尝试过类似的东西,但仍然有重复:(
//Loop through wires and make them randomn generate color
for (var i:int = 0; i < aClockArray.length; i++)
{
var currentWires = aClockArray[i];
var frames:Array = [2, 3, 4, 5, 6, 7, 8];
var randomFrame:uint = frames.splice(Math.floor(Math.random() * frames.length), 1);
currentWires.gotoAndStop(randomFrame);
}
答案 0 :(得分:3)
创建一个唯一可能结果的数组:
var frames:Array = [2, 3, 4, 5, 6, 7];
然后使用splice
随机索引从该数组中删除:
var randomFrame:uint = frames.splice(Math.floor(Math.random() * frames.length), 1);
答案 1 :(得分:3)
我会建议像:
例如:
import flash.display.MovieClip;
function randomizeSort(obj1:Boolean, obj2:Object):int
{
var randNum:int = -1 + Math.floor((Math.random() * 3));
return randNum;
}
var framesList:Vector.<int> = Vector.<int>([2, 3, 4, 5, 6, 7])
framesList.sort(randomizeSort);
trace(framesList);
var tempColor:int;
var clipsList:Vector.<MovieClip> = Vector.<MovieClip>([playScreen.wire_5, playScreen.wire_6, playScreen.wire_7, playScreen.wire_8]);
var clipsCount:int = clipsList.length;
for (var clipIndex:int = 0; clipIndex < clipsCount; clipIndex++)
{
tempColor = framesList.shift();
trace(tempColor);
}
答案 2 :(得分:1)
这是原型制作的理想候选者:
MovieClip.prototype.gotoRandomFrame = function():void
{
if(!this.frameReferences)
{
this.frameReferences = [];
for(var i:int = 0; i < this.totalFrames; i++)
{
this.frameReferences.push(i + 1);
}
}
var index:int = this.frameReferences.splice(Math.floor(Math.random() * this.frameReferences.length), 1);
if(!this.frameReferences.length)
{
this.frameReferences = null;
}
this.gotoAndStop(index);
}
对于这个原型,您现在可以在任何mocieclip上调用此方法,并让它们显示其时间轴的唯一框架,直到它们全部显示并重新开始。
mymovie.gotoRandomFrame();
其他答案是正确的,但它们不考虑多个动画片段情况。像动画片段那样创建尽可能多的代码和数组是件坏事。
答案 3 :(得分:-3)
我不打算给你确切的代码,因为我不写动作脚本。但是,您只需要保存您使用的最后一种颜色并避免它:
{next_color = randomNumber(2,7)} until next_color != last_color;
currentWires.gotoAndStop(next_color);
last_color = next_color;
中提琴!伪随机颜色。