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
Flash Actionscript 3循环中的时间延迟_Flash_Actionscript 3 - Fatal编程技术网

Flash Actionscript 3循环中的时间延迟

Flash Actionscript 3循环中的时间延迟,flash,actionscript-3,Flash,Actionscript 3,我有一些用于游戏的循环函数,这个循环用于打开9框,这里是代码 function random_item_2(coinsx) { var listItem:Array = new Array(); for (var i:uint=0; i<15; i++) { listItem.push(i); } ItemLeft = 0; for (var x:uint=0; x<boardWidth; x++) {

我有一些用于游戏的循环函数,这个循环用于打开9框,这里是代码

function random_item_2(coinsx)
{
    var listItem:Array = new Array();
    for (var i:uint=0; i<15; i++)
    {
        listItem.push(i);
    }
    ItemLeft = 0;
    for (var x:uint=0; x<boardWidth; x++)
    {
        for (var y:uint=0; y<boardHeight; y++)
        {
            var thisItem:FirstBox = new FirstBox();
            thisItem.x = x * IcardHorizontalSpacing + IboardOffsetX;
            thisItem.y = y * IcardVerticalSpacing + IboardOffsetY;
            var r:int = Math.floor(Math.random() * listItem.length);
            thisItem.cardface = listItem[r];
            listItem.splice(r,1);
            thisItem.gotoAndStop(thisItem.cardface+2);
            var itemFound = this.foundItem(thisItem.cardface);
            if (itemFound == 50 || itemFound == 100 || itemFound == 250 || itemFound == 500 || itemFound == 1000)
            {
                var itemC = Number(coinsx) + Number(itemFound);
                coinsx = itemC;
                update_coins(Number(coinsx));
                info_coinstext(String(coinsx));
                trace('Gold Coins Found > '+itemFound);
            }else if(itemFound!='Kosong'){
                updateItem(itemFound);
                trace('Item Found > '+itemFound);
            }
            addChild(thisItem);
            ItemLeft++;
        }
    }
}

我该怎么做呢?

嗯,有两种选择

您可以使用setTimeout延迟函数调用:

setTimeout(functionToExecuteAfterDelay, 2000)

您可以使用as3中的Timer类在设置的时间段上执行函数

var myTimer:Timer = new Timer(5000,9); //Will tick 9 times, each after 5000 milliseconds
myTimer.addEventListener(TimerEvent.TIMER,someFunction);
myTimer.start();
function someFunction(event:TimerEvent) {
    //do your openingstuff here
}

就我个人而言,我会选择第二种。另外,在使用完TimerEvent侦听器后,请将其删除。

好的,有两个选项

您可以使用setTimeout延迟函数调用:

setTimeout(functionToExecuteAfterDelay, 2000)

您可以使用as3中的Timer类在设置的时间段上执行函数

var myTimer:Timer = new Timer(5000,9); //Will tick 9 times, each after 5000 milliseconds
myTimer.addEventListener(TimerEvent.TIMER,someFunction);
myTimer.start();
function someFunction(event:TimerEvent) {
    //do your openingstuff here
}

就我个人而言,我会选择第二种。另外,在使用完TimerEvent侦听器后,请将其删除。

这是
setInterval

var interval:int=0;
var nextBoxToOpen:int=0;
var maxBoxes:int = 9;

function openBox(e:TimerEvent):void {
    //code to open box;
    nextBoxToOpen++;
    if(nextBoxToOpen >= maxBoxes) {
        nextBoxToOpen=0;
        clearInterval(interval);
    }
}

function startOpen():void {
    interval = setInterval(openBox, 5000);
}
或者,在AS3中,您可以使用计时器

var tmr:Timer = new Timer(5000, 9); //Interval = 5000 ms, Number of ticks = 9
tmr.addEventListener(TimerEvent.TIMER, openBox);
tmr.start();
function openBox():void {
    var boxToOpen = tmr.currentCount;
    //code to open box;
}

这是
setInterval

var interval:int=0;
var nextBoxToOpen:int=0;
var maxBoxes:int = 9;

function openBox(e:TimerEvent):void {
    //code to open box;
    nextBoxToOpen++;
    if(nextBoxToOpen >= maxBoxes) {
        nextBoxToOpen=0;
        clearInterval(interval);
    }
}

function startOpen():void {
    interval = setInterval(openBox, 5000);
}
或者,在AS3中,您可以使用计时器

var tmr:Timer = new Timer(5000, 9); //Interval = 5000 ms, Number of ticks = 9
tmr.addEventListener(TimerEvent.TIMER, openBox);
tmr.start();
function openBox():void {
    var boxToOpen = tmr.currentCount;
    //code to open box;
}

要在for循环中添加延迟,您应该编写如下内容:

function random_item_2(coinsx)
{
    var listItem:Array = new Array();
    for (var i:uint=0; i<15; i++)
    {
        listItem.push(i);
    }
    ItemLeft = 0;

    const DELAY:int = 5000;

    for (var x:uint=0; x<boardWidth; x++)
    {
        for (var y:uint=0; y<boardHeight; y++)
        {
            setTimeout(addItem, (x*boardHeight+y)*DELAY, x, y);
        }
    }
}

function addItem(x:uint, y:uint) : void
{
    var thisItem:FirstBox = new FirstBox();
    thisItem.x = x * IcardHorizontalSpacing + IboardOffsetX;
    thisItem.y = y * IcardVerticalSpacing + IboardOffsetY;

    var r:int = Math.floor(Math.random() * listItem.length);

    thisItem.cardface = listItem[r];
    listItem.splice(r,1);
    thisItem.gotoAndStop(thisItem.cardface+2);

    var itemFound = this.foundItem(thisItem.cardface);

    if(itemFound == 50 || itemFound == 100 || itemFound == 250 || itemFound == 500 || itemFound == 1000)
    {
        var itemC = Number(coinsx) + Number(itemFound);
        coinsx = itemC;
        update_coins(Number(coinsx));
        info_coinstext(String(coinsx));
        trace('Gold Coins Found > '+itemFound);
    }
    else if(itemFound!='Kosong')
    {
        updateItem(itemFound);
        trace('Item Found > '+itemFound);
    }

    addChild(thisItem);
    ItemLeft++;
}
函数随机项2(coinsx)
{
var listItem:Array=new Array();

for(var i:uint=0;i要在for循环中添加延迟,您应该编写如下内容:

function random_item_2(coinsx)
{
    var listItem:Array = new Array();
    for (var i:uint=0; i<15; i++)
    {
        listItem.push(i);
    }
    ItemLeft = 0;

    const DELAY:int = 5000;

    for (var x:uint=0; x<boardWidth; x++)
    {
        for (var y:uint=0; y<boardHeight; y++)
        {
            setTimeout(addItem, (x*boardHeight+y)*DELAY, x, y);
        }
    }
}

function addItem(x:uint, y:uint) : void
{
    var thisItem:FirstBox = new FirstBox();
    thisItem.x = x * IcardHorizontalSpacing + IboardOffsetX;
    thisItem.y = y * IcardVerticalSpacing + IboardOffsetY;

    var r:int = Math.floor(Math.random() * listItem.length);

    thisItem.cardface = listItem[r];
    listItem.splice(r,1);
    thisItem.gotoAndStop(thisItem.cardface+2);

    var itemFound = this.foundItem(thisItem.cardface);

    if(itemFound == 50 || itemFound == 100 || itemFound == 250 || itemFound == 500 || itemFound == 1000)
    {
        var itemC = Number(coinsx) + Number(itemFound);
        coinsx = itemC;
        update_coins(Number(coinsx));
        info_coinstext(String(coinsx));
        trace('Gold Coins Found > '+itemFound);
    }
    else if(itemFound!='Kosong')
    {
        updateItem(itemFound);
        trace('Item Found > '+itemFound);
    }

    addChild(thisItem);
    ItemLeft++;
}
函数随机项2(coinsx)
{
var listItem:Array=new Array();

对于(var i:uint=0;ithanks@ThomasM,它工作得很好,但是当我把这个放在循环上时,它似乎不工作,所有的盒子都在一次内打开,你知道怎么把它放在
里面吗?
?谢谢@ThomasM,它工作得很好,但是当我把这个放在循环上时,它似乎不工作,所有的盒子都在一次内打开,你知道怎么把它放在
里面吗
?谢谢你,伙计,但是盒子有它们自己的位置,根据舞台宽度。我如何重新定位它们,而对于
,盒子彼此的位置不同。无论你使用什么代码重新定位,移除盒子编号上的for循环,并使用
下一个盒子打开
盒子打开
变量,而不是索引。谢谢,伙计,但是框有自己的位置,根据阶段宽度。我如何重新定位它们,而不使用
for
,如何使框彼此具有不同的位置无论您使用什么代码重新定位,移除框号上的for循环,并使用
下一个框打开
boxToOpen
变量而不是该索引。谢谢@rvmook,这太好了,现在代码延迟运行以打开框,但不是一个接一个地打开框,有时一次打开3个框,如果你不介意的话,这怎么可能?当我使用
for(var y:uint=boardHeight;耶,对不起,我的代码中有一个输入错误。(没有彻底测试它。正确的公式是
(x*boardHeight+y)*DELAY
(答案中也有更新)np,但正如@pranav hosangadi和@ThomasM所指出的。使用
计时器被认为是更好的做法。所以下次尝试绕过for循环setTimeOut设置。谢谢@rvmook,那太好了,现在代码延迟运行以打开盒子,但不是一个接一个地打开盒子,如果你不介意的话,有时一次打开三个盒子当我使用
for(var y:uint=boardHeight;是的,很抱歉,这是我代码中的一个输入错误。(没有真正彻底地测试它。这里的正确等式是
(x*boardHeight+y)*延迟
(答案中也更新了它)np,但正如@pranav hosangadi和@ThomasM所指出的。使用
计时器被认为是更好的做法。所以下次尝试使用for循环setTimeOut设置。