中国教程网论坛's Archiver

清风掠影 发表于 2008-11-7 15:17

(转)制作别致的Flash圣诞贺卡(已修改)

原文作者: yujia9827
打开贺卡,圣诞夜的雪景浮现眼前。随着鼠标的移动,一颗颗星星逐渐闪现,然后飞到一起,在夜空中组成一颗闪亮的心……
  圣诞节快到了,你难道不想做一张这样别致的贺卡送给你的GF吗?
[swf]http://bbs.jcwcn.com/attachments/month_0811/20081107_16a5447202ab80c07098aUgroYNASoCR.swf[/swf]
怎么样?动心了?OK!现在我们就开始制作吧。
  一、要准备的素材   
1.星星的闪光  
 包括圆形的闪光和十字形的闪光两种。圆形的闪光就是先画一个正圆,然后改变其填充为白色到透明的径向渐变就好了,当然别忘了删掉圆的线边。做好以后将其转化为图形元件“glow”。
 十字形的闪光制作稍复杂一点:
首先画一个长方形,然后将其线边删掉;改变其填充为白色到透明的线性渐变;点取“填充转换工具”,将长方形上的渐变调整到适当角度(如图所示);将上面所画的长方形复制三份,摆成如图所示的形状,然后将其转化成图形元件(注意:这一步很重要,不转换成元件的话在下一步叠放中将会发生互相遮挡的情况,达不到应有的透明效果);再将这个形状复制一份,调整使之与已有图形垂直,将最后所得的图形转化成图形元件,取名“stargfx”,这就是十字形闪光的成品了。
[attach]973814[/attach]

2.一张合适的背景图:找一张有气氛的图片做为影片的背景。你总不希望你的影片只是单调地有一些星星在飞吧,这样可讨不到女孩子欢心噢。图片应该是深色的,最好有星空做背景,这样才与我们的效果相搭配嘛。   需要准备的东西就这些了,下面就要动手把这些简单的东西组合成绚丽的特效啦。
 二、影片元件的制作
  1.会闪烁的星星  新建一个影片剪辑“star”,将已有的层改名“star”,然后在这一层正中央画一个很小的圆,这是星星的主体;新建一个层“starglow”,将我们做好的圆形发光效果“glow”放置在主星星体上方。再新建一层“stargfx”,将我们做好的“stargfx”图形元件放在星星主体上方。  然后来做闪烁的动画效果:  “stargfx”层:改变第一帧“stargfx”元件的Alpha值为0;然后在第5帧添加关键帧,改变“stargfx”的alpha值为 100,并将其旋转一个适当的角度(比如顺时针45度);在第十帧添加关键帧,改变“stargfx”的alpha值为0,并沿与上次相同的方向旋转一个同样的角度;最后在各关键帧之间生成动画。如果发现生成动画后元件旋转的方向与想要的不同,可以点击两关键帧之间的任何一点,然后在属性栏里改变其旋转方向。
[attach]973815[/attach]

glow”层:关键帧的位置和元件的alpha值调成与上一层相同就行了,不过旋转就免了吧。   将每一层的帧数延长至70帧(可以自定,但最好不要太少。这主要是为了在影片播放时星星闪烁有个时间间隔,不致于闪个不停)。  
 2.目标点:   新建一个影片剪辑,在其中画一个小正方形。这东西用在做什么?呵呵,这就是我们的星星要飞去的方向啦,具体的作用在下面的“写入ACTION SCRIPT”中会讲到。
 3.动作区:  新建一个影片剪辑“action”,将现有层改名为“background”,将我们导入的图片背景拖动至中心位置。然后新建一个层“star”,接下来最艰苦的工作开始了,我们要用我们刚才做好的目标点在这一层上摆一个图形,也就是我们想要星星最后组成的图案,在这个例子里我们要摆的就是一颗心。注意:摆好以后还要给每个目标点归定不同的instance名,命名规则是“*+依次的数字”,在本例中我们使用z1-z60。这就意味着我们的这颗心由 60个目标点组成,标号从“z1”一直到“z60”。
[attach]973816[/attach]

[attach]973817[/attach]

终于摆完了?怎么样,很累吧。MM的欢心可不是那么容易讨的噢。选中你所摆的图案,把它的alpha值调到0,这样在影片中就看不到它们了,也就不会有人知道星星怎么那么听话啦。   接下来拖动我们做好的星星“star”到这一层,将其instance名也改为“star”。

三、Action Script控制
  好了,现在最关键的步骤来了。先具体说一下这个效果的实现原理:我们先用目标点摆一个图案,然后在影片播放的时候动态生成一些星星,给这些星不同的目标点,让它们飞向各自的目标点,最后就组成我们摆好的图案了。怎样归定每颗星的目标点呢?我们可以在每个星的影片剪辑里设一个变量,在星生成的时候给这个变量赋值,然后在星运动时就可以用eval("z"+num)的形式组合出这颗星的目标点的名字了(这也是为什么我们的目标点开始要那么命名的原因)。至于怎么让星飞过去的程序嘛,其实早就有了,记得广为流传的鼠标根随脚本么?这里只是将目标点由鼠标坐标处改成了我们自己的目标点而已。
  明白了吧?那么你可以自己尝试着写啦。如果你还是觉得一头的雾水,请看下面的源码。关键地方已经有了详细的注释。
  1.点击“action”影片剪辑,在Action面板中写入如下的代码:  [code]onClipEvent(load){
count=1;
maxcount =400;
}
onClipEvent(mouseMove){
        if(count<maxcount && (Math.random()*5)<1){
                duplicateMovieClip(star,"star"+count,count);
                var star_mc = eval("star"+count);
                if(count<=60){
         star_mc._xscale = star_mc._yscale =100;
         star_mc.active = true;
         star_mc.mytarget = count;
                } else {
         star_mc._xscale = star_mc._yscale=50;
         star_mc.active = false;
         }
           star._x = _xmouse;
           star._y = _ymouse;
           count++;
        }
        }
[/code]  2.点击“action”中的“star”,在Action面板中写入如下的代码:[code]onClipEvent(enterFrame){
        if(realactive){
        xm = eval("_parent.z"+mytarget)._x-_x;
    ym = eval("_parent.z"+mytarget)._y-_y;
     _x += xm/5;
     _y += ym/5;
     if(Math.abs(xm)<0.5 && Math.abs(ym)<0.5);
      realactive=false;
       }
       }
[/code] 
  3.编辑“star”影片剪辑,插入ActionScript如下:  
新插入一层,在40帧处插入关键帧,打开帧动作面板输入:
 realactive=active;   
这样做的目的就是让星星在原地停留一会儿(也就是影片播放到40帧以后)再向目标点运动。  好了,大致的制作过程就是这些了。你还可以加入更多的效果使影片更加完善,比如:加入文字的动画效果(参看源文件),或是增加通过随机函数增加星星动作的随机性等等,一切你自己发挥啦。然后,在圣诞前夜,给心仪的MM发去这样的一张贺卡,然后,你就只管偷着乐吧?

[[i] 本帖最后由 sanbos 于 2008-11-17 20:01 编辑 [/i]]

nihl009 发表于 2008-11-7 17:51

jc:cry 越做头越大,太笨了版主把此贴删了吧,光有热心是不行的,回贴还要有资本啊!
运行提示:
**错误** 场景=场景 1, 图层=图层 1, 帧=1:第 2 行: 语法错误。
         count =1;  //当前星星的编号

ActionScript 错误总数:6          报错:6


郁闷啊!

[[i] 本帖最后由 nihl009 于 2008-11-7 22:52 编辑 [/i]]

zoneli_ya 发表于 2008-11-7 18:30

天呀。还是一头雾水哦。俺太笨了jc:cry 。jc:shout

sooo 发表于 2008-11-16 17:40

jc:cry jc:cry jc:cry 不会丫太笨了jc:cry

随意 发表于 2008-11-16 23:49

按照这个教程一步一步做了,可是结果没有成功!测试影片的时候和上面的朋友是一样的提示代码错误。
把教程的原件下载了,用硕思闪客破解后研究了半天也没看出名堂来。
(1)那一大段的AS代码到底是写在什么地方的呢?在源文件中打开“动作”面板就找不到这一大段的代码呀。
(2)我试着在源文件中,用我的另外一张背景图片(也就是在原图片中加上一棵圣诞树)代替原来的背景图片,并且把原来的背景图片删除了,可是测试影片时还是原来的背景,有点奇怪哈。
我把自己做的源文件传上来,老师们给看看,问题到底是出在哪儿呢。谢谢了

[[i] 本帖最后由 随意 于 2008-11-17 00:03 编辑 [/i]]

sanbos 发表于 2008-11-17 11:36

教程中的代码我已修改,可直接复制了.

看了楼上各位的问题,各位应注意以下几点:
1.代码不能复制这里的,如果 复制请将每行前面的空格删除,如果还要报错,那就重新自已输.但要注意不要在中文状态下,全角状态下输入,否则会报错.
2.这个教程中的所有的代码均是写在相应的元件上的,而元件往往是分了几层的(即元件中还套有元件),所以,代码一定要写在正确的元件上.所有代码都是写在元件上的,写在帧那一定会出错.
3.随意的背景图的问题,你找一下,因为背景图也是在元件中的.

[[i] 本帖最后由 sanbos 于 2008-11-17 20:06 编辑 [/i]]

scolfield111 发表于 2008-12-22 16:38

源文件

请问能否将源文件发出来?

scolfield111 发表于 2008-12-22 17:12

请指教错误

**错误** 符号=ac, 图层=goal, 帧=1:第 1 行: 剪辑事件只允许用于影片剪辑实例
     onClipEvent(load){

**错误** 符号=ac, 图层=goal, 帧=1:第 5 行: 剪辑事件只允许用于影片剪辑实例
     onClipEvent(mouseMove){

ActionScript 错误总数:2          报错:2

coocoo5211 发表于 2008-12-24 02:01

郁闷阿  我也是新手   action影片剪辑里带图层的该怎么加到action里阿  斑竹!

coocoo5211 发表于 2008-12-24 02:05

**错误** 符号=action, 图层=background, 帧=1:第 1 行: 剪辑事件只允许用于影片剪辑实例
     onClipEvent(load){

**错误** 符号=action, 图层=background, 帧=1:第 5 行: 剪辑事件只允许用于影片剪辑实例
     onClipEvent(mouseMove){

**错误** 符号=action, 图层=background, 帧=1:第 26 行: 遇到意外的 '}'
             }

coocoo5211 发表于 2008-12-24 02:10

做得我想砸电脑了

coocoo5211 发表于 2008-12-24 02:20

斑竹阿  请你尽快解决这个问题吧!

zctmh0336 发表于 2008-12-24 09:56

楼上朋友看了你的提问我试做了一幅,测试了一下发现没有问题,可能是没有完全理解教材的讲介(我初看下也觉得有些别扭),我把我刚做的原文件发上你看看(主要还是看下小博士的解释)
[swf]http://bbs.jcwcn.com/attachments/month_0812/20081224_812389d37f633de7fea4IpY6tFgfo92E.swf[/swf]

[[i] 本帖最后由 zctmh0336 于 2008-12-24 10:08 编辑 [/i]]

coocoo5211 发表于 2008-12-25 20:20

斑竹你真是太好了 呵呵  我好好看下

coocoo5211 发表于 2008-12-25 20:50

终于知道怎么加了 原来要把action复制个到场景里阿   再次感谢斑竹

coocoo5211 发表于 2008-12-25 20:51

对了  如果星星数量自己定  代码会不会变?

zctmh0336 发表于 2008-12-25 21:26

[quote]原帖由 [i]coocoo5211[/i] 于 2008-12-25 20:51 发表 [url=http://bbs.jcwcn.com/redirect.php?goto=findpost&pid=4892192&ptid=214229][img]http://bbs.jcwcn.com/images/common/back.gif[/img][/url]
对了  如果星星数量自己定  代码会不会变? [/quote]
我没试过,明天有时间试试再答复。

coocoo5211 发表于 2008-12-25 21:32

[quote]原帖由 [i]zctmh0336[/i] 于 2008-12-25 21:26 发表 [url=http://bbs.jcwcn.com/redirect.php?goto=findpost&pid=4892369&ptid=214229][img]http://bbs.jcwcn.com/images/common/back.gif[/img][/url]

我没试过,明天有时间试试再答复。 [/quote]
   恩  谢谢你 可以加个QQ学习下吗

zctmh0336 发表于 2008-12-26 09:24

[quote]原帖由 [i]coocoo5211[/i] 于 2008-12-25 20:51 发表 [url=http://bbs.jcwcn.com/redirect.php?goto=findpost&pid=4892192&ptid=214229][img]http://bbs.jcwcn.com/images/common/back.gif[/img][/url]
对了  如果星星数量自己定  代码会不会变? [/quote]
星星数量改变代码需要相应改变,在“action”影片剪辑,Action面板中修改如下的代码:
onClipEvent (load) {
        count = 1;
        maxcount = 400;
        played = false;
}
onClipEvent (mouseMove) {
        if (count<maxcount && Math.random()*5<1) {
                duplicateMovieClip(star, "star"+count, count);
                if (count<=[color=Red]60[/color]) {    [color=Red]//星星有多少数量在此就改写多少[/color]   
                        eval("star"+count)._xscale = eval("star"+count)._yscale=100;
                        eval("star"+count).active = true;
                        eval("star"+count).mytarget = count;
                } else {
                        eval("star"+count)._xscale = eval("star"+count)._yscale=50;
                        eval("star"+count).active = false;
                        if (!played) {
                                _root.textmovie.play();
                                played = true;
                        }
                        // end if
                }
                // end else if
                eval("star"+count)._x = _xmouse;
                eval("star"+count)._y = _ymouse;
                ++count;
        }
        // end if
}

yunxch 发表于 2008-12-26 16:18

做出来了,谢谢楼主分享

yunxch 发表于 2008-12-26 16:23

我自己做了一下,加了点音乐。麻烦楼主看看算不算合格?

zctmh0336 发表于 2008-12-26 21:42

21楼朋友的作业
[swf]http://bbs.jcwcn.com/attachments/month_0812/20081226_a7db83a327f147c2a458OyiIHQcyXm43.swf[/swf]

eadnfan 发表于 2009-1-25 16:51

交作业,多谢版主了,反反复复的做了好久才成功的,
[swf]http://bbs.jcwcn.com/attachments/month_0901/20090125_23ee7ae01c9b0fcc38edR9nfgJ1rxG1g.swf[/swf]

nxasd 发表于 2009-11-19 14:45

我是很笨,没做出来,再接再厉!

新手YYY 发表于 2010-1-30 10:39

很漂亮别致的圣诞贺卡。我好喜欢啊,谢谢楼主。

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.