“微信小助手”通过精心收集,向本站投稿了10篇Flash制作人物转头动作教程,以下是小编为大家整理后的Flash制作人物转头动作教程,欢迎参阅,希望可以帮助到有需要的朋友。

篇1::Flash制作人物转头动作教程
教程
参加了一个FLASH比赛,顺便写个纪实小教程,说说自己的收获,和大家分享一下,一个人物转头动作教程,如果觉得还不错,请支持我一票,谢谢!
先看效果:
源文件下载:070123教程.rar
一、首先第一个画面,人物勾线、上色:
二、接下来画第四帧的画面:(勾线过程略)
三 、画中间画,因为人物转头动作较快,所以偷懒了,就插了两个,
四、洋葱皮用的不是很好,主要是以个人感觉画的中间画,只不过用洋葱皮调整了一下;
篇2:Flash教程:制作无限回廊效果
准备6个100 × 100的图片
1、新建Flash 文件,设置属性: 500 × 200 ,背景黑色,
2、从菜单选择文件-> 导入-> 导入到舞台。选择你要使用的图片。图1:
3、垂直地对舞台的中心放置图片。平均、水平地隔开他们。使用对齐面板。图2、图3: 4、将图片转换成影片剪辑:单击舞台上最左边的图片转换成影片剪辑。命名为”My Image 1 ″而且设定注册点为居左中位置。5、重复这个步骤,将其它的图片全部转换为影片剪辑。命名为 “ My Image 2 ″ ”,My Image 3 ″ ... 依此类推。图4:
现在你的库如图5: 6、双击”My Image 1″影片剪辑,进入My Image 1的编辑状态,添加 as图层。图6: 选中第1帧,在动作面板中输入代码://Import TweenMax
import gs.*;
//Set the initial state for this movie clip
TweenMax.to(this, 0.5, {alpha: 0.4});
//Add mouse over & out event listeners
this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
this.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
//This function is called when mouse is over this movie clip
function mouseOverHandler(e:Event):void {
//Tween the alpha
TweenMax.to(this, 0.5, {alpha: 1});
}
//This function is called when mouse is out of this movie clip
function mouseOutHandler(e:Event):void {
//Tween the alpha
TweenMax.to(this, 0.5, {alpha: 0.4});
}
重复这个步骤到其它的影片剪辑。(当移动鼠标在一个图片上的时候,添加一个透明度效果。可以修改成放大或其它效果,自行的试验一下。)
7、前期工作已全部完成,现在开始创建无限循环,
在主时间轴,选择所有的六个影片剪辑。将他们转换成影片剪辑,命名 “ Gallery Images ”。图7:
8、为了使图片有无限循环的效果,我们需要舞台上的 “ Gallery Images ” 影片剪辑的另一个实例。因此在舞台上复制(选中Gallery Images,按住Ctrl键拖拽)另外的一个 “ Gallery Images ” 影片剪辑,放置在第一个实例后面,使他们水平地排列。图8: 9、选中舞台上的 “ Gallery Images ” 影片剪辑的两个实例。将他们转换成影片剪辑,命名 “ Infinite Gallery ” 设定注册点为左居中。图9: 10、在属性面板填入实例名字 “ infiniteGallery” 。11、添加as层,打开动作面板输入代码:
//Import TweenMax
import gs.*;
//Save the horizontal center
var centerX:Number = stage.stageWidth / 2;
//Save the width of the whole gallery
var galleryWidth:Number = infiniteGallery.width;
//Speed of the movement (calculated by the mouse position in the moveGallery function)
var speed:Number = 0;
//Add an ENTER_FRAME. listener for the animation
addEventListener(Event.ENTER_FRAME, moveGallery);
function moveGallery(e:Event):void {
//Calculate the new speed
speed = -(0.05 * (mouseX - centerX));
//Update the x coordinate
infiniteGallery.x+=speed;
//Check if we are too far on the right (no more stuff on the left edge)
if (infiniteGallery.x>0) {
//Update the gallery’s coordinates
infiniteGallery.x= (-galleryWidth/2);
}
//Check if we are too far on the left (no more stuff on the right edge)
if (infiniteGallery.x<(-galleryWidth/2)) {
//Update the gallery’s coordinates
infiniteGallery.x=0;
}
}
这一段代码负责无限循环。
12、全部完工,测试影片。
更多内容进入:
精品学习网IT教育频道
篇3:简单的Flash鼠标跟随制作教程
跟随|教程|鼠标
第一步:建立一个word MC,内有一个在中间的动态文字框,去掉可选,只需要能容纳一个字即可。字的颜色可以自己设定(千万不能是和底色是一样的啊!)
第二步:在library的连接里将word MC输出为word 符号已被以后使用你看前两步很简单吧
以后的也不难,只要你会一点点的action
第三步:(也很容易的)在你想要有移动文字的场景下(可以是主场景,也可以是另外一个mc,我是用的一个mc叫move),将默认层改为action层,然后添加两个关键帧,第二帧里的动作是:
gotoAndPlay(1);
注意:我这里不用mc,而用两帧的循环来替代entframe,我建议大家尽量把程序写在时间轴里,因为这样更有利于程序的管理,和程序运行顺序的选择,程序更一目了然,容易理解,希望大家养成这个好习惯。
第四步:(到这里还不难吧,下面是关键的程序了,就是第一帧的程序)
鼠标跟随关键是要每个文字都要跟随鼠标,但是速度不能一样快,最后停止的位置也不能一样,理解了这一点,程序就很容易理解了。具体程序及说明如下:
if (ip == null) {
Mouse.hide(); //隐藏鼠标
lx = 20; // 设置字的间距
string = “当前帧工作室”; // 设置要跟随的文字
wordlenth = string.length;
for (i=0; i
this.attachMovie(“word”, “word”+i, i+1);
this[“word”+i].word = mbsubstring(string, i+1, 1);
//获取mc并把要显示的字一次导入其中显示
}
ip = 0;
}
//
delay = 6;// 设置延迟时间,来控制字的移动速度
word0._x += (_xmouse+lx-word0._x)/delay;
// 初始化第一个字的位置
word0._y += (_ymouse-word0._y)/delay;
for (i=1; i
// 确定以后字的移动和位置
delay += 0.5;
this[“word”+i]._x += (this[“word”+(i-1)]._x+lx-this[“word”+i]._x)/delay;
this[“word”+i]._y += (this[“word”+(i-1)]._y-this[“word”+i]._y)/delay;
}
以上就是整个程序了,就这么简单,不难吧^_^,
if (ip == null)这句判断是为了数据的初始化,在里面的程序仅执行一次,以后就不执行了。
(这可是非常有用的阿,一定要掌握)
第五步:好了,所有的事都做完了,下面的就是画蛇添足了,就是加上一个自己的鼠标,做一个自己的鼠标mouse放到主场景下,然后在action层里加一句:
startDrag (“mouse”, true);
还有就是可别忘了隐藏自己的鼠标啊。

篇4:Flash制作模拟机械波动画制作教程
教程
本人是一名高中物理教师,来闪吧也有一段时间了,虽然断断续续,也算学习了一些东西,这里先要感谢各位闪友了,在前一段时间我试做了一个模拟机械波的动画,自我感觉还可以(各位别笑我),我百度了一下,好像还没有相关教程,也想练笔写一个看看,一是为了感谢闪吧,二是献给还在起跑线的各位闪友,特别是高中物理教师,希望各位能更快的进入flash的美妙殿堂,这是我第一次写,如有不足之处,还望见谅,废话少说,下面正式开始。
点击这里下载源文件(源文件)
点击这里下载源文件(源文件)
一.思路分析
从机械波的形成过程来看,它是由于振动质点通过相互作用力带动与之相邻的质点,通过相邻的点把振动形式传播出去从而形成机械波,这样就必须解决两个问题:
1、每一个质点都按照y=Acos(ωt+φ)的规律振动
2、不是所有的点都同时开始动的,他们有一定的相位差,靠近波源的点先振动。
二、实现方法
这里我只介绍横波的模拟动画。要使得质点振动,我们只需使它的y方向的位移按规律y=Acos(ωt+φ)变化即可,可以用这样的语句实现
this._y=y0+r*Math.cos(j*Math.PI/180+m)
说明:y0是平衡位置的y坐标,所有点的y0都是一样的,ω写成Math.PI/180,是把角度换成弧度制,
三.制作步骤
1、绘制质点小球(电影剪辑)。
进入主场景,选中椭圆工具,设置渐变色,如图1,按住Ctrl键和鼠标左键,在主场景中画出一个小球。
选中小球,单击鼠标右键,选择[转换为元件】(或按F8),在弹出的对话框中选择影片剪辑,注册点选在中间,单击【确定】按钮把小球转换为电影剪辑如图2
选中小球,打开右下角的它的属性面板,命名为my_mc如图3
2.实现小球的运动
选中小球,打开下方的动作面板,输入脚本, 如图4
下面我把这段代码作简单解释:
onClipEvent (load) {}表示当剪辑显示在时间轴上时,k、r、y0被初始化,其中k的初始化可能会比较难理解,它是把该电影剪辑的名字作为它的值的,而它的名字到底又是什么呢?后面会讲到,它的名字实际上分别是0到N的整数,这样做的目的何在呢?请往下看:
onClipEvent (enterFrame) {}是当剪辑显示在时间轴上后,一直重复做的事情
那就是k不断被减2(可以任意数),再用一个if语句判断,如果k<=0成立,开始执行语句this._y = y0+r*Math.sin(k*1.5*Math.PI/180)使小球运动起来,大家可以发现,k越小,越快满足k<=0,也就先动起来,那么我们思路分析中的第二点就可以实现了,所以接下来的问题是给各个质点命名了
3、复制小球,
回到主场景,新建一个层命名为Action,如图5
选中该层的第一帧,打开动作面板,写入代码,如图6
可以看得出,该代码所复制出来的电影剪辑的名称分别是从0到50的数,这下大家明白了吧,
4、哈哈,现在你可以试一试你的成果了,Ctrl+Enter一下,还满意吗?
5、实现控制
要实现对以上机械波的简单控制,,必须把代码改一下:
(1)、把onClipEvent (enterFrame) {}的代码改为
onClipEvent (enterFrame) {
if (_parent.c == 0) {
if (k<=0) {
this._y = y0+r*Math.sin(k*1.5*Math.PI/180);
}
k=k- 2;
}
}
可见只是多了一个判断,判断只有满足c == 0,才会执行代码k=k-2,才会产生小球的运动,c自然就在按钮上赋值了。
(2)、再新建一个层,从库中拖入两个按钮放在该层,我们可以在【开始】按钮上加上语句on (release) {c=0},在【暂停】按钮上加上语句on (release) {c=1}。
至此,基本完成了,纵波?差不多的啦。最后奉上本教程源程序以及另一个包含纵波的功能相对齐全的机械波源码,供参考。
篇5:简易FLASH动画制作教程:新手入门
本教程介绍的是使用Flash制作一个有趣的“小丑吹泡泡”动画,主要运用了椭圆、直线工具,以及任意变形和渐变填充等方法,操作简洁易懂,适合新手学习~~
更多相关精彩教程请点击:网页特效制作专题
制作步骤:
1、新建一个Flash文档,Ctrl+F8新建一个元件,命名为“boy”,选择椭圆工具,设笔触为黑色,按住Shift键画出一个正圆作为小丑的脸。
图01
2、新建一个图层,命名为“nose”,再画一个小椭圆作为鼻子。
图02
3、嘴巴和耳朵都可以都画在鼻子图层上。先用直线工具画出如下两条直线作为嘴和脸颊。
图03
4、用选取工具将直线调节成如下弧形以形成微笑的嘴巴和鼓起的脸颊。
5、画一个小椭圆作为耳朵的轮廓,两条小直线作为耳朵内部的线条。
图05
6、用选取工具选取一部分耳朵的外轮廓并按Delete键删掉,再把两条小直线调节成如下弧形,完成耳朵。
图06
7、眼睛是由三个小椭圆组成的,中间的椭圆填充黑色,另外两个填充白色叠加起来就行了。可以在新图层上画。
图07
8、调整好五官的位置之后给脸和鼻子上色。选中脸部,在混色器中设置如下从#FEE4CD到#FEC19A的渐变,类型为“放射状”。
9、鼻子也是同样的渐变,用填充变形工具把渐变范围缩小一点就可以了。
图09
10、画帽子。Ctrl+F8新建一个元件,命名为“cap”。先用钢笔工具或者直线工具画一个三角形。
图10
11、用选取工具将三角形的各个边调节成如下曲线。
图11
12、画一个小椭圆作为帽子上的装饰球。
13、选中帽子,在混色器中设置如下从#FDB5B5到#FB1E1E的渐变,类型为“放射状”,
图13
14、帽子上的小球也是同样的渐变,用填充变形工具把渐变范围缩小一点就可以了。
图14
15、回到场景1。新建2个图层,分别命名为“boy”和“cap”,将画好的帽子和小丑拖到各自图层上并排好位置。
图15
16、下面开始画泡泡,先画出泡泡的根部。新建一个“bar”图层,用直线工具画一个三角形填充天蓝色#00CCFF。
17、在第23帧处给三个图层都按F5插入帧,也就是使画面一直延续到23帧处。
图17
18、选择帽子所在的“cap”图层的第16帧,单击右键选“转换为关键帧”。
图18
19、再选中“cap”图层的第1帧,执行菜单/修改/变形/水平翻转,改变了帽子的方向。
图19
20、新建一个“bubble”层用来画泡泡。在第5帧上按F6插入关键帧,用椭圆工具画一个小椭圆,填充从白色到#70E2FE的放射状渐变。
21、在第15帧上按F6插入关键帧,用自由变形工具将泡泡拉大,并添加形状补间。
图21
22、同时用填充变形工具也拉大渐变填充的范围。
图22
23、画泡泡爆炸效果。在第16帧上按F7插入空白关键帧,用钢笔或直线工具画一个不规则的六边形。
图23
24、用选取工具将六条直线边调节成如下曲线形状,就有了爆炸的感觉。
图24
25、给六边形填充黄色就OK了。Ctrl+Enter可测试效果,泡泡爆炸的同时,帽子也被吹到另一边。
别看写的挺复杂,写的详细是为了方便网友阅读学习。其实操作起来非常简单,自己动手试下就知道了。
篇6:Flash相册制作大师使用教程
在本文中我们将会看到的是Flash相册制作大师的具体使用的方法!
1、在闪吧论坛上看到了高手tiger_0309制作的其中一个相册,简单但效果不错,仔细研究了一番,“采他山之玉,攻己山之石”,并作了一些改动:①代码写在一帧上②使按钮具有特效③采用补间动画使图片过渡更简单。在此感谢闪吧论坛高手tiger_0309!
2、写本教程的目的是能让更多的初学者尽快入门Flash,另一方面也是当作我的学习笔记。还是那句话,初学者写的教程面向初学者,让我们一起成为高手吧!
[要求]
1、图片以曝光形式出现,过渡自然。
2、当点击“下一张”按钮时,如果已到了最后一张,此时让该按钮变灰而失去作用;同样,没有上一张图片时,“上一张”按钮失去作用。
3、把代码写在一帧上,因为这样可以方便查看和修改。
[目的]
1、会制作按钮的简单特效。
2、取得动画的当前帧号“_currentframe”。
3、设置变量并掌握条件语句“if”的使用。
[难点]
代码集中在一帧上写
[步骤]
1、新建文件,宽400像素、高300像素,背景色为白色,帧频率设为30。具体设置如图1:
2、创建新影片剪辑元件(快捷键Ctrl+F8),名称为“pictures”,将5张图片分别从外部导入在各帧中,并在第1帧上写下代码stop;。具体设置和效果如图2:
3、创建按钮元件(快捷键Ctrl+F8),名称为“next_btn”,画一黑框白底的矩形,并延长帧至“点击”;新建层,输入“下一张”黑色文字,也延长帧。创建新影片剪辑元件,名称为“next_mc”,把“next_btn”按钮元件拖入,实例名为“next_btn”,在第二帧插入关键帧,选中第二帧的按钮,进行分离(快捷键Ctrl+B),让它失去按钮的作用,选中分离出的文字,将颜色改为灰色,同样将矩形的边框色也改为灰色。当文字和矩形大小差不多时,矩形不容易选择,此时可先全选文字和矩形,然后按住Shift键的同时再点击文字即可选中矩形。在第1帧上写下代码stop();。具体设置和效果如图3和图4:
4、同样,按第3步分别创建“prev_btn”按钮和“prev_mc”影片剪辑,注意“prev_mc”影片剪辑中“prev_btn”按钮的实例名为“prev_btn”,
5、回到主场景,创建四个图层,图层名称分别为“pictures”、“frame”、“btn_mc”、“action”。具体设置和效果如图5:
6、在“pictures”图层中第1帧把“pictures”元件拖入,放在合适的位置上,实例名为pictures,在第2帧、第11帧、第20帧分别插入关键帧(快捷键F6);在第2帧和第11帧之间以及在第11帧和第20帧分别创建补间动画,选中第2帧,在属性面板中将缓动设置为100,选中第11帧,在属性面板中将缓动设置为-100,其目的让图片切换自然。选中第11帧中的元件,打开属性面板,选择颜色→高级,再点击旁边的设置按钮,在弹出的对话框中反RGB都设为200,如果设为255是因为图片在过渡时会成为一片白。(RGB的值越大,则图片越亮且图片中原先较亮的部分最先变白,反之越黑)。具体设置和效果如图6:
7、在“frame”图层中画出一个矩形框,以美化图片;延长帧至第20帧。
8、在“btn_mc”图层,分别把元件“next_mc”和“prev_mc”拖入,放在合适的位置上,实例名分别为“next_mc”、“prev_mc”;延长帧至第20帧。第7、8步具体设置和效果如上图5:
9、在“action”图层的第1帧上写下代码:
stop();//动画开始时停止vari:Number=1;//设置变量i的初始值为1
prev_mc.gotoAndStop(2);//“prev_mc”影片,开始让它停止在第2帧,让按钮变成灰色并失去作用,因为动画开始时没有上一张图片
nEnterFrame=function(){//运行每一帧时执行以下函数
if(_root._currentframe==11){//如果主场景播放到第11帧
pictures.gotoAndStop(i);//“pictures”影片停止在第i帧,从第11帧出现第i张图片}
if(_root._currentframe==20){//如果主场景播放到第20帧
gotoAndStop(2);//主场景动画停止在第2帧
}
next_mc.next_btn.onRelease=function(){//“next_mc”影片中的按钮在释放时执行以下函数
if(i<5){//如果变量i小于5(“pictures”影片中只有5张图片)
i++;//每点击“next_mc”影片中的按钮时变量i递增1,“pictures”影片也跳转到下一帧
prev_mc.gotoAndStop(1);//“prev_mc”影片停止在第1帧,即让按钮变黑并起作用,因为此时有了上一张图片
play();//主场景动画开始播放
}
if(i==5){//如果变量i等于5
next_mc.gotoAndStop(2);//“next_mc”影片停止在第1帧,即让按钮变成灰色并失去作用,因为此时没有下一张图片
篇7:Flash制作关于光的折射和全反射教程
教程
这是一个反映光的折射和反射规律的flash动画,其效果主要是用编程实现的,大家可以先看一下效果:
点击这里下载源文件
大家可以看得出,整个flash动画大致由三部分组成:
一、基本元件:反射光线、折射光线、法线(与分界面垂值的那一条)、光源、分界面
二、各个角度的显示
三、动画的实现
这三部分中,教程将把重点放在第三部分上,将把整个的编程思路作详细讲解,好了废话少说,现在开始吧
一、基本元件的制作
这一步主要是用flash的绘图工具完成的反射光线、折射光线、法线、分界面的画法是一样的,所以只举一个例子足矣,如画分界面:
1、选取工具区的线条工具,线条粗细默认,在主场景按住Shifi键向下画一条适当长度的线段,
2、选中线段,右键―转化为元件-影片剪辑,其参数按图中设置,把它转化为影片剪辑
3、双击分界面元件,进入编辑状态,选取工具栏中的文本工具,在分界面元件的适当位置加入文字说明如图
其他的画法是一致的,不同的是:
1、法线按物理的画法是用虚线的,这可以在场景的下方属性栏设置,在笔触样式处选择如图
2、折射光线和反射光线的注册点选在左中间位置如何,各元件都画好了吗?下面就给各个元件命名吧,这个命名和转换为元件时的命名作用不一样,这次的命名将在脚本里用上。把各元件拖到场景中,分别选中元件,然后选择场景下方的属性-剪辑名称处命名,按中文拼音习惯命名吧,如分界面命名为fjm如图
其他的同样命名,反射光线命名fs,折射光线命名为zs,法线命名为fx,至于那个发光的光源,我是用工具栏的矩形工具画的,太丑了,各位应该画得比我好,同样,画好后,选中它,右键―转化为元件-影片剪辑,命名为jg(激光)。也许大家会问,入射光线呢,别急,这条光线是用脚本实现得
二、显示文本的制作
这一步牵涉到了文本工具里的动态文本和静态文本的用法
1、选中文本工具,此时的文本工具默认下是静态文本的,点击场景中的右上角,在点击处出现一个文本框、在其中输入“入射角”三字
2、同样选择文本工具,选择场景下方的属性对话框,点击文本类型下拉菜单,会出现三选项,静态文本、动态文本、输入文本,这里选择动态文本,用来动态显示入射角得数值,在上一步的文本“入射角”后按住左键拉出一个文本框,选中文本框,选择下方的属性,在变量处命名rsj(入射角)如图
最后在动态文本后用静态文本输入单位“度”,基本作法就如此,,之后依次完成折射角(zsj)、反射角(fsj)、临界角(ljj)的显示文本的制作,效果如图
三、动画的实现
1、理论分析
这部分主要是脚本了,我们先熟悉一些折射定律吧,高中物理告诉我们,当一束光线从光密介质到光疏介质(如从水或玻璃进入空气),有可能发生全反射(此时只有反射光线),条件就是光线在光密介质中的入射角大于临界角,(如果不是很清楚,可看一下物理课本哦,,我这里基本上只是给出结论),临界的计算公式sinC=1/n(n为折射率),即C=arcsin(1/n),而光线在空气中与法线的夹角i和光线在介质中与法线的夹角r满足折射定律公式n=sin(i )/sin(r),所以有i=arcsin(n*sin(r),至于另外的一条反射光线就简单了,入射角等于反射角,根据能量守恒,入射光的总能量=折射光的能量+反射光的能量,这一点将用他们的透明度(alpha值)反映出来。
2、代码分析
完整的代码如下
fjm._y = 200;
fx._x = 250;
zs._x = 250;
zs._y = 200;
fs._x = 250;
fs._y = 200;
n = 1.5;
onEnterFrame = function () {
jg.onMouseDown = function() {
this.startDrag(true, 0, 200, 500, 500);
};
jg.onMouseUp = function() {
this.stopDrag();
};
this.createEmptyMovieClip(“mc”, 100);
mc.lineStyle(2, 0xff0000, 100);
mc.moveTo(250, 200);
x = jg._x;
y = jg._y;
mc.lineTo(x, y);
A = Math.atan2(y-200, x-250);
jg._rotation = A*180/Math.PI+180;
C = Math.asin(1/n);
ljj = Math.round(C*180*10/Math.PI)/10;
if (x<250) {
r = A-Math.PI/2;
if (r
i = Math.asin(n*Math.sin(r));
zs._rotation = -90+i*180/Math.PI;
zs._alpha = 100-i*60;
} else {
zs._alpha = 0;
}
} else if (x>250) {
r = Math.PI/2-A;
if (r
i = Math.asin(n*Math.sin(r));
zs._rotation = -90-i*180/Math.PI;
zs._alpha = 100-i*60;
} else {
zs._alpha = 0;
}
}
fs._rotation = 180-A*180/Math.PI;
rsj = Math.round(r*180*10/Math.PI)/10;
if (r
zsj = Math.round(i*180*10/Math.PI)/10;
} else {
zsj = “已全反射”;
}
fsj = Math.round(r*180*10/Math.PI)/10;
fs._alpha = i*60;
};
好了下面开始分析代码如何写的了,先看一个图
看得出,我是用分界面和法线把场景分成了4个区域,相当于数学里的第一到第四象限,在代码中先作了如下的初始化
fjm._y = 200;
fx._x = 250;
//以上可知交点相当于坐标原点为(250,200)
//折射光线、反射光线的x、y坐标分别在250,200(即坐标原点)
zs._x = 250;
zs._y = 200;
fs._x = 250;
fs._y = 200;
由以上的初始化可知,折射光线、反射光线的注册点必须在左边(看元件制作)同时由图可知,入射光线只能在3、4象限,意味着光源只能在3、4象限移动,所以光源(激光jg)元件只能在平面以下拖动,左右最好不要出场景,代码为
this.startDrag(true, 0, 200, 500, 500);
接下来就要解决入射角和折射角的关系,还是再看一个图
这个截图中入射光线是在第三象限,对应的折射光线在第一象限,而flash的旋转用其属性_rotation实现,这个属性表示的是指定影片剪辑相对于其原始方向的旋转程度,以度为单位,
从 0 到 180 的值表示顺时针方向旋转;从 0 到 -180 的值表示逆时针方向旋转。所以首先要获得入射光线的旋转角A,可我们上面的元件中没有入射光线呀,怎么来的,实际上是用以下代码画的
this.createEmptyMovieClip(“mc”, 100);
mc.lineStyle(2, 0xff0000, 100);
mc.moveTo(250, 200);
x = jg._x;
y = jg._y;
mc.lineTo(x, y);
那么,A就可以用反三角函数获得代码为
A = Math.atan2(y-200, x-250);
从图中可知,其真正的入射角为r = A-Math.PI/2;其折射角i = Math.asin(1.5*Math.sin(r)) 从图中可知折射光线旋转的角度应该为-90+i*180/Math.PI,相应代码为
if (x<250) {
r = A-Math.PI/2;
if (r
i = Math.asin(n*Math.sin(r));
zs._rotation = -90+i*180/Math.PI;
zs._alpha = 100-i*60;
} else {
zs._alpha = 0;
}
大家可能会问,zs._alpha = 100-i*60;这一句的算法是如何的,根据物理规律,当折射角越大,其能量越小,当折射为90度时发生全反射,对应的折射光线能量为零,在动画中反映为其_alpha值越来越小,按实际计算为zs._alpha = 100-i*63.7的,但考虑实际效果,算了,就这样吧。反之反射光线能量越来越大,当发生全反射时,能量最大,等于入射光的强度,用代码fs._alpha = i*60实现,怎么样,清楚吗?
剩下的是当入射光线在第四象限时的了,也看一下类似的图
对应代码如下
} else if (x>250) {
r = Math.PI/2-A;
if (r
i = Math.asin(n*Math.sin(r));
zs._rotation = -90-i*180/Math.PI;
zs._alpha = 100-i*60;
} else {
zs._alpha = 0;
}
}
最后解决最简单的反射光线的旋转问题,其实由倒数第三个图很容易得其代码为
fs._rotation = 180-A*180/Math.PI;
篇8:由浅入深学习Flash制作赛车游戏教程
教程
赛车游戏我们总是遇到!今天给大家简单讲解一下,
先测试效果:
点击这里下载源文件
首先新建立一个赛车影片剪辑,由6个图层组成一个基本的赛车。放到舞台上的时候命名实例名为car1。
然后根据上面的车,制作一个赛车阴影影片剪辑。拖放到舞台上的时候命名实例名为shadow1。
然后建立一个新的空的影片剪辑。拖放到舞台上的时候命名实例名stepper。
然后选中该空影片剪辑输入下面代码:
onClipEvent(load){
speed1 = 0;
}
onClipEvent(enterFrame){
_root.step(1);
}
然后新建立一个层Action,输入下面代码:
function step(who) {
//check to see if the car in question is controlled by the player or by the computer
if (_root[“car”+who].code == “player”) {
//we will constantly decrease speed by multiplying it with a number below 1
if (this[“speed”+who]>0.3) {
this[“speed”+who] *= _root.speedDecay;
} else {
this[“speed”+who] = 0;
}
//the car will react to certain keys
//accelerate
if (Key.isDown(Key.UP) && this[“speed”+who]<_root.maxSpeed) {
this[“speed”+who] += _root.acceleration;
}
//brake (reverse)
if (Key.isDown(Key.DOWN)) {
this[“speed”+who] -= _root.backSpeed;
}
//steer left
if (Key.isDown(Key.LEFT) && this[“speed”+who]>0.3) {
_root[“car”+who]._rotation -= _root.rotationStep*(this[“speed”+who]/_root.maxSpeed);
}
//steer right
if (Key.isDown(Key.RIGHT) && this[“speed”+who]>0.3) {
_root[“car”+who]._rotation += _root.rotationStep*(this[“speed”+who]/_root.maxSpeed);
}
this[“rotation”+who] = _root[“car”+who]._rotation;
//we calculate the two components of speed (X axis and Y axis)
this[“speedx”+who] = Math.sin(this[“rotation”+who]*(Math.PI/180))*this[“speed”+who];
this[“speedy”+who] = Math.cos(this[“rotation”+who]*(Math.PI/180))*this[“speed”+who]*-1;
//apply the components on the actual position of the car
_root[“car”+who]._x += this[“speedx”+who];
_root[“car”+who]._y += this[“speedy”+who];
//position the shadow of the car
_root[“shadow”+who]._x = _root[“car”+who]._x-4;
_root[“shadow”+who]._y = _root[“car”+who]._y+2;
_root[“shadow”+who]._rotation = _root[“car”+who]._rotation;
}
if (_root[“car”+who].code == “computer”) {
}
}
然后再建立一个层,输入下面代码(用于初始化变量)
car1.code = “player”;
acceleration = 0.4;
speedDecay = 0.96;
rotationStep = 10;
maxSpeed = 10;
backSpeed = 1;
测试了!今天快下班了!!明天接着给大家把这个游戏弄的更加完整!后面还有两个步骤,大家通过测试上面的动画会发现车没有场地限制!之后我们将给它限定一定的路线,期望!篇9:FLASH + XML 求职简历 制作教程(一)
xml|教程
前几天一个朋友介绍了一家公司,结果发现自己少了三样东西:简历、技术性强的作品、自信。于是想做个“技术性强的简历”。这样也能有些底气,多些自信。在别人问我懂不懂OOP的时候,就不用说“学是学过,没做过”了。
先把学习过的AS2.0面向对象编程重新过一遍消化吸收,然后用两天时间做了这个简历。照例提供源文件下载。第一次“OOP”,写到最后代码有点乱了。
这两天写代码写到头痛。借一本书上的话:“编程对很多人来说是一件很枯燥、很难的事情,当把它当成一种强烈的兴趣时,编程便是一件非常有趣的事情。”当调试半天的bug终于解决当复杂功能终于实现的时候,那种喜悦绝对是一种享受。
这喜悦对我来说太过奢侈。我憎恶现在的教育制度,让我把时间全浪费在毫无兴趣更无用处的东西上,憎恶如此看重文凭的病态的社会让我不得不对自己的憎恶俯首称臣!
浏览效果
点击这里下载源文件做这个简历的时候,一个下载了愚人部落主页源代码的朋友问我关于XML的问题。我说你等等,做好手头的东西我写个教程给你。现在就以这个简历的XML为例,说一下如何解析XML。(→ 查看XML)
XML文件就像一个树状的目录。可以把第一行当作它扎根的“土地”。
XML文件是由节点构成的。它的第一个节点为“根节点”。一个XML文件必须有且只能有一个根节点,其他节点都必须是它的子节点。我们在FLASH里使用XML对象解析XML的时候,this 代表整个XML文件,它的根节点就是 this.firstChild 。 this.firstChild.childNodes 则返回由根节点的所有子节点组成的节点数组。
每个子节点又可以有自己的子节点。节点编号由0开始,根节点的第一个子节点为 this.firstChild.childNodes[0],它的子节点数组就是this.firstChild.childNodes[0].childNodes 。
继续深入到没有子节点的单一节点,比如根节点第一个子节点的第二个子节点 this.firstChild.childNodes[0].childNodes[1],它返回的是一个XML对象(Object) 。这里需要特别注意,节点标签之间的数据本身也视为一个节点 this.firstChild.childNodes[0].childNodes[1].firstChild ,而不是一个值。
我们解析XML的最终目的当然就是获得数据的值:this.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue 。注意!不是 this.firstChild.childNodes[0].childNodes[1].nodeValue !节点名称有时也是我们需要的数据: this.firstChild.childNodes[0].childNodes[1].nodeName 。注意比较获得节点名称和节点值的不同。
除了作为子节点,数据还可以作为节点属性。节点属性写在节点标签内部:<节点 属性1=“属性值” 属性2=“属性值”>节点值 。如果数据全作为属性而没有节点值,则可以写成 <节点 属性=“属性值”> 的形式,而不用写成 <节点 属性=“属性值”> 。 注意节点必须关闭,写成 <节点 属性=“属性值”> 就不对了。
节点的所有属性返回一个通用对象(Object),比如根节点第六个子节点的第三个子节点的所有属性为: this.firstChild.childNodes[5].childNodes[2].attributes 。 获得其中的“地址”属性: this.firstChild.childNodes[5].childNodes[2].attributes.地址 ,
比较而言,数据作为属性的方式更好。因为文件相对比较小,而且避免深入更多层子节点,解析速度更快。
下面以简历的 JobXMLModel类 (模型)看看在flash里具体的解析。 JobXMLModel类 继承XML类,首先在构造函数里设置 ignoreWhite 属性为true忽略XML文件中多余的空格。
//构造函数
public function JobXMLModel {
ignoreWhite = true;
}
//覆盖XML类的 onLoad 事件
private function onLoad():Void {
//变量tmpA存储根节点的节点数组。
var tmpA:Array = this.firstChild.childNodes;
//把tmpA的长度存储在tmpL变量里。
var tmpL:Number = tmpA.length;
//以根节点第一、第六个子节点为例,同样存储数组长度变量
var basicInfoL:Number = tmpA[0].childNodes.length;
var myWorksL:Number = tmpA[5].childNodes.length;
//根节点子节点的节点名称存入数组
for (var i:Number = 0; i
项目列表.push(tmpA[i].nodeName);
}
//第一个子节点数据作为子节点
for (var i:Number = 0; i
//单一节点返回一个XML对象,用一个变量tmpO存储它
var tmpO:Object = tmpA[0].childNodes[i];
//把每个节点的名称和节点值作为通用对象(Object)的属性存在数组里
基本资料.push({title:tmpO.nodeName, content:tmpO.firstChild.nodeValue});
}
//第六个子节点数据作为节点属性
for (var i:Number = 0; i
var tmpO:Object = tmpA[5].childNodes[i];
//把节点名称和节点属性作为通用对象的属性存在数组里
我的作品.push({url:tmpO.attributes.地址, name:tmpO.nodeName, desc:tmpO.attributes.描述});
}
//把onLoad事件广播出去,由JobPresenter类(表示器)接收数据加载视图类(JobView )
broadcastMessage(“onXMLLoaded”);
}
//隐式获取函数,供表示器接受数据
public function get basicInfo():Array {
return 基本资料;
}
篇10:Flash AS教程:制作物理课件电流效果
在学习中遇到问题可以到 论坛 发贴交流!
先来看效果:
步骤:
1、运行flash mx,设置文档属性为黑色背景,尺寸200*200像素,
2、新建一个影片剪辑命名为“方框”。利用举行工具,绘制一个1.6*1像素的无边框矩形,进行渐变填充。如图1所示。
图1:绘制方框元件
3、导入一电流通过的模拟声音,并把此声音文件放置在影片剪辑“声音”中。
4、回到主场景,把影片剪辑“方框”拖放到场景中。在下面的属性面板中,给影片剪辑“方框”命名为“d”。并延长至第3帧。如图2所示。
图2:影片剪辑得分身名
[next]
5、先建一个图层,命名为as,
在第1帧添加as:
setProperty(“d”, _visible, “0”);//摄制影片剪辑“d”在第1帧不可见第2帧添加as:
y=100; //初始化变量
for(i=1;i<=250;i++) {
y =y+ random(3)-1;
duplicateMovieClip(“d”, “d” add i, i);
setProperty(“d” add i, _x, i);
setProperty(“d” add i, _y, y);
}
第3帧添加as:
gotoAndPlay(2); //做一个小循环
6,新建一个图层命名为“声音”,把刚才制作的影片剪辑“声音”拖放到场景中,并延长至第3帧。
7,测试,保存。请参看源文件
对本文感兴趣的朋友可以到这里提交作业,老师会为作业点评、加分:bbs.jcwcn.com/viewthread.php?tid=216610






