flex as3 某段时间重复执行一种操作

来源:互联网 发布:java获取字符串编码 编辑:程序博客网 时间:2024/05/01 01:21
 

某段时间重复执行一种操作
 
问题
我要在单帧里多次执行某个任务
解决办法
在单帧里使用循环语句多次执行某个任务,例如,使用 for 语句:
for (var i:int = 0; i < 10; i++) {
  // 显示i.的值
  TRace(i);
}
讨论
 
使用循环语句可以让你的代码更加简洁。容易阅读和维护。既可以用 while 也可以用 for 语句,但是一般for语句比较好用。两个循环语句都能达到相同结果,只是 for 语句对于大多数程序员来说更熟悉些。
原形:
for (initialization; test; update) {
  statement body
}
下面的例子输出0到999的数字:
for (var i:int = 0; i < 1000; i++) {
  trace(i);
}

trace ("That's the end.");
多个初始值或步进值可以用逗号分开,初始化多个变量var 关键字只需要使用一次,下面的例子展示了每次i增加1,j减小1,然后输出i和j:
for (var i:int = 0, j:int = 10; i < 10; i++, j--) {
  trace("i is " + i);
  trace("j is " + j);
}

for 语句还可以嵌套,看下面的例子:
for (var i:int = 1; i <= 3; i++) {
  for (var j:int = 1; j <= 2; j++) {
    trace(i + " X " + j + " = " + (i * j));
  }
}

1 X 1 = 1
1 X 2 = 2
2 X 1 = 2
2 X 2 = 4
3 X 1 = 3
3 X 2 = 6
进行多重嵌套的for语句:
for (var i:int = 1; i <= 3; i++) {
  for (var j:int = 1; j <= 3; j++) {
    for (var k:int = 1; k <= 3; k++) {
      trace(i + " X " + j + " X " + k + " = " + (i * j * k));
    }
  }
}

许多开发都错误的用 for 语句让sprites运动起来; 比如:
for (var i:int = 0; i < 20; i++) {
  _sprite.x += 10;
}

上面的代码让sprite 向右移动200 像素,所有的更新都在同一帧完成,会出现两个问题:第一,场景每帧更新一次,所以只有最后的更新显示在场景中(导致我们看到好像是直接跳过200像素,而不是20步内慢慢移动过去)。第二,即时场景不停更新,但是for循环只需要几位秒,这样的动画也太快了。因此正确的做法是把动画放到 enterFrame 事件上执行。
再者若循环的代码执行时间超过15秒,Flash播放器就会提示警告。