双重循环的例子

      Flash学习笔记 2010-7-18 23:14

      双重循环通常比较适合用来构造二维平面空间的位置关系,可以把双重循环看作是行和列的重叠使用。

关键因素

1、循环执行的次序。

2、循环的范围及终结条件。

3、与循环条件相关联的内容。

练习一:

库里建一个方块元件,起一个类名为GrayBox,长宽为30x30像素。

用下面的代码来测试舞台中添加元件的次序。

var colCount = 5;
var rowCount = 10;

var paper:Sprite = new Sprite();
var pen:Graphics = paper.graphics;
pen.lineStyle( 4,0xffff00,1);
pen.moveTo( 16,16);

for (var col:uint = 0; col<colCount; col++) {
 for (var row:uint =0; row< rowCount; row++) {
  var tSprite  = new GrayBox();
  tSprite.x = col * 32;
  tSprite.y = row * 32;    
  addChild( tSprite );  
  pen.lineTo( tSprite.x+16 ,tSprite.y+16);
 }
}

addChild( paper );

效果如下:

将内层for循环移动到外面,可以看到元件添加的次序发生了变化,但总体布局没有变化。

练习二:

利用for循环增加更多的事件,可以得到下面的效果:

代码如下:

var colCount = stage.stageWidth/30;
var rowCount = stage.stageHeight/30;

for (var col:uint = 0; col<colCount; col++) {
 for (var row:uint =0; row< rowCount; row++) {
  var tSprite  = new BlackBox();
  tSprite.x = col * 30;
  tSprite.y = row * 30;
  tSprite.adjust = 0;
  tSprite.hasListener = false;
  addChild( tSprite );
  tSprite.addEventListener(MouseEvent.ROLL_OVER,onMOver);
  tSprite.addEventListener(MouseEvent.ROLL_OUT,onMOut);
 }
}

function onMOver(evt) {
 var obj = evt.target;
 obj.alpha = 0;
 //当鼠标停在目标块上时,该块一直保持隐藏状态,
 //若该侦听并不存在,系统会自动忽略掉该行内容。
 obj.removeEventListener(Event.ENTER_FRAME,onFreshAlpha );
}
function onMOut(evt) {
 //鼠标移出某目标块时,该块逐渐恢复显示
 var obj = evt.target;
 obj.addEventListener(Event.ENTER_FRAME,onFreshAlpha );
}
function onFreshAlpha(evt) {
 var obj = evt.currentTarget;
 obj.alpha += 0.05;
 if (obj.alpha==1) {
  //显示完成后,去除侦听,以节约系统资源。
  obj.removeEventListener(Event.ENTER_FRAME,onFreshAlpha );
 }
}

标签集:TAGS:AS3 Flash
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}