您好,欢迎来到维库电子开发网!
|维库电子通
全球最大的芯片PDF资料下载基地
立即登录 免费注册 维库知道
  首页 > 电子通列表 > Flash程序

Flash程序

Flash程序的简介

回到顶部
    FLASH就是指在FLASH中用actiON script语言编写的一些程序,一般是用于实现一些复杂和高级的动能.

Flash开发的基础

回到顶部

    作为一个FLASH程序员,是用AS语言编写程序,程序开发基础并不是程序语言基础,语言的基础可以分作很多种,程序开发基础说的是用程序语言编写软件的过程就叫程序开发.一个程序项目在开发之前需要了解该产品有多少个功能块,这些功能哪些是独立的,哪些是需要与其他功能块互交的.独立功能块很简单,写好就能用,需要互交的功能块就复杂点了,在AS2.0里面可以把每个功能块装在一个MC(影片剪辑)里面,如果要访问另一个MC里面的属性,可以用路径直接找到,就象WINDOWS里面找文件一下方便,_root指向主场景,只要知道路径就万事OK,但是这样写程序很混乱,路径写错或忘记是常有的事,而且不方便修改,如果有个MC路径需要改变,指向这个MC的路径都要去改一下,MC太多就只有累死.在AS3.0里面取消了_root指向主场景,很多人就傻眼了,有经验的人就会用功能块类的属性来指向主场景,这样做和AS2.0的区别也不大,至于如何把主场景赋值给属性也是个新手问题,很多人都不知道,这里先不讨论.

    如何解决功能块互交的问题,创建功能块管理类,将功能块存放在此类中统一管理,存放方式可以用类属性和数组,使用数组存放应该规定每功能块所在数组单元格,例如:数组[功能块1.ID]=功能块1,这样可以不用考虑路径,对于合作开发也是很有好处的,而且可以演变出多种管理类,统称为管理类.

    现在开始程序开发一步,分出引擎和数据,引擎主要有逻辑和算法构成,也就是说引擎就是我们写出来的程序,数据就是项目的描述,例如:图片位置x=100、y=100,引擎根据描述做出相应的处理.很多人会说赋值了x和y的图片自己就会到坐标上,跟引擎有什么关系,AS代码其实是数据,是种描述,FLASH player是他的引擎,所以我们要写出自己引擎和数据,这里原理比较复杂,解释一下:自定义数据->AS代码->FLASH player->AS代码->FLASH player,原理性的东西就不祥解了,这样做的好处:大家都遇到过发布的时候等上很长的时间吧,客户频繁的让修改是不是很痛苦,把数据文件放到外部载入,修改一个数据而已,没什么大不了的.

    如何实现引擎和数据,例如:引擎实现表单提交,数据是lable=3,buttON=1,运行程序后出现3个文本框和1个按钮,引擎代码结构:

    var arr:Array;

    while (arr1.length > 0) {

    arr=arr1[0].split("=");

    for (var i:int=0; i < int(arr[1]); i++) {

    if (arr[0]="lable") {

    createlable();

    } else if (arr[0]="button") {

    createbutton();

    }

    }

    }

    function createlable() {

    //创建一个文本

    }

    function createbutton() {

    //创建一个按钮

    }

    数据是应该有一个对应的解析类,这里因为数据简单就直接写的,数据是可以更复杂的,格式也是自己定义的,其他人基本是看不懂,只要解析类够强,让数据象语言一样都可以,FLASH就是如此.

Flash程序中文分段的方法

回到顶部

    在FLASH中,也可以运用像WORD一样的对文本段落进行格式化的方法.比如,选取某段文本后,对该文本进行格式化.就是个性化的设置.

    在FLASH中,需要运用TextFormat类.

    用法如下:

    var my_format:TextFormat = new TextFormat();

    my_format.align = "left";

    txtField.setTextFormat(my_format);

    这是一个简单的对场景中动态文本txtField进行设置段落居左对齐的简单代码.场景中动态文本框的实例名称为txtField.

    下面看看部分得要的属性.

    align(TextFormat.align 属性)

    指示段落的对齐方式.您可以将此属性应用在静态文本和动态文本中.下面的列表显示此属性的可能值:

    "left"--段落为左对齐.

    "center"--段落居中.

    "right"--段落为右对齐.

    "justify"--段落为两端对齐.(FLASH Player 8 中添加了此值.)

    默认值为 null,它指示该属性未定义.

    blockIndent(TextFormat.blockIndent 属性)

    以磅为单位指示块缩进的数字.块缩进应用于整个文本块,即文本的所有行.而普通缩进 (TextFormat.indent) 只影响各段的第一行.如果此属性为 null,则 TextFormat 对象不指定块缩进.表示文本的缩进量.

    比如:

    var myformat:TextFormat = new TextFormat();

    myformat.blockIndent = 30;

    mytext.text = "欢迎光临淘沙网!";

    mytext.setTextFormat(myformat);

    bold(TextFormat.bold 属性)

    public bold : Boolean

    一个布尔值,指示文本是否为粗体字.默认值为 null,它指示该属性未定义.如果值为 true,则文本为粗体字.

    用法:

    var my_fmt:TextFormat = new TextFormat();

    my_fmt.bold = true;

    my_txt.setTextFormat(my_fmt);

    bullet(TextFormat.bullet 属性)

    public bullet : Boolean

    一个布尔值,指示文本为带项目符号的列表的一部分.在带项目符号的列表中,文本的各段都是缩进的.项目符号显示在各段第一行的左侧.默认值为 null.

    用法:

    var my_fmt:TextFormat = new TextFormat();

    my_fmt.bullet = true;

    my_txt.setTextFormat(my_fmt);

    color(TextFormat.color 属性)

    public color : Number

    指示文本的颜色.包含三个 8 位 RGB 颜色成分的数字;例如,0xFF0000 为红色,0x00FF00 为绿色.

    用法:

    var my_fmt:TextFormat = new TextFormat();

    my_fmt.color = 0xFF0000;

    my_txt.setTextFormat(my_fmt);

    fONt(TextFormat.font 属性)

    public font : String

    使用此文本格式的文本的字体名称,以字符串形式表示.默认值为 null,它指示该属性未定义.

    用法:

    var my_fmt:TextFormat = new TextFormat();

    myformat.font = "Courier";

    my_txt.setTextFormat(my_fmt);

    getTextExtent(TextFormat.getTextExtent 方法)

    返回格式由 my_fmt 指定的文本字符串 text 的文本度量信息.文本字符串被视为纯文本(而不是 HTML).

    此方法返回一个具有以下六个属性的对象:ascent、descent、width、height、textFieldHeight 和 textFieldWidth.所有度量值均以像素为单位.

    如果指定了 width 参数,则指定的文本将自动换行.这样,您就可以确定文本框在显示所有指定的文本时,它的高度是多少.

    ascent 和 descent 度量值分别提供一行文本的基线上面和下面的距离.第一行文本的基线位于该文本字段的原点加上其 ascent 度量值的位置.

    width 和 height 度量值提供文本字符串的宽度和高度.textFieldHeight 和 textFieldWidth 度量值提供文本字段对象显示整个文本字符串所需要具有的高度和宽度.文本字段的周围具有 2 个像素宽的装订线,所以 textFieldHeight 的值等于 height 的值加 4;同理,textFieldWidth 的值始终等于 width 的值加 4.

    如果您基于文本度量创建文本字段,请使用 textFieldHeight 而非 height,并使用 textFieldWidth 而非 width.

    示例

    此示例创建一个单行文本字段,其大小足够使用指定格式显示一个文本字符串.

    var my_str:String = "Small string";

    var my_fmt:TextFormat = new TextFormat();

    with (my_fmt) {

    font = "Arial";

    bold = true;

    }

    var metrics:Object = my_fmt.getTextExtent(my_str);

    this.createTextField("my_txt", this.getNextHighestDepth(), 100, 100, metrics.textFieldWidth,

    metrics.textFieldHeight);

    my_txt.border = true;

    my_txt.wordWrap = true;

    my_txt.text = my_str;

    my_txt.setTextFormat(my_fmt);

    italic(TextFormat.italic 属性)

    public italic : Boolean

    一个布尔值,指示使用此文本格式的文本是否为斜体.默认值为 null,它指示该属性未定义.

    用法:

    var my_fmt:TextFormat = new TextFormat();

    my_fmt.italic = true;

    my_txt.setTextFormat(my_fmt);

    leftMargin(TextFormat.leftMargin 属性)

    public leftMargin : Number

    段落的左边距,以磅为单位.默认值为 null,它指示该属性未定义.

    用法:下面的示例创建一个文本字段并将左边距设置为 40 磅.

    var my_fmt:TextFormat = new TextFormat();

    my_fmt.leftMargin = 20;

    my_txt.setTextFormat(my_fmt);

    url(TextFormat.url 属性)

    public url : String

    指示使用此文本格式的文本链接所至的 URL.如果 url 属性为空字符串,则文本没有超链接.默认值为 null,它指示该属性未定义.

    示例

    此示例创建一个文本字段,该文本字段是指向淘沙网网站的超链接.

    var myformat:TextFormat = new TextFormat();

    myformat.url = "http://www.taoshaw.com";

    this.createTextField("mytext",1,200,100,200,100);

    mytext.multiline = true;

    mytext.wordWrap = true;

    mytext.border = true;

    mytext.html = true;

    mytext.text = "Go to Taoshaw.com";

    mytext.setTextFormat(myformat);

    underline(TextFormat.underline 属性)

    public underline : Boolean

    一个布尔值,指示使用此文本格式的文本有下划线 (true) 还是没有下划线 (false).此下划线类似于用 <U> 标签生成的下划线,但后者不是真正的下划线,因为它不能正确地跳过下行字符.默认值为 null,它指示该属性未定义.

    示例

    下面的示例创建一个文本字段并将文本样式设置为带下划线.

    this.createTextField("mytext",1,100,100,200,100);

    mytext.multiline = true;

    mytext.wordWrap = true;

    mytext.border = true;

    var myformat:TextFormat = new TextFormat();

    myformat.underline = true;

    mytext.text = "欢迎光临淘沙网";

    mytext.setTextFormat(myformat);

    size(TextFormat.size 属性)

    public size : Number

    使用此文本格式的文本的磅值.默认值为 null,它指示该属性未定义.

    示例

    下面的示例创建一个文本字段并将文本大小设置为 25 磅.

    this.createTextField("mytext",1,100,100,100,100);

    mytext.multiline = true;

    mytext.wordWrap = true;

    mytext.border = true;

    var myformat:TextFormat = new TextFormat();

    myformat.size = 25;

    mytext.text = "欢迎光临淘沙网";

    mytext.setTextFormat(myformat);

    文章来自: 闪客居(www.FLASHas.net) 详文参考:http://www.FLASHas.net/asbc/20080622/3351.html

Flash程序中术语定义

回到顶部

    + Basic ActiONs 能加入到程序中的基本Action

    - Go to 跳转到指定的帧

    - Play 播放

    - STop 停止

    - Toggle High Quality 在高画质和低画质间切换

    - Stop All Sounds 停止所有声音的播放

    - Get URL 使浏览器浏览指定页面

    - FSCommand 发送FSCommand命令

    - Load Movie 引入影片

    - Unload Movie 卸载影片

    - Tell Target 指定Action命令生效的目标

    - If Frame Is Loaded 帧是否被载入

    - On Mouse Event 鼠标事件

    + Actions 所有的Action

    - break 跳出循环

    - call 调用指定帧

    - comment 注释

    - continue 继续循环

    - delete 删除一个物件(Object)中的变量

    - do while do while循环

    - duplicateMovieClip 复制MC

    - else 否则(与if联用)

    - else if 否则如果(与if联用)

    - evaluate 调用自己写的函数(Function)

    - for for循环

    - for  in 列举物件(Object)中的子体(Child)

    - FSCommand 发送FSCommand命令

    - function 声明自定义函数

    - getURL 使浏览器浏览指定页面

    - goto 跳转到指定的帧

    - if 如果

    - ifFrameLoaded 帧是否被载入

    - include 读入外部的ActionScript程序文件(.as)

    - loadMovie 引入MC

    - loadVariables 引入外部文件中的变量值

    - on 鼠标事件的触发条件

    - onClipEvent MC的事件触发程序

    - play 播放

    - print 输出到打印机

    - removeMovieClip 删除MC

    - return 在函数(function)中返回一个值

    - set variable 设定变量值

    - setProperty 设定属性

    - startDrag 开始拖动

    - stop 停止

    - stopAllSounds 停止所有声音的播放

    - stopDrag 停止拖动

    - swapDepths 交换两个MC的深度

    - tellTarget 指定Action命令生效的目标

    - toggleHighQuality 在高画质和低画质间切换

    - trace 跟踪调试

    - unloadMovie 卸载MC

    - var 声明局部变量

    - while 当成立时

    - with 对物件(Object)做

    + Operators

    - ! 逻辑非操作

    - != 不等于

    - "" 字符串

    - % 取余数

    - && 逻辑与操作

    - () 括号

    - * 乘号

    - + 加号

    - + + 变量自加一

    - - 减号

    - -- 变量自减一

    - / 除号

    - < 小于

    - <= 小于等于

    - <> 不等于

    - == 相等

    - > 大于

    - >= 大于等于

    - and 逻辑与

    - not 逻辑非

    - or 逻辑或

    - typeof 返回变量类型

    - void 实体,无返回

    - | | 逻辑或操作

    + Bitwise Operators 位操作符

    - & 位与操作

    - << 位左移

    - >> 位右移

    - >>> 位右移(无符号)

    - ^ 位异或操作

    - | 位或操作

    - ~ 补位操作

    + Compound Assign Operators 复合操作符

    - %= A%=B 等效于 A=A%B

    - &= A&=B 等效于 A=A&B

    - *= A*=B 等效于 A=A*B

    - += A+=B 等效于 A=A+B

    - -= A-=B 等效于 A=A-B

    - /= A/=B 等效于 A=A/B

    - <<= A<<=B 等效于 A=A<<B

    - >>= A>>=B 等效于 A=A>>B

    - >>>= A>>>=B 等效于 A=A>>>B

    - ^= A^=B 等效于 A=A^Bvv

    - |= A|=B 等效于 A=A|B

    + String Operators 字符串操作符

    - add 连接两个字符串

    - eq A eq B 字符串A值与字符串值B相等

    - ge A ge B 字符串A值大于等于字符串B值

    - gt A gt B 字符串A值大于字符串B值

    - le A le B 字符串A值小于等于字符串B值

    - lt A lt B 字符串A值小于字符串B值

    - ne A ne B 字符串A值不等于字符串B值

    + Functions 函数

    - Boolean 取表达式的布尔值(True 或 False)

    - escape 除去URL串中的非法字符

    - eval 返回由表达式命名的变量得值

    - false 布尔非值(0)

    - getProperty 获取属性

    - getTimer 获取从电影开始播放到现在的总播放时间(毫秒数)

    - getVersion 获取浏览器的FLASHPlayer的版本号

    - globalToLocal 场景(Scene)中的坐标转换成MC中的坐标

    - hitTest 测试一个点或者MC是否同另一个交叉

    - int 把数值强制转换成整数

    - isFinite 测试数值是否为有限数

    - isNaN 测试是否为非数值

    - keycode 返回键盘按下键的键盘值

    - localToGlobal MC中的坐标转换成场景(Scene)中的坐标

    - maxscroll 文本框的最大长度

    - newline 换行符

    - Number 将参数转换成数值

    - parseFloat 将字符串转换成浮点数

    - parseInt 将字符串转换成小数

    - random 产生0到指定数间的随机数

    - scroll 文本框中的当前行

    - String 将参数转换成字符串

    - targetPath 返回指定实体MC的路径字符串

    - true 布尔是值(1)

    - unescape 保留字符串中的%XX格式的十六进制字符

    + String Functions 字符串函数

    - chr 将ASCII码转换成相应字符

    - length 返回字符串的长度

    - mbchr 将ASCII/S-JIS编码转换成相应的多字节字符

    - mblength 返回多字节字符串的长度

    - mbord 将多字节字符转换成相应的ASCII/S-JIS编码

    - mbsubstring 截取多字节字符串中的字串

    - ord 将字符转换成ASCII码

    - substring 截取字符串中的子串

    + Properties 属性 - _alpha Alpha值(透明度值)

    - _currentframe 在MC中的当前帧数

    - _droptarget 正在拖动的MC是否播完

    - _focusrect 焦点矩形框的显示与否(True显示/Flase不显示)

    - _framesloaded 载入的影帧数

    - _height MC的高度

    - _highquality 画质的高低(True高画质/False低画质)

    - _name MC的实体名

    - _quality 当前画质(字符串值) LOW,MEDIUM,HIGH,BEST

    - _rotation MC旋转的角度(单位:度)

    - _soundbuftime 声音的缓冲区大小(默认值5,单位:秒)

    - _target MC的路径

    - _totalframes 总帧数

    - _url 电影被调用的URL地址

    - _visible 是否可视(True可视/False不可视)

    - _width MC的宽度

    - _x MC的x坐标

    - _xmouse 鼠标的x坐标

    - _xscale MC的X轴向缩放度

    - _y MC的y坐标

    - _ymouse 鼠标的y坐标

    - _yscale MC的y轴向缩放度

    + Objects 物件

    + Array 数组

    - concat 合并多个数组

    - join 合并数组元素位字符串

    - length 返回数组长度

    - new Array 新建数组物件

    - pop 出栈 (FILO 先入后出)

    - push 入栈 (入队列)

    - reverse 反相(颠倒数组,及第一个元素和最后一个元素互换……)

    - shift 出队列 (FIFO 先入先出)

    - slice 截取数组中的子串生成新的数组

    - sort 数组元素的排序

    - splice 从数组中指定元素起删除指定个数的元素或者删除指定元素

    - unshift 从数组头部插入一个元素

    + Boolean 布尔数

    - new Boolean 新建布尔型物件

    - toString 将布尔型物件的值转换成字符串值

    - valueOf 获取布尔型物件的值(返回值为布尔型)

    + Color 颜色

    - getRGB 获取颜色值的RGB分量(返回值0xRRGGBB十六进制)

    - getTransform 获取颜色值的转换量(返回值 cxform 型)[不太清楚]

    - new Color 新建一颜色物件

    - setRGB 设置颜色值的RGB分量(参数为0xRRGGBB十六进制)

    - setTransform 设置颜色值的转换量(参数为 cxform 型)[不太清楚]

    + Date 时间和日期

    - getDate 获取当前日期(本月的几号)

    - getDay 获取今天是星期几(0-Sunday,1-Monday…)

    - getFullYear 获取当前年份(四位数字)

    - getHours 获取当前小时数(24小时制,0-23)

    - getMilliseconds 获取当前毫秒数

    - getMinutes 获取当前分钟数

    - getMonth 获取当前月份(注意从0开始:0-Jan,1-Feb…)

    - getSeconds 获取当前秒数

    - getTime 获取UTC格式的从1970.1.1 0:00以来的秒数

    - getTimezoneOffset获取当前时间和UTC格式的偏移值(以分钟为单位)

    - getUTCDate 获取UTC格式的当前日期(本月的几号)

    - getUTCDay 获取UTC格式的今天是星期几(0-Sunday,1-Monday…)

    - getUTCFullYear 获取UTC格式的当前年份(四位数字)

    - getUTCHours 获取UTC格式的当前小时数(24小时制,0-23)

    - getUTCMilliseconds 获取UTC格式的当前毫秒数

    - getUTCMinutes 获取UTC格式的当前分钟数

    - getUTCMonth获取UTC格式的当前月份(注意从0开始:0-Jan,1-Feb…)

    - getUTCSeconds 获取UTC格式的当前秒数

    - getYear 获取当前缩写年份(当前年份减去1900)

    - new Date 新建日期时间物件

    - setDate 设置当前日期(本月的几号)

    - setFullYear 设置当前年份(四位数字)

    - setHours 设置当前小时数(24小时制,0-23)

    - setMilliseconds 设置当前毫秒数

    - setMinutes 设置当前分钟数

    - setMonth 设置当前月份(注意从0开始:0-Jan,1-Feb…)

    - setSeconds 设置当前秒数

    - setTime 设置UTC格式的从1970.1.1 0:00以来的秒数

    - setUTCDate 设置UTC格式的当前日期(本月的几号)

    - setUTCFullYear 设置UTC格式的当前年份(四位数字)

    - setUTCHours 设置UTC格式的当前小时数(24小时制,0-23)

    - setUTCMilliseconds 设置UTC格式的当前毫秒数

    - setUTCMinutes 设置UTC格式的当前分钟数

    - setUTCMonth设置UTC格式的当前月份(注意从0开始:0-Jan,1-Feb…)

    - setUTCSeconds 设置UTC格式的当前秒数

    - setYear 设置当前缩写年份(当前年份减去1900)

    - toString 将日期时间值转换成"日期/时间"形式的字符串值

    - UTC 返回指定的UTC格式日期时间的固定时间值

Flash程序常见二十问

回到顶部

    1.怎么才能让音乐和动画同步

    在声音属性里设置音乐成为数据流格式!

    在输出的声音选项里选择MP3,比特率为16kbps,品质为快速.

    2.尽管设置了影片大小,但播放时只要拖大窗口还是会看到原来不希望看到的部分,怎样只播放设定大小内的部分?

    这个问题很简单,在最上边新建一图层,做一个巨大的"回"字形,把影片以外的部分全部盖上.

    3.怎么样实现透明背景的FLASH动画?

    在FLASH中选择"File→Publish   Settings(发布设置)→HTML",在WMODE设置中选择"Transparent(透明化)",然后再发布这样就可以使FLASH透明了.另外如果在网页中实现FLASH透明可以选中插入的FLASH,在其属性面板中点击"Parameters(参数设置)"弹出Parameters对话框,在左边Parameters下输入"wmode",在右边VALUE下输入"transparent"也可以实现透明的效果.

    4.请问用FLASH可以输出gif动画吗?

    首先不能使用MC,选择"文件"---"输出电影"--格式为"Animated   GIF"

    5.音乐按钮的制作过程,哪位高手指点一下~~~~

    平时在做MC一样的啊,多加个层,需要把音效放在哪个地方就移动到那个地方就可以了啊,道理是一样的.

    补充:音乐做为事件播放.

    6.怎样把做好的FLASH动画转换成屏幕保护程序?

    使用SWF   Browser或者Screensaver,他们可以很方便地将SWF转换成屏保,使用SWF   Browser你还可以将SWF中的图片、音效等提取出来.

    7.如何制作动画开始前的Loading效果?

    在影片中的第二个影格中判断"_framesloaded(已载入影格)"是否和"_totalframes(全部影格)"相等,如果不相等转到第一个影格继续循环,如果相等转入第三个影格继续播放.

    8.如何实现打开FLASH文件时满屏播放?

    在动画第一帧中插入"ActiONscript:FS   Command   ("fullscreen",   true)",如果想不显示右键菜单,则插入:"FS   Command   ("showmenu",   False)",关闭动画为"FS   Command   ("quit")".

    9.Actionscript专家模式下的汉字如何才能显示?

    只要把Windows/Fonts目录中的MODERN.fon文件删除即可.

    10.如何利用AS实现打字机的效果?

    首先将一个文本框放置在场景中,把它的文本属性设置为"Dynamic(动态文本)"并设置变量名称如"textbox".然后新建一个图层用来放置Actionscript,在第一个影格中将文本内容存储到一个变量如"text="您好,欢迎光临.""并且为变量i设置初始值"i=0".在第二个影格中使用"mbsubstring"函数将文字逐一赋值给文本变量,如"textbox=   mbsubstring(text,   1,   i)"然后累加i的值"i=i+1".然后在第8个影格中判断i的大小是不是等于text的长度,如果相等则停止"Stop   ();"如果不相等则转到第二个影格播放"gotoAndPlay   (2);".

    11.怎样才能使动画播放更流畅?

    (1)减小动画动作的面积

    (2)在同一时刻,动画图层不宜太多

    (3)尽量简化矢量图片

    (4)尽量不要把动画背景设为透明方式

    (5)清除不必要的组件.

    12.在调节对象位置时很难准确调整,怎么才能非常准确地对齐组件?

    按"Ctrl+Alt+I"组合键可以以坐标方式对对象进行调整,或者选中对象后按上下左右键进行调整.

    13.我用的SWISH   1.58怎样才能使中文正常横向排列啊?我怎么弄都只能是倒转90度的横排

    注意你所选择的字体名称前是否有"@"

    如带有以上标志选择其它不带"@"的字体

    14.如何将动画设定在5分钟之内没有任何鼠标动作,则屏幕将转入一个指定的画面(相当于是一个屏保).

    在场景中放一个空的MC,在上面加Action:

    onClipEvent(enterFrame){

    total=Math.floor(getTimer()/1000);//获取电影播放以来所经过的时间

    if(total>=300){

    _root.gotoAndPlay(2);//判断:五分钟后播放第二帧

    }

    }

    主场景中第一帧加上:stop();

    15.再用引导线时,是不是一定要把图形群组化

    用组件,开始位置和结束位置组件的中心要对齐到引导线的中心上

    16.用遮罩是不是和要遮的东西有建立的先后之别呢

    mask层必须在上层

    masked层在mask层之下~

    mask层:显示的范围(区域)

    masked层:显示的内容:)

    17.请问怎样才能在场景时间线中使mc停在任意帧?

    _root.mc.gotoAndStop(你想要mc停在的某帧)

    18.为什么做mtv的时候,音乐用mp3的格式但是不能导入?

    因为很多音乐都不是正规的音乐格式,可能经过一些不专业的软件的处理,遇到这样的情况,你只要把这个音乐先导到SOUNDFORGE里,然后保存一次,经过专业的软件的处理,就成为专业的音乐,就不会出现这种轻快了.

    如无上面的工具,也可以用超级解霸的第三层重新压缩后就可以用了.

    19.如何精确控制变形

    在两个对象间做"Shape"变形时,是不是有时有种怪怪的感觉,觉得在乱变,不是柔和地变化.其实只要小心地处理一下就行了:选取"Shape"变形的第一帧,按"Ctrl+H"就可加上一个变形关键帧,同时在变形的最后一帧也会同步出现相应的关键帧.适当地选择关键帧的数量,调整关键帧的位置,就可实现精确的变形效果,就像影片《未来战士》中的液态金属人一样酷!

    20.如何能确定浏览者有没有安装支持FLASH插件,并提供安装方法

    最简单的方法是用Dreamweaver来编写HTML,当插入一个FLASH文件的时候,会自动在网页中插入一句代码.当用户没安装FLASH插件的时候,会自动到Macmmedia的指定位置下载.但该站点服务器常常较忙,你可以使用Behavior中的"Check   Plugin"指定任一"URL"下载.

    这似乎也算不上F1ash的应用技巧,但却至关重要.要知道目前在中国还有30%-40%的电脑没有安装FLASH播放器!

Maxthon中Flash程序无法正常运行的解决办法

回到顶部

    近来开发的好几个FLASH项目都碰到了在MaxthON下无法正常运行的情况.抽了些时间,做了下总结.

    症状

    在Maxthon等基于IE的外壳浏览器中,如果某个FLASH文件被缓存,再次打开包含此FLASH文件的页面时,写在文档类构造函数中的某些代码不能正常执行.

    具体哪些代码的执行会与预期不符,下面整理了一个列表:

    1. stage.stageWidth和stage.stageHeight等于0 (IE本身也存在此问题)

    2. 如果FLASH与页面跨域,即使页面参数指定allowScriptAccess="always",FLASH通过ExternalInterface调用JS仍然会报跨域错误

    3. FLASH通过ExternalInterface.addCallback添加供JS使用的FLASH方法失败,从而导致JS无法通过ExternalInterface调用FLASH方法

    以上总结均可以通过访问Problem.html来验证.

    原因

    之前我猜测原因是,再次打开包含已缓存FLASH文件的页面时,FLASH会比js优先初始化,从而导致上述的问题,但通过CompareInitTime.html的试验可以看出,js初始化仍然在FLASH之前.

    因为无法深入了解Maxthon与FLASHPlayer之间交互的技术细节,所以暂时做如下推测:在Maxthon等外壳浏览器中,再次打开包含已缓存FLASH文件的页面时,FLASH初始化的过程中,浏览器对FLASH的包装还未完成(这些包装包括设置宽高、设置跨域访问策略、ExternalInterface环境构建等等),从而导致某些属性失常并且与JS无法正常交互.

    解决方案

    经过验证,发现stage.stageWidth正常时,FLASH其它属性及行为也都正常.所以可以把判断stage.stageWidth是否大于0作为标准来判断何时可以进行初始化.访问Solution.html查看效果,主要代码如下:

    public function Main() {

    this.addEventListener(Event.ENTER_FRAME, checkStage);

    checkStage();

    }

    private function checkStage(evt:Event = null):void {

    if (stage.stageWidth > 0) {

    this.removeEventListener(Event.ENTER_FRAME, checkStage);

    init();

    }

    }

    private function init():void {

    //put your init code here

    }

    如果FLASH代码无法修改(比如加载的是第三方FLASH),则可以通过FLASH地址后加随机数强制不缓存来解决.

VC中使用Flash程序设计的动画程序

回到顶部

    前言:

    FLASH是一种功能强大的矢量动画,可以制作出各种华丽的电影效果,应用非常广泛!这也给予我们一个启迪:如果在VC程序中能够播放FLASH动画,将为程序增色不少,而且许多原本不易实现的功能,现在都可以轻松实现! 像金山词霸的安装程序主控界面就利用了FLASH,效果相当好.本文中笔者将制作一个完整的多媒体软件,将一些关键性技术介绍给大家,并提供全部代码供大家参考.

    本文使用到的关键性技术:

    (1)利用VB制作MS AGENT播放模块.

    (2)将该播放模块、FLASH动画文件SWF与其它必要资源打包到程序中,并在运行时自动释放.

    (3)通过VC和VB的通信实现多个不同模块的顺序执行.

    (4)FLASH的播放,并实现避免右键菜单的弹出.

    下面介绍具体的实现:

    (1)利用VB制作MS AGENT播放模块.

    这里先插入MS AGENT模块.然后在Form_Load里进行Agent控件的初始化;

    Private Sub Form_Load()

    Agent1.Characters.Load ("dot")

    下面就可进行动画操作了.

    Agent1.Characters.Character("dot").Show

    我们可用如下语句执行一些动作

    Agent1.Characters.Character("dot").Play "CONgratulate"

    Agent1.Characters.Character("dot").Speak "你好!"

    Agent1.Characters.Character("dot").moveto  x,y 'x,y 位屏幕坐标.

    ……

    由于我们用的是dot.acs,我们不能假定别人的机子上有这个文件.所以我将这个文件复制到winnt(windows)\msagent\chars目录下, 用于复制的VC代码如下:

    char *a = new char [255];

    char *b = new char [255];

    GetCurrentDIRectory(255,a);

    CSTring *str = new CString(a);

    CString *sou = new CString;

    ////////////////////////////////////////

    (*sou)=*str+CString("\\DOT.ACS");

    GetWindowsDirectory (b,255);

    CString  *des =new CString(b) ;

    (*des)+=CString ("\\msagent\\chars");

    CreateDirectory (des->GetBuffer (10),NULL);

    *des+=CString ("\\DOT.ACS");

    //AfxMESSageBox (*des);

    //AfxMessageBox (*sou);

    CopyFile (sou->GetBuffer (10),des->GetBuffer (10),false);

    //这个是为了避免在Load中用全路径.

    (2)实现了文件打包,将过多的模块整合到一起,避免文件的繁杂

    首先我们将各个模块作为资源加入资源中.定义整数标识和类型.这些资源文件打包将在程序运行的时候解出. 以下是从资源释放到文件的函数:

    int res2file(LPCTSTR lpName,LPCTSTR lpType,LPCTSTR filename)

    {

    //输入:lpName 为资源名,可用MAKEINTRESOURCE()宏将整型变为字符串.

    //LpType  为串类型名

    //Filename  为释放出的文件名.

    //输出:成功1,失败0

    HRSRC myres = FindResource (NULL,lpName,lpType);

    HGLOBAL gl = LoadResource (NULL,myres);

    LPVOID lp = LockResource(gl);//返回指向资源内存的地址的指针.

    // CREATE_ALWAYS为不管文件存不存在都产生新文件.

    HANDLE fp = CreateFile(filename ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);

    if (!fp)

    return false;

    DWORD a;

    //sizeofResource 得到资源文件的大小

    if(!WriteFile (fp,lp,SizeofResource(NULL,myres),&a,NULL))

    return false;

    CloseHandle(fp);

    FreeResource(gl);

    return true;

    }

    以下是调用的方法:

    res2file (MAKEINTRESOURCE(IDR_ZF),"swf","zf.swf");

    res2file (MAKEINTRESOURCE(IDR_ZG),"swf","zg.swf");

    res2file (MAKEINTRESOURCE(IDR_DOT),"acs","DOT.ACS");

    res2file (MAKEINTRESOURCE(IDR_SHARE),"dll","share.dll");

    res2file (MAKEINTRESOURCE(IDR_TALK),"dll","talk.dll");

    res2file (MAKEINTRESOURCE(IDR_SWFLASH),"ocx","swFLASH.ocx");

    (3)通过VC和VB的通信实现多个不同模块的顺序执行

    在程序中我们需要调用VB模块并等待它执行完毕再继续我们的VC程序,这就涉及到VC与VB之间的通讯问题,在这里我使用事件来解决这个问题,请看如下代码:

    CreateEvent(NULL,false,false,"lsbeven");

    然后,调用ms agent 动画

    PROCESS_INFORMATION pi;

    STARTUPINFO si={0};

    si.cb=sizeof(si);

    char *a =new char [255];

    GetCurrentDirectory (255,a);

    CString *str=new CString(a);

    //AfxMessageBox (*des);

    //AfxMessageBox (*sou);

    *str+=CString("\\talk.e\0");

    BOOL fRet=CreateProcess(NULL,

    str->GetBuffer (5),

    NULL,

    NULL,

    FALSE,

    0,

    NULL,

    NULL,

    &si,

    &pi);

    最后,用WaitForSingleObject (heven,40000)等待事件被触发.(40s超时)

    接下来的问题便是如何在VB中完成执行后触发这个事件.由于在vb中使用API很复杂,为了提供简单起见我用vc做了share.dll实现setvalue,然后在VB中进行调用来激活事件. 在setvalue中调用如下两个函数来激活事件.

    OpenEvent(DWORD dwAccess,//存取方式

    BOOL bInheritHandle,//是否能被继承

    LPCTSTR lpName)//名字

    SetEvent (HANDLE hEvent);

    Vb中用变量锁方法实现在未出来提示"点我呀!"前对左键点击的无效,在显示完提示后,当用户点击就调用setvalue来激活事件.

    Agent1_Click(ByVal CharacterID As String, ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Integer, ByVal y As Integer)

    If  b ==ture

    Then  setvalue

    Endif

    (4)FLASH的播放,并实现避免右键菜单的弹出

    1. 控键注册:

    HMODULE   hmod=LoadLibrary ("swFLASH.ocx");

    FARPROC   p=GetProcAddress (hmod,"DllRegisterServer");

    (*p)();

    2.在工程中插入 FLASH 控件.由于在不规则窗口中在进行FLASH控件的支持会使程序过于不清晰.于是另开独立的窗口来显示FLASH.

    void TraNSparentWnd::OnTImer(UINT nIDEvent)

    {

    switch (nIDEvent)

    {

    case 1:

    {

    KillTimer (nIDEvent);

    DoChange(MAKEINTRESOURCE(IDB_MAIN2));

    //创建视,作为默认视

    if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,

    CRect(260, 30,630, 370), this, AFX_IDW_PANE_FIRST, NULL))

    TRACE0("FaiLED to create view window\n");

    CenterWindow ();

    ShowWindow (SW_SHOW);

    }

    break;

    default: break;

    }

    }

    BOOL TransparentWnd::OnCMDMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)

    {

    if(m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))

    return TRUE;//如果是command消息则视类先处理.

    return CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);

    }

    void TransparentWnd::OnSetFocus(CWnd* pOldWnd)

    {

    //如果有视类则视类获得焦点.

    if(m_wndView.m_hWnd !=NULL)

    m_wndView.SetFocus();

    }

    下面在CchildView中定义

    CShockwaveFLASH  myFLASH;

    ///改变窗口特征

    BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)

    {

    if (!CWnd::PreCreateWindow(cs))

    return FALSE;

    cs.dwExStyle |= WS_EX_CLIENTEDGE;

    cs.style &= ~WS_BORDER;

    cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,

    ::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOWTEXT), NULL);

    return TRUE;

    }

    BOOL CChildView::OnEraseBkgnd(CDC* pDC)

    {

    return TRUE;//不让window自动刷屏

    }

    //下面进入控制部分

    int CChildView ::OnCreate (LPCREATESTRUCT lpCreateStruct)

    {

    if(CWnd::OnCreate(lpCreateStruct)==-1)

    return -1;

    myFLASH.Create(NULL,WS_CHILD|WS_VISIBLE,CRect(0,0,0,0), this, 1024);

    SetTimer (1,0,NULL);

    SetTimer (2,12000,NULL);

    CRect m_rect;

    GetClientRect (&m_rect );

    myFLASH.MoveWindow (&m_rect);//使FLASH 控件占满整个视区域

    return 0;

    }

    char *a = new char [512];

    GetCurrentDirectory (100,a);

    CString  *s=new CString(a);

    myFLASH.LoadMovie (0,*s+CString("\\zf.swf"));//这里一定要为全路径

    myFLASH.Play();//播放FLASH动画

    (5)两个高级话题

    5.1 在VC中用COM接口对ms agent 进行操作

    #include "stdafx.h"

    #include

    #include

    #include

    #include

    const LPWSTR kpwszCharacter =L"dot.acs";

    int APIENTRY WinMain(HINSTANCE hInstance,

    HINSTANCE hPrevInstance,

    LPSTR     lpCmdLine,

    int       nCmdShow)

    {

    IAgent *pAgent;

    if (FAILED(OleInitialize(NULL)))

    return -1;

    HRESULT hRes=CoCreateInstance (CLSID_AgentServer,

    NULL,

    CLSCTX_LOCAL_SERVER,

    IID_IAgent,

    (LPVOID*)&pAgent);

    //下面的代码调用IAgent::Load()方法来装入一个动画人物的数据

    //由于Agent服务器在自己的内存空间中运行,所以传送的字符串变量需要用SysAllocString()来分配内存

    VARIANTARG  vPath;

    VariantInit(&vPath);

    //初始化OLE变量

    vPath.vt = VT_BSTR;

    //指明变量类型为Unicode的字符串

    vPath.bstrVal=SysAllocString(lpCharacter);

    //lpCharacter 为动画人物数据的存放路径

    long __RPC_FAR   lCharID,lRequestID;

    hRes=pAgent->Load(vPath,&lCharID,&lRequestID);//装入数据人物ID在lCharID中返回

    IDispatch  *pdCharacter;

    hRes=pAgent->GetCharacter(lCharID,&pdCharacter);

    //获取 lCharID的IDispatch接口指针调用IDispatch::QueryInterface()方法

    //可以得到IAgentCharacter的接口指针:

    IAgentCharacter  *pCharacter;

    hRes=pdCharacter->QueryInterface(IID_IAgentCharacter,

    (LPVOID*)&pCharacter);

    pdCharacter->Release();

    //释放IDispath 通过IAgentCharacter接口就可以调用动画人物支持的各种方法了:

    hRes = pCharacter->Show(FALSE,&lRequestID); //显示动画人物

    hRes = pCharacter->MoveTo(320,240,100,&lRequestID);//移动动画人物到屏幕中央

    BSTR bszSpeak = SysAllocString(L"Hello World!");//分配字符串

    hRes = pCharacter->Speak(bszSpeak,NULL,&lRequestID);//让动画人物说话

    SysFreeString(bszSpeak);//释放字符串所占内存

    // 程序在退出之前需要把创建的Agent对象释放:

    if(pCharacter){

    pCharacter->Release();//释放IAgentCharacter接口

    pAgent->Unload(lCharID); //卸载动画人物数据

    }

    pAgent->Release(); //释放Agent对象

    VariantClear(&vPath); //清除OLE变量 OleUnInitialize();

    }

    5.2 同步问题还可用信号灯来实现

    在vc 中进行启动时第一步就创建信号量,值为0.在启动vb创建的程序,然后vc中进行p操作. vb创建的程序中 在退出时使用v操作.实现同步.

    P (s):

    S - -

    If s<0

    Then 挂起当前进程

    对应:win32 API :WaitForSingleObject

    V(s):

    S++

    If s<=0

    Then 在s的等待队列中唤醒一进程

    对应:win32 API :ReleaseSemaphore

Flash程序和VB联合打造的程序设计

回到顶部

    在软件开发的过程中,为了提高软件的商品化程度,许多开发人员都在努力使自己开发的程序界面更加的美观,但除了简单的使用图片和底纹,还有没有更好的方法呢?FLASH是一种矢量格式的动画文件, 可以包含动画,声音,超文本链接,而文件的体积却很小,在网页上使用FLASH可以做出很漂亮动态菜单条.那么FLASH可不可以加入到应用程序中而起到美化程序的作用呢?经过一番研究,FLASH不仅仅可以插入到程序中起到美化的作用,而且可以通过FSCommand命令与VB应用程序进行交互!也就是说你的应用程序的按钮再也不会是灰灰的那样的死板,而是颇具魅力的动画了!怎么样,动心了吧?那好,随我来一起让VB和FLASH联合起来,打造我们的魅力程序!

    (一)   在VB中播放FLASH动画

    怎样才能在VB中加入FLASH动画呢?我们只要使用FLASH5自带的Shockwave FLASH.ocx这个控件就可以了.方法如下:

    1. 打开VB6.0,新建一个工程,在工具箱上单击右键,选择CompONents…,在部件窗口的控件列表中选择Shockwave FLASH,然后确定,FLASH控件就被加到工具箱上.

    2.选择工具箱上的FLASH控件,放到窗体上并调整好大小;

    3.在Form_Load()过程中加入如下代码:

    其中,ShockwaveFLASH1.Movie是用来指定你要播放的FLASH动画的目录;ShockwaveFLASH1.Menu是用来指定是否在FLASH动画播放中封闭右键菜单,True为能够显示菜单,False为封闭右键菜单;ShockwaveFLASH1.Playing = True是让动画播放.

    好了,按F5看看吧,是不是程序中的FLASH动画能播放了?

    (二)   在FLASH中控制VB程序实现交互

    现在FLASH动画已经能在VB程序中播放了,那么怎么实现在FLASH中控制VB的程序从而实现交互式的操作呢?本文的重点也在于此.

    首先我们先来了解FLASH中控制VB程序的基本原理:在FLASH的ActionScript里面有个叫做FSCommand()的函数,它的主要功能就是发送FScommand命令,例如使动画全屏播放,隐藏动画菜单,更重要的就是可以与外部文件和程序进行通信.而在VB程序中,我们就是利用的Shockwave FLASH控件的FSCommand()过程来完成这一通信过程,实现信息发送的功能,并且根据发送出来的不同的命令及参数来实现对VB程序的控制.

    明白了吧?简单的说,我们就是利用FLASH中的FSCommand()函数向VB发送命令,利用Shockwave FLASH控件来接受这个命令,从而达到FLASH控制VB程序的目的.

    好了,现在知道了原理,我们就一步一步来实现吧!

    1. 首先要打开FLASH5制作一个交互按钮,并在按钮上面加上如下代码:

    on (release) {

    fscommand ("Send Action");

    //发送Send Action这个命令

    }

    这个命令的作用是当按下按钮后FLASH向VB发送出名为"Send Action"的命令.当然,这个命令的名字在实际应用中可以叫做其他的任何名字.

    2. 将FLASH导出成为swf文件,如文章第一部分所述插入到VB6.0中,下面就是VB怎么接受这个命令的事情了;

    3. 在窗体上双击Shockwave FLASH控件,进入代码编辑窗口,加入如下语句

    其中,ShockwaveFLASH1_FSCommand这个过程是专门用来接收FLASH发送的FSCommand命令的,其中第一个参数command就是与FLASH发送过来的命令相对应的,当其一致的时候,则执行后面的程序(本例中是弹出MsgBox).好了,看看程序运行的结果吧:

    通过本文你是不是完全掌握了FLASH与VB的结合,这里,你只要把Then后面要执行的语句段变为你自己想要实现的程序,那么FLASH中的动画按钮就能实现所有强大的VB功能了

    快去吧,再也不要那些死板的灰色按钮,加上你的炫目多彩的动画按钮,打造出你的魅力程序

    Private Sub ShockwaveFLASH1_FSCommand(ByVal command As String, ByVal args As String)

    If command = "Send Action" Then

    msg = MsgBox("FLASH与VB成功结合了!", vbApplicationModal, "成功了!")

    '当接到Send Action命令的时候

    '这里加入你需要的程序

    End If

    End Sub

    Private Sub Form_Load()

    ShockwaveFLASH1.Movie = "D:\test.swf"

    '这里写上你的FLASH文件目录

    ShockwaveFLASH1.Menu = False

    ShockwaveFLASH1.Playing = True

现在有5876人对本文发表评论 查看所有评论
 

关于我们 | 广告服务 | 服务项目 | 付款方式 | 联系我们 | 友情链接 | 投诉 建议 合作 | 网站地图 | 加入收藏
Copyright © 2007-2009 WEEQOO.COM Corp.All Rights Reserved. 版权所有 经营许可证编号:浙B2-20050339 法律声明
维库电子旗下网站:维库电子市场网 | ChinaICMart | 维库电子开发网 | 维库电子人才网
总部:杭州市下城区朝晖路182号国都发展大厦1号楼80A
电话:0571-85889139-8016 QQ:467090989 | MSN:dzsc076@hotmail.com | 邮箱:weeqoomaster@21cn.com
网络警察网络警察