求助关于Flash下雨动画的代码
答案:1 悬赏:0 手机版
解决时间 2021-02-04 12:46
- 提问者网友:聂風
- 2021-02-04 06:48
求助关于Flash下雨动画的代码
最佳答案
- 五星知识达人网友:煞尾
- 2021-02-04 08:05
先在你的水花动画影片剪辑最后一帧(水花溅起后消失的那帧)上写stop(); 把它拖到场景上,起个实例名叫 "sh"
写在雨点上的代码
onClipEvent(load){
speed=random(30)+50;
}
onClipEvent(enterFrame){
this._y+=speed;
if(this._y>790){
var i = this._name.substr(2,2);
_root["sh"+i]._x = this._x;
_root["sh"+i]._y = this._y;
_root["sh"+i].gotoAndPlay(1);
this._y=-40;
}
}
写在主场景帧上的代码
i = 1;
while (i < 15)
{
duplicateMovieClip("yd", "yd" + i, i);
setProperty("yd" + i, _x, random(570));
setProperty("yd" + i, _y, random(600));
setProperty("yd" + i, _xscale, random(5) + 15);
setProperty("yd" + i, _yscale, getProperty(eval("yd" + i), _xscale));
duplicateMovieClip("sh", "sh" + i, i + 15);
i++;
}
while(i<15) 是雨点的数目,整个场景里的雨总数少于 15点的时候它就会被反复执行,追问对啊,上面给i赋值1,那么i肯定<15啊,循环中i自加也不会影响到while这一句啊,正在纠结这个地方呢。。还有var这句是什么意思啊?追答var 是声明一个对象的意思,AS2.0里面有没有var都可以。追问var i = this._name.substr(2,2);
这个语句还是看不懂追答每个雨点的实例名都不同,它们分别是是 yd1到yd15,你也创建了15个水花 sh1到sh15,现在要让所有同序号的水花和雨点对应起来。
每当某个雨点落到底端(Y坐标大于790)的时候都会执行这个。
if(this._y>790){
var i = this._name.substr(2,2);
_root["sh"+i]._x = this._x;
_root["sh"+i]._y = this._y;
_root["sh"+i].gotoAndPlay(1);
this._y=-40;
}
this._name指的是当前符合条件的雨点的实例名,它是一个字符串,不同的雨点的 this._name是不同的!
字符串.substr(开始下标,长度) 是用来截取字符串里的内容的。
substr(2,2)第一个2的意思是从第2个字符之后开始截取,第二个2的意思是从剩下的字符中最多截取2个字符出来(如果剩下不足2个字符则截取1个,不足1个则截取0个)。
比如 "yd15"这个字符串,被substr(2,2)之后就被截取出 "15"这个序号了。
"yd1"被substr(2,2)之后, 就被截取出 "1"序号了。
你现在用变量i保留这个雨点的序号,然后用来控制主场景上对应序号的水花,让它的坐标等于你的雨点的坐标,并且重新播放溅起的动画。
_root["sh"+i]._x = this._x;
_root["sh"+i]._y = this._y;
_root["sh"+i].gotoAndPlay(1);
写在雨点上的代码
onClipEvent(load){
speed=random(30)+50;
}
onClipEvent(enterFrame){
this._y+=speed;
if(this._y>790){
var i = this._name.substr(2,2);
_root["sh"+i]._x = this._x;
_root["sh"+i]._y = this._y;
_root["sh"+i].gotoAndPlay(1);
this._y=-40;
}
}
写在主场景帧上的代码
i = 1;
while (i < 15)
{
duplicateMovieClip("yd", "yd" + i, i);
setProperty("yd" + i, _x, random(570));
setProperty("yd" + i, _y, random(600));
setProperty("yd" + i, _xscale, random(5) + 15);
setProperty("yd" + i, _yscale, getProperty(eval("yd" + i), _xscale));
duplicateMovieClip("sh", "sh" + i, i + 15);
i++;
}
while(i<15) 是雨点的数目,整个场景里的雨总数少于 15点的时候它就会被反复执行,追问对啊,上面给i赋值1,那么i肯定<15啊,循环中i自加也不会影响到while这一句啊,正在纠结这个地方呢。。还有var这句是什么意思啊?追答var 是声明一个对象的意思,AS2.0里面有没有var都可以。追问var i = this._name.substr(2,2);
这个语句还是看不懂追答每个雨点的实例名都不同,它们分别是是 yd1到yd15,你也创建了15个水花 sh1到sh15,现在要让所有同序号的水花和雨点对应起来。
每当某个雨点落到底端(Y坐标大于790)的时候都会执行这个。
if(this._y>790){
var i = this._name.substr(2,2);
_root["sh"+i]._x = this._x;
_root["sh"+i]._y = this._y;
_root["sh"+i].gotoAndPlay(1);
this._y=-40;
}
this._name指的是当前符合条件的雨点的实例名,它是一个字符串,不同的雨点的 this._name是不同的!
字符串.substr(开始下标,长度) 是用来截取字符串里的内容的。
substr(2,2)第一个2的意思是从第2个字符之后开始截取,第二个2的意思是从剩下的字符中最多截取2个字符出来(如果剩下不足2个字符则截取1个,不足1个则截取0个)。
比如 "yd15"这个字符串,被substr(2,2)之后就被截取出 "15"这个序号了。
"yd1"被substr(2,2)之后, 就被截取出 "1"序号了。
你现在用变量i保留这个雨点的序号,然后用来控制主场景上对应序号的水花,让它的坐标等于你的雨点的坐标,并且重新播放溅起的动画。
_root["sh"+i]._x = this._x;
_root["sh"+i]._y = this._y;
_root["sh"+i].gotoAndPlay(1);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯