Flash Actionscript 3循环中的时间延迟
我有一些用于游戏的循环函数,这个循环用于打开9框,这里是代码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++) {
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设置。