看效果先。
点击浏览该文件 先说,头次发这么么复杂的东东,说得不明白的勿砸,后面有源文件的。
1、打开MX,将影片属性的背景设为黑色。
2、新建一MC,名boundbox,内画无填充矩形一个,大小随喜,
3、新建一MC,名yuan,画一填充圆形,大小为4*4,亮黄色。
4,新建一MC,名fly,在第二帧插入刚才做的MC,yuan.然后在第20帧插入要害帧,把第20帧的alpha改为0。补间动画。然后,新建一层,于第1帧上写上stop();最后一帧要害帧,写上:
lightsoff = true;
gotoAndStop(1);
5。新建一MC,把fly导入。新建一层,在上面写上AS:stop();选中MCfly,给它写上AS:
onClipEvent(load) {
var flySpeed = 40; // set the speed at which they travel
var lightsoff = true;
//获取活动范围,getBounds()为返回实例最大、最小的X、Y坐标。
var myBounds = _root.boundbox.getBounds(_root);
_parent._x = random(myBounds.xMax); // randomize the starting positions
_parent._y = random(myBounds.yMax);
var a = 6; // 最好取1.1-10数值越小,萤火虫越活跃。
var d = 1.2; // 最好取1.1 - 4,数值越小,移动越快。
var newX = _parent._x;
var newY = _parent._y;
var myXspeed = 0;
var myYspeed = 0;
}
onClipEvent(enterFrame) {
var blink = random(30); //产生随机闪耀效果。越小闪耀越频繁,
if (!blink && lightsoff) {
gotoAndPlay(2);
lightsoff = false;
}
var change = random(5); // randomize the movement
if (change) {
newX = _parent._x + random(flySpeed)-(flySpeed/2);
newY = _parent._y + random(flySpeed)-(flySpeed/2);
}
if (newX > myBounds.xMax) { // check the bounds
newX = myBounds.xMax;
} else if (newX < myBounds.xMin) {
newX = myBounds.xMin;
} else if (newY > myBounds.yMax) {
newY = myBounds.yMax;
} else if (newY < myBounds.yMin) {
newY = myBounds.yMin;
}
myXspeed = ((_parent._x-newX)/a+myXspeed)/d; // find the new point, and start moving in that direction
myYspeed = ((_parent._y-newY)/a+myYspeed)/d;
_parent._x -= myXspeed;
_parent._y -= myYspeed;
}
以上注解,英文是原文件有的,汉字部分是自己试出来的。
最后,给这个元件在库中设置链接,标识符名取:fly。
6、回到场景,从库中导出boundbox,实例名也取boundbox.。
7、最后,在主场景中新建一层,上面写上AS。 //随机产生萤火虫数量。
var bugs = random(15)+8;
for (i=0; i<=bugs; i++) {
attachMovie("fly", "fly"+i, i);
}
_root.boundbox._visible=false;
stop ();
好了,回车看看效果。 当然这个还很粗糙,(本人部分还看不懂)可以在细节上多处理一下,让萤火虫的光线更柔和,还可以写一段随机产生萤火虫大小的AS,让这一切更真实。
顺便也向高手们请教下下:
if (!blink && lightsoff) {
gotoAndPlay(2);
lightsoff = false;
}
var change = random(5); // randomize the movement
if (change)
这部分不太懂。change和blink都是随机产生的数字,和这个判定条件有什么作用?
源文件:
点击浏览该文件