Script Treeeeeeeeeeeeeee Tech (请勿私自转载本文)
********************************************************

********************************************************
Action script for (mc)Spot Frame1
----------------------------------------------------------
var children =new Array ();
当MC被attach后,经过第一侦。它的chidlren数组就被建立了。这个时候children是空的。
而以后,每当在这个mc新加一个节点的时候,就给它的children数组新增一个元素,记录刚刚新增的节点(一个节点,即为一个mc)。
那么每新增一个节点,我们到底要做多少工作呢?read this function:
function createChild(){
var newID=this._name+"_"+this.children.length 产生新节点的name
//注意:在这个脚本里面this.children.length经常用到。因为Array.length比Array的最大下标大1。这样就保证新增的不会跟前面的重复。
this.attachMovie("spot",newID,this.children.length);
with(evil(newID)){
//这个with似乎不太必要,不过考虑以后如果需要修改多个属性,先把框架在这打好吧。
_y=87;// 87=Math.round(80+16.5/2) (线长80,圆的直径16.5)
}
children[this.children.length]=evil(newID);
//在children数组中新增一个元素记录刚刚attach的新节点。这里用children.push()也许更正规一点。
注意:这个evil使children记录的是直接指向mc的引用。而不是ID.这样方便以后调用。
//写出下面这段代码需要动一翻脑筋。
每新增一个节点的时候,需要调整与该节点处于同一级的所有节点的位置,准确的说是旋转角度.而且这个过程应该是动态的连续的,而不是直接从起始位置跳到目标位置.(吃饭了,待续)
evil(newID).onEnterFrame=function (){
var cl=this.children.length;
for(var i=0;i
var tr=Math.round((180 / cl)*(i+0.5)-90);
if (this.children[i]._rotation>tr) this.children[i]._rotation--;
else if(this.children[i]._rotation }
};
}
 darkvn
职务:普通成员
等级:1
金币:1.0
发贴:222
|
#32002/8/20 15:52:42
Script Treeeeeeeeeeeeeee Tech (2) ---------------------------------------------------------- Action script for (mc)Spot Frame1 ---------------------------------------------------------- 节点的位置调整是由其父mc来完成的.所以我们在这里写mc的onEnterFrame事件实际上是为这个mc的子节点服务的。 evil(newID).onEnterFrame=function (){ var cl=this.children.length;//得到mc的子节点数 for(var i=0;i

var tr=Math.round((180 / cl)*(i+0.5)-90);//计算第i个子节点的_rotation(方法如图 if (this.children[i]._rotation>tr) this.children[i]._rotation--; else if(this.children[i]._rotation//旋转子节点直到它与目标位置重合。 }
};
}
关于新增节点的就讲完了。下面看看如何删除子节点。 要删除子节点,简单的方法是直接遍历children数组,然后直接调用removeMoveclip方法将其直接remove掉,这样就不需要考虑其子子节点的情况,因为子节点会随父节点一起自动remove掉。但这不是我们想要的效果,因为这样移除子节点的过程不平滑(直接消失)。 现在看看这个问题我是如何解决的。
学过编程的朋友一看就知道,我用了递归的方法访问了子节点的所有下层子节点,并调用gotoAndPlay()通过预先制作好的tween变形使其平滑消失. (为了释放资源,tween变形的最后一侦有这样一句:this.removeMovieClip();将自己删除)
function removeChild(theObj){ while(theObj.children.length>0) if(theObj.children[theObj.children.length-1].children.length>0) removeChild(theObj.children[theObj.children.length-1]);//如果该节点有子节点则递归….. else { theObj.children[theObj.children.length-1].gotoAndPlay(17); //先移除最后一个子节点因为Array.pop()方法只能删除数组最后一个元素. theObj.children.pop();//每remove一个节点,其父节点的children数组元素减一 } }
有了上面的函数,随机移除一个子节点就好实现了。 function removeChildOne(theObj){ var r=random(theObj.children.length);//随机得到一个子节点 removeChild(theObj.children[r]);//调用上面的函数先移除该子节点的所以子子节点。 theObj.children[r].gotoAndPlay(17);//再把自己也移除掉。 theObj.children[r]=theObj.children[theObj.children.length-1];//仍然是由于Array.pop()只能删除数组最后一个元素,所以把最后一个元素的值赋给存放刚刚移除的mc的数组元素。然后调用pop()方法,移除最后一个元素。有点呕口,慢慢想就明白了。 theObj.children.pop(); }
好了,讲解完毕。感觉好辛苦。估计能听明白的不用我说自己也能写出来。:D
 civ3
职务:普通成员
等级:1
金币:0.0
发贴:45
|
#42002/8/20 17:49:23
有趣。  你是学人口学的吗?我总觉得这个东东有点象征意义……
|
 朝朝暮暮
职务:普通成员
等级:5
金币:34.2
发贴:3517
|
#52002/8/22 13:28:45
这是什么东东啊?
|
|