发新话题
打印

[求救] 关于“一帧做出雪景画面”的代码

关于“一帧做出雪景画面”的代码

在"闪吧"主页里看到的 flash8:一帧做出雪景画面”
多好的AS教程阿,只是,本人对其中的代码有点陌生,不知道大家都理解了么?

还望哪位高手逐段解释一下,不胜感激!





以下转载教程及其代码:

flash8:一帧做出雪景画面

  不用任何元件,只用一帧,在flash8中就可以做出雪景画面。设背景为黑色,或导入一张你喜欢的图片做背景,复制下面的代码到场景的第一帧就行了。

fallSnow(this,150, [600, 375]);
function fallSnow(path, num, size) {
for (var i = 0; i<num; i++) {
path.createEmptyMovieClip("xue"+i, i);
var mc = path["xue"+i];
mc._x = random(size[0]);
mc._y = random(size[1]);
mc.ro = [1, -1][random(2)];
mc.xtime = random(20);
mc.startTime = 0;
mc.id = Math.pow(i, 1/2);
createSnow(mc, mc.id/2.5, "0xffffff", 20*mc.id);
}
var loop = function () {
updateAfterEvent();
for (var i = 0; i<num; i++) {
var mc = path["xue"+i];
mc._rotation += mc.ro*5;
mc._x += mc.id*mc.ro/10;
mc._y += mc.id/2;
mc.startTime++;
scanTar(mc);
scanEdge(mc, size);
}
};
var interval = setInterval(loop, 10);
}
function createSnow(mc, radius, c, alpha) {
with (mc) {
moveTo(0, -radius);
beginFill(c, alpha);
linestyle(0, "0x000000", 0);
for (var i = 1; i<=6; i++) {
var a1 = -Math.PI/6+i*Math.PI/3;
var a2 = i*Math.PI/3;
lineTo((radius/5)*Math.sin(a1), -(radius/5)*Math.cos(a1));
lineTo(radius*Math.sin(a2), -radius*Math.cos(a2));
}
endFill();
}
}
function scanTar(mc) {
if (mc.startTime>=mc.xtime) {
mc.startTime = 0;
mc.xtime = random(20);
mc.ro = [1, -1][random(2)];
}
}
function scanEdge(mc, size) {
if (mc._x>size[0]) {
mc._x = 0;
} else if (mc._x<0) {
mc._x = size[0];
}
if (mc._y>size[1]) {
mc._y = 0;
}
}

[ 本帖最后由 Leen_6 于 2008-5-15 17:29 编辑 ]

TOP

代码就是厉害啊
可是它是怎么实现的呢?

TOP

引用:
原帖由 cg_prince 于 2008-5-15 21:44 发表
代码就是厉害啊
可是它是怎么实现的呢?
把舞台背景设置为黑色,然后把代码复制到第一帧,Ctrl+Enter就可以看到雪景效果了。

操作其实非常简单,效果也不错,如果能理解代码的含义就完美了。

召唤高手~~~~~~~

TOP

顶一下,继续寻觅高手

TOP

刚学FLASH我也想知道

有没有高手介绍一些呀

TOP

呵呵```感谢提供代码学习```

应该只有这一句不熟吧:
mc.ro = [1, -1][random(2)];//随机返回数组中各个的值,这里就是1或者是-1

TOP

看看这个就明白了的
function showTest():Void {
        var ran:Number=random(2);
        var arr:Array=new Array(1,-1);
        trace(ran+"\n")
        a = [1, -1][ran];
        b=arr[ran];
        trace(a==b);//返回true
}
setInterval(showTest, 100);

//说明:
//random(n)返回一个0到n之间但不包含n的一个随机整数

TOP

我跟贴,见谅

TOP

fallSnow(this,150,[600, 375]);

function fallSnow(path, num, size)
{

for (var i = 0; i<num; i++)//循环出150个雪花并设置每一片雪花的属性
{
  path.createEmptyMovieClip("xue"+i,i);
  var mc = path["xue"+i];
  mc._x = random(size[0]);
  mc._y = random(size[1]);
  mc.ro = [1, -1][random(2)];
  mc.xtime = random(20);
  mc.startTime = 0;
  mc.id = Math.pow(i, 1/2);
  createSnow(mc,mc.id/2.5,"0xffffff",20*mc.id);
}
var loop = function ()//控制雪花位置
{
updateAfterEvent();
for (var i = 0; i<num; i++)
{
var mc = path["xue"+i];
mc._rotation += mc.ro*5;
mc._x += mc.id*mc.ro/10;
mc._y += mc.id/2;
mc.startTime++;
scanTar(mc);
scanEdge(mc,size);
}
};
var interval = setInterval(loop, 10);//重复函数LOOP
}
function createSnow(mc, radius, c, alpha)//绘制雪花
{
with (mc)
{
  moveTo(0,-radius);
  beginFill(c,alpha);
  linestyle(0,"0x000000",0);
  for (var i = 1; i<=6; i++)
  {
   var a1 = -Math.PI/6+i*Math.PI/3;
   var a2 = i*Math.PI/3;
   lineTo((radius/5)*Math.sin(a1),-(radius/5)*Math.cos(a1));
   lineTo(radius*Math.sin(a2),-radius*Math.cos(a2));
  }
  endFill();
}
}
function scanTar(mc)//改变雪花属性
{
if (mc.startTime>=mc.xtime)
{
  mc.startTime = 0;
  mc.xtime = random(20);
  mc.ro = [1, -1][random(2)];
}
}
function scanEdge(mc, size)//控制雪花运动范围
{
if (mc._x>size[0])
{
  mc._x = 0;
}
else if (mc._x<0)
{
  mc._x = size[0];
}
if (mc._y>size[1])
{
  mc._y = 0;
}
}

[ 本帖最后由 caii 于 2008-6-3 12:10 编辑 ]

TOP

帮你顶~~~~~~~~~~~~~~~~

TOP

学习中

TOP

不错,,,AS学习中。。。
网站建设  http://www.1010work.cn

TOP

还没有没更好一点的啊,

TOP

发新话题