Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 当3做3个随机停止时,它们之间永远不相等_Actionscript 3 - Fatal编程技术网

Actionscript 3 当3做3个随机停止时,它们之间永远不相等

Actionscript 3 当3做3个随机停止时,它们之间永远不相等,actionscript-3,Actionscript 3,我有3个电影唇,每个有7帧和标签,播放不同的图像,我想随机停止每一个,但永远不要让它们等于同一帧。我在想array.push一旦被调用,但我不知道怎么做。到目前为止,我有一个: function startGame(event:MouseEvent) { addChild(level6_mc); addChild(inGameNav_mc); level6_mc.gotoAndPlay(2); var timer = setTimeout(startAgain,

我有3个电影唇,每个有7帧和标签,播放不同的图像,我想随机停止每一个,但永远不要让它们等于同一帧。我在想array.push一旦被调用,但我不知道怎么做。到目前为止,我有一个:

function startGame(event:MouseEvent)
{
    addChild(level6_mc);
    addChild(inGameNav_mc);
    level6_mc.gotoAndPlay(2);
    var timer = setTimeout(startAgain, 1000);
    startAgain();
}


// level 6
function startAgain()
{
    var randomNumber:Number= Math.floor(Math.random()*7);
    var door1 = level6_mc.door1_mc;
    var door2 = level6_mc.door2_mc;
    var door3 = level6_mc.door3_mc;
    door1.gotoAndStop(randomNumber);
    door2.gotoAndStop(randomNumber);
    door3.gotoAndStop(randomNumber);
}

一定有个简单的方法,我就是想不出来。我一直在网上寻找解决方案,但每种方法都太复杂了。有人能帮我找到一个简单的解决方案吗?如果你告诉我使用数组,你能举个例子吗。提前感谢

我会选择这样的方法:

function startGame(event:MouseEvent){
    addChild(level6_mc);
    addChild(inGameNav_mc);
    level6_mc.gotoAndPlay(2);
    var timer= setTimeout(startAgain, 1000);
    startAgain();
}

function startAgain(){
    var randomFrames:Array = getRandomFrames(3);
    var door1 = level6_mc.door1_mc;
    var door2 = level6_mc.door2_mc;
    var door3 = level6_mc.door3_mc;
    door1.gotoAndStop(randomFrames[0]);
    door2.gotoAndStop(randomFrames[1]);
    door3.gotoAndStop(randomFrames[2]);
}


/*
   Given input of 3, the return should be an array of integers randomly 
   chosen from the array defined by `frames`.  An example would be `[5,2,7]`
*/
function getRandomFrames(var $frameCount:Number):Array {
    var frames:Array = [1, 2, 3, 4, 5, 6, 7]
    var randomFrames:Array = new Array(Math.min($frameCount, frames.length));

    var pos:Number = 0;
    for (var i:int = 0; i < randomFrames.length; i++)
    {
        pos = int(Math.random() * frames.length);
        randomFrames[i] = frames.splice(pos, 1)[0];
    }
    return randomFrames
}
函数启动名(事件:MouseEvent){
addChild(6级);
addChild(inGameNav_mc);
第6级(2级);
var timer=setTimeout(startAgain,1000);
startAgain();
}
函数startAgain(){
var randomFrames:Array=getRandomFrames(3);
var door1=6级门1级门;
var door2=6级门2级门;
var door3=6级门3级门;
door1.gotoAndStop(随机框[0]);
door2.gotoAndStop(随机框[1]);
门3.gotoAndStop(随机框[2]);
}
/*
如果输入值为3,则返回值应为随机整数数组
从“frames”定义的数组中选择。例如,“[5,2,7]`
*/
函数getRandomFrames(var$frameCount:Number):数组{
变量帧:数组=[1,2,3,4,5,6,7]
var randomFrames:Array=新数组(Math.min($frameCount,frames.length));
变量位置:编号=0;
对于(变量i:int=0;i

这台机器上没有闪光灯,所以无法测试。但其思想是,你有一个帧编号数组,1-7,你随机选择其中的3个作为停止帧。

由于帧计数很小,你可以从数组中拼接帧:

function startGame(event:MouseEvent){
        addChild(level6_mc);
        addChild(inGameNav_mc);
        level6_mc.gotoAndPlay(2);
        var timer= setTimeout(startAgain, 1000);
        startAgain();
    }


    //level 6
    function startAgain(){
            var door1 = level6_mc.door1_mc;
            var door2 = level6_mc.door2_mc;
            var door3 = level6_mc.door3_mc;
            var stopsAt:Array = [1,2,3,4,5,6];
            door1.gotoAndStop(stopsAt.splice(Math.random()*stopsAt.length, 1)[0]);
            door2.gotoAndStop(stopsAt.splice(Math.random()*stopsAt.length, 1)[0]);
            door3.gotoAndStop(stopsAt.splice(Math.random()*stopsAt.length, 1)[0]);
//六级

function startAgain()
{
var randomNumber:int= getRandomNumber(7,prevNum);
prevNum = randomNumber;
var door1 = level6_mc.door1_mc;
var door2 = level6_mc.door2_mc;
var door3 = level6_mc.door3_mc;
door1.gotoAndStop(randomNumber);
door2.gotoAndStop(randomNumber);
door3.gotoAndStop(randomNumber);
}

function getRandomNumber(length:int,previousNumber:int):int
{ 
    var currentNumber:int;
    do{

  currentNumber = Math.floor(1+Math.random()*length);

}while(currentNumber==previousNumber);

return currentNumber;
}

为了澄清,您希望门mc都进入一个随机帧,但不是彼此相同的帧?比如,一个可以在第1帧上,一个在第3帧上,一个在第4帧上,但是没有两个同时在同一帧上?是的,如果很容易使一个帧始终存在的话。例如第1帧。我在这里得到一个语法错误(在var函数getRandomFrames(var$frameCount:Int)之前需要标识符):Array我认为
Int
可能需要是
Int
。无论如何,我用
Number
类型替换了,我知道它是大写的。可能还有其他语法错误,正如我说的,我无法测试。但是这个答案是解决问题的正确方法。好的,谢谢你,先生,我仍然有语法错误,但没有几处几分钟的搜索都找不到。谢谢你,伙计,你太棒了。我喜欢这背后的逻辑。问题是你的第二个变量中有字母.length,而它应该是frames.length。所以一切都很好,它就像一个符咒一样工作。我还注意到你在变量前有一个$as3,我认为这没有必要。再次感谢你提出的关于t的所有想法他的错误来自:RangeError:error#1005:数组索引不是正整数(NaN).哈哈,你是一个头脑简单的人。这很流畅,效果很好。更轻,我怎么能说我总是希望第2帧是随机门上的随机停止点之一?这有意义吗?@diskrim要实现这一点,你应该生成
stopsAt
项。你的数组可以从位置0上的数字
2
开始,a填充while循环中剩余的两个位置,避免重复。好家伙。谢谢你。我用了其他方法,但这个逻辑确实很有用,原因很多。谢谢你看这个。
function startAgain()
{
var randomNumber:int= getRandomNumber(7,prevNum);
prevNum = randomNumber;
var door1 = level6_mc.door1_mc;
var door2 = level6_mc.door2_mc;
var door3 = level6_mc.door3_mc;
door1.gotoAndStop(randomNumber);
door2.gotoAndStop(randomNumber);
door3.gotoAndStop(randomNumber);
}

function getRandomNumber(length:int,previousNumber:int):int
{ 
    var currentNumber:int;
    do{

  currentNumber = Math.floor(1+Math.random()*length);

}while(currentNumber==previousNumber);

return currentNumber;
}