(转)制作别致的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]] jc:cry 越做头越大,太笨了版主把此贴删了吧,光有热心是不行的,回贴还要有资本啊!
运行提示:
**错误** 场景=场景 1, 图层=图层 1, 帧=1:第 2 行: 语法错误。
count =1; //当前星星的编号
ActionScript 错误总数:6 报错:6
郁闷啊!
[[i] 本帖最后由 nihl009 于 2008-11-7 22:52 编辑 [/i]] 天呀。还是一头雾水哦。俺太笨了jc:cry 。jc:shout jc:cry jc:cry jc:cry 不会丫太笨了jc:cry 按照这个教程一步一步做了,可是结果没有成功!测试影片的时候和上面的朋友是一样的提示代码错误。
把教程的原件下载了,用硕思闪客破解后研究了半天也没看出名堂来。
(1)那一大段的AS代码到底是写在什么地方的呢?在源文件中打开“动作”面板就找不到这一大段的代码呀。
(2)我试着在源文件中,用我的另外一张背景图片(也就是在原图片中加上一棵圣诞树)代替原来的背景图片,并且把原来的背景图片删除了,可是测试影片时还是原来的背景,有点奇怪哈。
我把自己做的源文件传上来,老师们给看看,问题到底是出在哪儿呢。谢谢了
[[i] 本帖最后由 随意 于 2008-11-17 00:03 编辑 [/i]]
教程中的代码我已修改,可直接复制了.
看了楼上各位的问题,各位应注意以下几点:1.代码不能复制这里的,如果 复制请将每行前面的空格删除,如果还要报错,那就重新自已输.但要注意不要在中文状态下,全角状态下输入,否则会报错.
2.这个教程中的所有的代码均是写在相应的元件上的,而元件往往是分了几层的(即元件中还套有元件),所以,代码一定要写在正确的元件上.所有代码都是写在元件上的,写在帧那一定会出错.
3.随意的背景图的问题,你找一下,因为背景图也是在元件中的.
[[i] 本帖最后由 sanbos 于 2008-11-17 20:06 编辑 [/i]]
源文件
请问能否将源文件发出来?请指教错误
**错误** 符号=ac, 图层=goal, 帧=1:第 1 行: 剪辑事件只允许用于影片剪辑实例onClipEvent(load){
**错误** 符号=ac, 图层=goal, 帧=1:第 5 行: 剪辑事件只允许用于影片剪辑实例
onClipEvent(mouseMove){
ActionScript 错误总数:2 报错:2 郁闷阿 我也是新手 action影片剪辑里带图层的该怎么加到action里阿 斑竹! **错误** 符号=action, 图层=background, 帧=1:第 1 行: 剪辑事件只允许用于影片剪辑实例
onClipEvent(load){
**错误** 符号=action, 图层=background, 帧=1:第 5 行: 剪辑事件只允许用于影片剪辑实例
onClipEvent(mouseMove){
**错误** 符号=action, 图层=background, 帧=1:第 26 行: 遇到意外的 '}'
} 做得我想砸电脑了 斑竹阿 请你尽快解决这个问题吧! 楼上朋友看了你的提问我试做了一幅,测试了一下发现没有问题,可能是没有完全理解教材的讲介(我初看下也觉得有些别扭),我把我刚做的原文件发上你看看(主要还是看下小博士的解释)
[swf]http://bbs.jcwcn.com/attachments/month_0812/20081224_812389d37f633de7fea4IpY6tFgfo92E.swf[/swf]
[[i] 本帖最后由 zctmh0336 于 2008-12-24 10:08 编辑 [/i]] 斑竹你真是太好了 呵呵 我好好看下 终于知道怎么加了 原来要把action复制个到场景里阿 再次感谢斑竹 对了 如果星星数量自己定 代码会不会变? [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]
我没试过,明天有时间试试再答复。 [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学习下吗 [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
} 做出来了,谢谢楼主分享 我自己做了一下,加了点音乐。麻烦楼主看看算不算合格? 21楼朋友的作业
[swf]http://bbs.jcwcn.com/attachments/month_0812/20081226_a7db83a327f147c2a458OyiIHQcyXm43.swf[/swf] 交作业,多谢版主了,反反复复的做了好久才成功的,
[swf]http://bbs.jcwcn.com/attachments/month_0901/20090125_23ee7ae01c9b0fcc38edR9nfgJ1rxG1g.swf[/swf] 我是很笨,没做出来,再接再厉! 很漂亮别致的圣诞贺卡。我好喜欢啊,谢谢楼主。
页:
[1]
