入门级技巧:FLASH 编程心得

编程|技巧|心得

  其实我本人水平也不怎么样,今天之所以搞出个编程心得(主要是自己的一点点经验总结)的介绍,主要是想帮助有兴趣往深处研究AS的朋友,由于个人的水平有限,其中难免有谬误,欢迎大家讨论纠正。一来,帮助我进步;二者也是更重要的是,防止初学者养成不好的编程习惯! 废话说多了,下面开始:

  一.FLASH有三个地方可以加代码,关键帧,MC(影片剪辑),按钮。

  1.关键帧上加代码的灵活性很大,建议初学者:能写在MC或者按钮上的代码,就尽量不要写在关键帧上,关键帧上添加代码后,会出现一个a,如图一:

2.按钮上加代码的一般格式为:
on(mouseEvent){
statements;
} mouseEvent:触发事件关键字,表示要扑获得事件。
statements:任意行数的可以执行程序代码。 鼠标可扑获的事件如下:
press:当按钮被按下时触发该事件
release:当按钮被释放时触发该事件
releaseOutside:当按钮被按住后鼠标移动到按钮以外并释放时触发该事件
rollOut:当鼠标滑出按钮范围时触发该事件
rollOver:当鼠标滑入按钮范围时触发该事件
dragOut:当按钮被鼠标按下并拖拽出按钮范围时触发该事件
dragOver:当按钮被鼠标按下并拖拽入按钮范围时触发该事件
keyPress("key"):当参数(key)指定的键盘按键被按下时触发该事件 举个例子:
on(press){
_root.text="学习FLASH!"
}//当按下按钮时,主场景中的文本框显示文字:学习FLASH!
3.MC上加代码的一般格式:
onClipEvent(movieEvent){
statements;
}
movieEvent:触发事件关键字,表示要扑获得事件。
statements:任意行数的可以执行程序代码,表示隶属于该事件的程序代码块。
可扑获的事件如下:
load:当前 MovieClip 被装入并准备显示之前触发该事件
unload:当前 MovieClip 被卸载准备消失之前触发该事件
enterFrame:当前 MovieClip 每次计算帧上的内容时触发该事件
mouseMove:当鼠标移动时触发该事件
mouseDown:当鼠标左键按下时触发该事件
mouseUp:当鼠标左键抬起时触发该事件
keyDown:当键盘按键被按下时触发该事件
keyUp:当键盘按键被抬起时触发该事件
data:当前 MovieClip 接收到新数据时触发该事件 关于这个问题,可参看我的这个教程(其中都有详细的例子):

  onClipEvent()  是影片剪辑事件管理动作。按照FLASH的编程规范,影片剪辑动作必须靠影片剪辑事件来触发,具体的触发条件条件可以在其参数区添加。其参数栏中的选项包括:Load   Unload   EnterFrame  Mousemove    Mousedown  Mouseup   Keydown   Keyup  Data (共9项)。下面依次介绍:

1.Load------影片剪辑元件在时间轴中出现时触发事件(不管影片剪辑是否完全载入,都触发),而且只触发一次!

2.Unload-------影片剪辑元件在时间轴中卸载时触发事件;

3.EnterFrame--------在播放影片剪辑元件中内容时,每播放一帧执行一次触发;

4.mouseMove--------每当鼠标移动时触发.鼠标位置的改变就会触发该事件.可以用_xmouse  _ymouse属性确定当前鼠标的坐标;

5.mouseDown--------单击鼠标左键时触发;

6.mouseUp--------释放鼠标左键时触发;

7.keyDown--------按下键盘上某一键时触发;

8.keyUp--------释放键盘上某一键时触发;

9.Data------当接收到loadVariables或者loadMovie动作载入新的数据时触发;

具体应用举例参看下面的SWF:

  这里再举一个简单的例子:

onClipEvent(load){
a=100;
b=0;
}//当MC被加载时给a b两个变量赋初值;
  二.语法相关:

  1.首当其冲的还是点语法,他是在编程时用来指明与某个对象的相关的属性和方法,还可用于标识对象的路径。

  比如,要获取主场景中的Myball这个影片剪辑的x坐标值语法为_root.Myball._x。这其中还有一个必须引起注意,初学者常常以为这里的Myball是指给库里的对象命名,如图二:

  其实这是不对的,在程序中出现的名字,我们习惯上称为实例名,其正确的命名方法是在场景中选定需要命名的对象,然后在其属性面板对其命名,如图三:

  当然还有在加载外部的图片,SWF或者直接调用库里的声音,MC,那还可以通过程序本身直接给对象添加实例名,这些技巧以后遇到的时候再给予解释! 点语法的对象名称中有两个特殊的名称:_root和_parent; 其中_root表示主场景,而_parent可以实现读取和设置包容当前物件的父物件的任何属性。我自己不知道是怎么养成的习惯,很少使用_parent,我比较喜欢采用一律从主场景来定位对象的方法。可能有时候这样定位并不如两种定位方法结合来的方便,但是我觉得这样做的最突出的优点是便于差错,因为你的路径一律是从上到下的(从主场景到某个内层的MC或按钮)哪一个层级出了问题很容易看出来,不用在MC和场景间来回切换,查谁是谁的父,谁是谁的子!另外我还有一个习惯,就是即使对象是在主场景中,我也喜欢在控制他的时候加上一个_root 。比如说主场景中的Myball这个MC是个运动的球,要用按钮控制让他停止,下面的语句可以实现:

on(release){
Myball.stop();
}

但是我一般写成:

on(release){
_root.Myball.stop();
}

  当然,这只是我的个人习惯,也许大家看了觉得我在自找麻烦。但是,我之所以讲出来,是因为我觉得这是一个习惯,就是保有一种路径的观念在心里。这个应该蛮重要的。

  2.关于斜杠语法:

  据我所知,斜杠语法是在FLASH 4.0中广泛使用的,也用于指示对象的路径,被用于代替点的作用,当他要指出一个变量是需要在变量前面加上冒号,以表示对变量的引用。由于软件都有一种向下兼容性,所以在MX中仍然可以使用(我没怎么用过2004,估计2004也支持的),但是一般说不推荐使用,一方面,既然被取代了,肯定是因为有缺点,有好的方法了干吗还要抱者旧的不放(你要是怕被人说喜新厌旧,那你就继续用!我是不怕的,挖哈哈......)另一方面,为了和其他人保持一致,大家都用点语法,你一个人用斜杠,总觉得不大好!

  3.分号: 编程时,我有在每句话结尾加分号的习惯,其实这个分号是可以省略的,那我为什么要加呢,嘿嘿........那是因为我一开始学习用FLASH编程时,没人告诉我可以不加,我就一直辛辛苦苦的加啊!!!现在改不过来了!挖哈哈..............

  4.大小写 FLASH编程时,只有关键字区分大写和小写,何谓关键字,基本上就是你写对了,会变成兰色的那部分程序代码,也就是为本语言专用的一些单词!!比如:setProperty clearInterval getRGB 这些! 5.注释; 添加注释一般是为了方便别人阅读你的程序,添加注释符号//后,其后的内容为灰色;其实他还有一个最大的优点就是,方便你调试程序,比如,编译时发现程序有错,可是程序很长,你不能完全准确的确定错误发生的位置,那么你可以使用// 逐段的屏蔽掉程序段,进而帮助确定错误的位置。

  三.关于查错:

  往往从有思路到编程实现效果不可能一次完成,也就是说,难免会出现错误,不能通过编译系统(不知道FLASH里怎么称呼,说成编译系统对不对咧,还请各位指教)。那这时候就需要我们查错。 1.充分利用输出窗口给出的提示: 例如:在按钮上加如下代码:

duplicateMovieClip("MC","MC"+j,10+j);
c=random(40);
setProperty("MC"+j,_y,(c+30));
setProperty"MC"+j,_x,random(600));
setProperty("MC"+j,_alpha,(2*c+20));
j++;
if(j>700){
j=1;
}

  ctrl+enter测试影片,输出窗口提示:

  场景=场景 1, 图层=AS, 帧=2: 第 4 行: Unknown error ID #1033 setProperty"MC"+j,_x,random(600)); 就是说第四行有错误,回到编辑状态,一看,原来少了半边括号,就是说输出窗口会给我们提供很多必要的帮助,一定要好好利用!让AS编辑区显示行号的方法,如图四:

  点一下红色圈中的按钮,选中显示行号即可!其他按钮还可以实现很多辅助功能,自己去看一看就知道了!

  2.上述方法只能排除语法上的错误,也就是说,你程序本身算法或者程序中参数的传递,出现了问题,编译系统是不可能帮你检查出来的,这个只能靠你自己去检查。我这里介绍一点自己的方法,供大家参考:首先,你得自己心里想明白按照自己的这个算法思想能不能实现想要的结果,就是说先在心里把整个算法重新再理一遍,有时候想的不成熟,或者一开始的思路有疏漏,这时候应该可以更正或者修改过来!当你确定自己的程序设计思路没有问题但是依然出不了效果时,你就该考虑是程序实现时出了错误,比如参数传递有问题,路径指示不明确甚至错误等等都是比较常见的(至少我就常常犯这样的错误); 举个例子: 在主场景中有一个输入文本,其实例名为text 变量名为xx,
然后主场景的帧上加:

_root.text.onChanged = function() {
n=Number(xx);
}

  当文本框内容改变时就把文本框的值赋给n这个变量; 然后在主场景中一个风车状的MC上加:

onClipEvent(enterFrame){
this._rotation=this._rotation+n;
}
  意思是让风车旋转,速度为n; 但是测试影片,就是没有效果,为什么呢,想想看,先把风车上的代码改为:

onClipEvent(enterFrame){
this._rotation=this._rotation+3;
}
  指定一个数值作为旋转的速度,测试发现,旋转正常; 这就提醒我们,是不是参数传递出了问题呢,哦!!!对,因为在帧上加的代码,所产生的变量n实际是主场景中的变量,把他传递到MC中时,应该确定起准确的位置。再次修改源代码,MC上的代码改为:

onClipEvent(enterFrame){
this._rotation=this._rotation+_root.n;
}

  再次测试,一切正常,旋转速度随着输入数字的变化而变化 效果:

点击这里下载源文件

  3.学会使用trace语句,检测错误! 上面的例子中变量比较少,所以很容易发现问题,如果一个程序中有多个变量,而且比较复杂,那就需要分别对他们进行跟踪查看,方法就是利用trace语句,在某个变量每次发生变化后都用trace将其输出,以便查看其运算结果是否和预期的一致! 同样举个例子:随机抽签效果! 十个MC,透明度均为30; 主场景中的关键帧上加:

a =new Array(0,1,2,3,4,5,6,7,8,9);//定义数组;
mm=0;//点击次数统计;
nn=10;//数组元素个数; 选择按钮上加: on(press){
i = random(nn);
j = a[i];
a1=a.slice(0,i);
trace(a1);//输出抽取的部分数所组成的新的数组a1;
a2=a.slice(i+1,nn);
trace(a2);//输出抽取的另外一部分数所组成的新的数组a2;
a=a1.concat(a2);
trace(a);//输出组合后的数组,也就是新的数组a;
setProperty("mc"+j,_alpha,getProperty("mc"+j,_alpha)+30);
mm++;
nn--;
if(mm==10){
text="抽签结束!"
mm="10";
_root.but._visible=false;

}
}

  采用以上方法后,每点击一次按钮,窗口都输出三排数字,最后一排中比上一次输出少掉的那个数字就是被抽取的数字;这样一来,每运行一次代码,程序人员都可以方便的查看各个变量的运算情况! 效果:(注意,trace语句其实可以说是专门用于查错的,因为在swf文件中他无效,所以在以下效果中不能显示trace窗口,大家可以下载下面的源文件在本机测试):

 点击这里下载源文件

时间: 2024-10-11 14:15:48

入门级技巧:FLASH 编程心得的相关文章

Flash编程入门:物体的自由运动解析

编程 很多学习Flash的朋友都想掌握Flash编程,来加强自己的Flash设计能力.只是大多的朋友觉得Flash很难,很难学会.今天,笔者就借助一个简单的Flash编程实例来给大家讲解如何学好Flash编程. 首先大家不要紧张,这个例子设计很简单,程序也不是很难.在程序中,笔者已经加了注释.在文章最后,笔者将给大家讲解一些代码使用方法.好了,下面我们就来制作吧. 效果预览: 源文件下载:点击这里下载(3K, zip压缩文件) 1.按快捷键Ctrl+F8打开"创建新元件"面板,制作一个

Adobe将发布免费网络版Photoshop 用Flash编程

目前在线软件越来越多,Adobe首席执行官布鲁斯(Bruce Chizen)日前表示Adobe将在未来数个月后发布免费的网络版Photoshop应用软件.并有可能考虑采用消费者不用付费的商业模式.但同时,布鲁斯(Bruce Chizen)也表示,因为托管版Photoshop只能是一款低端产品,并且网络带宽会限制用户的体验,所以这款网络版Photoshop还只能是被少数的消费群体接受. Adobe公司为这款网络版Photoshop投入了大量人力和财力,传统版Photoshop是用C语言编写的程序,

c语言-一个入门级C语言编程问题

问题描述 一个入门级C语言编程问题 已知地球的平均半径为6371.393千米,假设在地球的某一纬度上,有两个处于不同经度的点A.B,用C语言编程求出这两点之间的直线距离.这两点在该纬度剖面上切圆的劣弧长度,以及这两点之间的球面距离.以下是我写的代码.#include ""stdio.h""#include ""math.h"" main(){double xyztsdlRr=6378.137pi=3.1415926;scanf

Android编程心得分享——JSON学习过程_Android

让我说说Android编程心得,在我们初步学习JSON时我们都知道JSON作为现在比较流行的数据交换格式,有着它的许多优点,Android的WEB应用中更是广泛用到了它,这里将我学习JSON的过程记录如下 在Android的Android.jar包中已经默认引入了这个包,这里我们就可以直接调用它了 JSON有五种基本类型,分别是object,array,value,string,number Object 以下面这个为例 {"person":{"id":100,&q

Android编程心得分享——JSON学习过程

让我说说Android编程心得,在我们初步学习JSON时我们都知道JSON作为现在比较流行的数据交换格式,有着它的许多优点,Android的WEB应用中更是广泛用到了它,这里将我学习JSON的过程记录如下 在Android的Android.jar包中已经默认引入了这个包,这里我们就可以直接调用它了 JSON有五种基本类型,分别是object,array,value,string,number Object 以下面这个为例 {"person":{"id":100,&q

Flash编程绘画的简单运用

编程 Flash MX又增强了其绘图功能,现在,可以使用AS影片对象中的绘画方法让Flash根据程序绘制图形,十分的方便.本文中笔者将通过几个实例来给大家讲解如何使用绘画方法来绘制图形及其相关的知识和技巧. 效果预览: 点击这里下载 为了使读者很好的理解下面的内容,我们先来做一个简单的例子--画一条直线.可能有的朋友会说,画一条直线谁不会啊.不是的,是让Flash自己画一条直线. 打开Flash,点选第1帧,按F9打开"动作面板",输入如下代码: // 设置线条样式_root.line

谈谈学习ASP动态网页制作技术的编程心得

学好一门编程语言有两个条件是必不可少的,一是理论与实践结合,在实际例程去验证书本上的理论能加深你对理论的理解:二是学会总结,把学习.运用中的心得体会记下来,当成一种经验或者教训加以提炼并在日后的应用中加以改进,一定能提高你对这门编程语言的认识.以下是笔者在学习与运用ASP编程中的两点经验,希望能对大家有所帮助. ASP页面内VBScript和JScript的交互 ASP具备管理不同语言脚本程序的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数.ASP开发环境提供了两种脚本引擎,即VB

编程心得:提升JSP应用程序的7大绝招

js|编程|程序|心得     你时常被客户抱怨JSP页面响应速度很慢吗?你想过当客户访问次数剧增时,你的WEB应用能承受日益增加的访问量吗?本文讲述了调整JSP和servlet的一些非常实用的方法,它可使你的servlet和JSP页面响应更快,扩展性更强.而且在用户数增加的情况下,系统负载会呈现出平滑上长的趋势.在本文中,我将通过一些实际例子和配置方法使得你的应用程序的性能有出人意料的提升.其中,某些调优技术是在你的编程工作中实现的.而另一些技术是与应用服务器的配置相关的.在本文中,我们将详细

总结:谈谈学习ASP动态网页制作技术的编程心得

编程|动态|网页|心得 学好一门编程语言有两个条件是必不可少的,一是理论与实践结合,在实际例程去验证书本上的理论能加深你对理论的理解:二是学会总结,把学习.运用中的心得体会记下来,当成一种经验或者教训加以提炼并在日后的应用中加以改进,一定能提高你对这门编程语言的认识.以下是笔者在学习与运用ASP编程中的两点经验,希望能对大家有所帮助. ASP页面内VBScript和JScript的交互 ASP具备管理不同语言脚本程序的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数.ASP开发环境提