MACD俱乐部

标题: 发点学习资料,都是DOC格式的。 [打印本页]

作者: jzhihui    时间: 2005-7-25 05:58
标题: 发点学习资料,都是DOC格式的。
:D

[ 本帖最后由 jzhihui 于 2006-4-16 18:45 编辑 ]
作者: jzhihui    时间: 2005-7-25 05:59


[ Last edited by jzhihui on 2005-11-9 at 08:06 ]
作者: jzhihui    时间: 2005-7-25 05:59


[ Last edited by jzhihui on 2005-7-26 at 06:02 ]

[ 本帖最后由 jzhihui 于 2005-12-5 10:10 编辑 ]
作者: jzhihui    时间: 2005-7-25 06:00


[ Last edited by jzhihui on 2005-11-13 at 07:18 ]
作者: jzhihui    时间: 2005-7-25 06:01
:D
作者: jzhihui    时间: 2005-7-25 06:03

作者: jzhihui    时间: 2005-7-25 06:04

作者: jzhihui    时间: 2005-7-25 06:05

作者: jzhihui    时间: 2005-7-25 06:07

作者: jzhihui    时间: 2005-7-25 06:08


[ 本帖最后由 jzhihui 于 2006-1-3 22:43 编辑 ]
作者: jzhihui    时间: 2005-7-25 06:09

作者: jzhihui    时间: 2005-7-25 06:10
[photoshop实例教程集].chm
共120M

[ 本帖最后由 jzhihui 于 2006-11-19 13:28 编辑 ]
作者: jzhihui    时间: 2005-7-25 06:12
PS7。0快捷方式大全。。。这个是BMP格式的。。:D


photoshop编辑快捷操作
作者: jzhihui    时间: 2005-7-25 06:13
PHOTOSHOP工具箱快捷操作
作者: jzhihui    时间: 2005-7-25 06:14
PHOTOSHOP滤镜操作快捷方式

[ 本帖最后由 jzhihui 于 2006-8-15 12:15 编辑 ]
作者: jzhihui    时间: 2005-7-25 06:15
PHOTOSHOP路径编辑操作
作者: jzhihui    时间: 2005-7-25 06:16
PHOTOSHOP切片和优化快捷操作
作者: jzhihui    时间: 2005-7-25 06:17
PHOTOSHOP视图快捷操作
作者: jzhihui    时间: 2005-7-25 06:18
蒙板。

[ 本帖最后由 jzhihui 于 2006-8-15 12:03 编辑 ]
作者: jzhihui    时间: 2005-7-25 06:19
PHOTOSHOP图层快捷操作1
作者: jzhihui    时间: 2005-7-25 06:20
PHOTOSHOP图像调整快捷操作
作者: jzhihui    时间: 2005-7-25 06:21
photoshop文件快捷操作
作者: jzhihui    时间: 2005-7-25 06:22
PHOTOSHOP文字快捷操作
作者: jzhihui    时间: 2005-7-25 06:23
PHOTOSHOP选择快捷操作
作者: gym7895123    时间: 2005-7-25 06:28
不错,长见识啊!!
作者: 游刃    时间: 2005-7-25 06:44

作者: 细雨纷菲    时间: 2005-7-25 09:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 铁草    时间: 2005-7-25 13:04
good.
作者: 江天纤尘    时间: 2005-7-25 13:58
辛苦辛苦~~~
作者: xiaoliang    时间: 2005-7-25 15:02
xiexie
作者: jzhihui    时间: 2005-7-25 15:37
Adobe Photoshop 鲜为人知的75个技巧
作者: jzhihui    时间: 2005-7-25 15:39
photoshop制作水晶(图文)
作者: jzhihui    时间: 2005-7-25 15:40
三分钟搞定Photoshop抠图(图文)
作者: UFO7899    时间: 2005-7-25 15:46
好,高.高.实在是高!!!
作者: hysd111    时间: 2005-7-25 15:51
精,我顶你 ↑
作者: yjzl1997    时间: 2005-7-25 16:03
辛苦辛苦~~~
作者: jzhihui    时间: 2005-7-25 18:07
PhotoImpact数码相片处理80例

解压缩后是DOC文档和.BMP文件。
作者: jzhihui    时间: 2005-7-25 18:21
Flash 技巧汇粹 .chm
作者: 日月共辉    时间: 2005-7-25 18:22
有点不敢顶,怕你还接着发!
作者: jzhihui    时间: 2005-7-25 18:26
网页设计技巧及网页制作常见问题

解压缩后是。CHM文件。
作者: jzhihui    时间: 2005-7-25 18:28
(汉)设计常用的色彩表.files

[ 本帖最后由 jzhihui 于 2007-8-5 16:54 编辑 ]
作者: jzhihui    时间: 2005-7-25 18:40
视频播放、编辑、RMVB压片全教程

解压后是一。EXE电子书,看起来很方便。:*29*:

[ 本帖最后由 jzhihui 于 2007-8-5 17:01 编辑 ]
作者: hopelqs    时间: 2005-7-25 23:17
能否打包压缩
谢谢
作者: 入地.    时间: 2005-7-25 23:32
jzhihui版主你好;
     我是照单全收了,谢谢!
作者: yhs012    时间: 2005-7-26 00:34
我也是照单全收了,谢谢!
作者: 西方飞狐    时间: 2005-7-26 03:08

作者: jzhihui    时间: 2005-8-19 06:25
flash字典
作者: polopolo    时间: 2005-8-19 06:45
标题: d

作者: 游刃    时间: 2005-8-19 06:47
日月共辉朋友,这里下载IE删除软件
作者: Jiaflower    时间: 2005-8-19 06:50
Wonderful:P
作者: jzhihui    时间: 2005-8-19 23:00
大量的flash透明素材 -----网页设计者必备的精品




透明FLASH素材
http://imgfree.21cn.com/free/flash/1.swf红色背景白色小流星
http://imgfree.21cn.com/free/flash/2.swf浅绿色背景亮色竖条
http://imgfree.21cn.com/free/flash/3.swf光球光芒时隐时现
http://imgfree.21cn.com/free/flash/4.swf米字星光
http://imgfree.21cn.com/free/flash/5.swf灰色背景米字星光
http://imgfree.21cn.com/free/flash/6.swf灰蓝背景飘落雨滴
http://imgfree.21cn.com/free/flash/7.swf黄色背景飞星闪闪
http://imgfree.21cn.com/free/flash/8.swf青蛙
http://imgfree.21cn.com/free/flash/9.swf蓝色蝴蝶
http://imgfree.21cn.com/free/flash/10.swf竖条箭头
http://imgfree.21cn.com/free/flash/11.swf宽窄竖条
http://imgfree.21cn.com/free/flash/12.swf左右晃动的竖条(宽、窄)
http://imgfree.21cn.com/free/flash/13.swf黑色背景旋转轮盘
http://imgfree.21cn.com/free/flash/14.swf蝌蚪旋转、随鼠标的白色光团
http://imgfree.21cn.com/free/flash/15.swf黑色背景绿色飘带幻影
http://imgfree.21cn.com/free/flash/16.swf黑色背景飞星闪闪
http://imgfree.21cn.com/free/flash/17.swf金鱼
http://imgfree.21cn.com/free/flash/18.swf蓝色背景水平飞镖
http://imgfree.21cn.com/free/flash/19.swf左右晃动的竖条
http://imgfree.21cn.com/free/flash/20.swf黑色背景水平闪动的横条
http://imgfree.21cn.com/free/flash/21.swf黑色背景光晕
http://imgfree.21cn.com/free/flash/22.swf光圈由小变大
http://imgfree.21cn.com/free/flash/23.swf蓝色背景雪花飘飘
http://imgfree.21cn.com/free/flash/24.swf左右闪动的竖条
http://imgfree.21cn.com/free/flash/25.swf三只黑蚂蚁
http://imgfree.21cn.com/free/flash/26.swf左右晃动的黄、绿、蓝竖线
http://imgfree.21cn.com/free/flash/27.swf无色背景水珠
http://imgfree.21cn.com/free/flash/28.swf黑色背景竖条
http://imgfree.21cn.com/free/flash/29.swf圆圈内海浪波动
http://imgfree.21cn.com/free/flash/30.swf黑色背景蓝色梦幻
http://imgfree.21cn.com/free/flash/30.swf黑色背景蓝色梦幻
http://imgfree.21cn.com/free/flash/31.swf黑色背景无数小亮点飘落
http://imgfree.21cn.com/free/flash/32.swf长发女孩
http://imgfree.21cn.com/free/flash/33.swf粉黄色5瓣花飘飘
http://imgfree.21cn.com/free/flash/34.swf
http://imgfree.21cn.com/free/flash/35.swf小星、大星光晕梦幻
http://imgfree.21cn.com/free/flash/35.swf紫色唇印升腾
http://imgfree.21cn.com/free/flash/36.swf上下闪动的横条
http://imgfree.21cn.com/free/flash/37.swf绿色、黄色的树叶飞舞
http://imgfree.21cn.com/free/flash/38.swf流星飞降
http://imgfree.21cn.com/free/flash/39.swf小+字旋转大光圈
http://imgfree.21cn.com/free/flash/40.swf大、小八瓣雪花飘落
http://imgfree.21cn.com/free/flash/41.swf紫色背景大、小八瓣雪花飘落
http://imgfree.21cn.com/free/flash/42.swf空中飘动的黄球
http://imgfree.21cn.com/free/flash/43.swf
http://imgfree.21cn.com/free/flash/44.swf
http://imgfree.21cn.com/free/flash/45.swf两只黄色的蝴蝶在左上角飞舞
http://imgfree.21cn.com/free/flash/46.swf一片浅粉色的云团
http://imgfree.21cn.com/free/flash/47.swf 箭头左右穿梭
http://imgfree.21cn.com/free/flash/48.swf一个光球从右上方慢慢飞入
http://imgfree.21cn.com/free/flash/49.swf飘落的浅粉色花瓣
http://imgfree.21cn.com/free/flash/50.swf晃动的文字“sweet kiss day”
http://imgfree.21cn.com/free/flash/51.swf三只飞舞的蜻蜓、闪闪的星光
http://imgfree.21cn.com/free/flash/52.swf黑色背景飘落的红叶
http://imgfree.21cn.com/free/flash/53.swf雪糕降落
http://imgfree.21cn.com/free/flash/54.swf绿色的心和I love you垂直降落
http://imgfree.21cn.com/free/flash/55.swf两只跳跃的青蛙
http://imgfree.21cn.com/free/flash/56.swf六边形、降落的竖条
http://imgfree.21cn.com/free/flash/57.swf燕鱼和水泡
http://imgfree.21cn.com/free/flash/58.swf光晕、光圈
http://imgfree.21cn.com/free/flash/59.swf蓝色背景飞翔的海鸥
http://imgfree.21cn.com/free/flash/60.swf黑色背景降落的萤火虫
http://imgfree.21cn.com/free/flash/61.swf飞腾的红心
http://imgfree.21cn.com/free/flash/62.swf五彩礼花燃放
http://imgfree.21cn.com/free/flash/63.swf黄色的四瓣花飘落
http://imgfree.21cn.com/free/flash/64.swf浅蓝色的雪花在空中,小雪花降落
http://imgfree.21cn.com/free/flash/65.swf飘落的空心小兰圈
http://imgfree.21cn.com/free/flash/66.swf一只手的图形
http://imgfree.21cn.com/free/flash/67.swf由远而近飞来的流星
http://imgfree.21cn.com/free/flash/68.swf黑色背景飘落的雪花
http://imgfree.21cn.com/free/flash/69.swf七彩光光芒四射(全屏)
http://imgfree.21cn.com/free/flash/70.swf七彩光光芒四射(全屏)
http://imgfree.21cn.com/free/flash/71.swf闪动的小竖条
http://imgfree.21cn.com/free/flash/72.swf一只和平鸽展翅飞舞
http://imgfree.21cn.com/free/flash/73.swf蓝色背景蓝色气泡慢慢升空
http://imgfree.21cn.com/free/flash/74.swf白色背景浅蓝色的气泡慢慢升空
http://imgfree.21cn.com/free/flash/75.swf跟随鼠标游动的七彩光圈
http://imgfree.21cn.com/free/flash/76.swf 线条变形
http://imgfree.21cn.com/free/flash/77.swf蓝色旋转
http://imgfree.21cn.com/free/flash/78.swf跟随鼠标旋转的数字时钟
http://imgfree.21cn.com/free/flash/79.swf鼠标滑过方块图形变换
http://imgfree.21cn.com/free/flash/80.swf跟随鼠标的“欢迎下载”及七彩星
http://imgfree.21cn.com/free/flash/81.swf跟随鼠标的火苗
http://imgfree.21cn.com/free/flash/82.swf雪花旋舞
http://imgfree.21cn.com/free/flash/83.swf蓝色背景蓝色气泡升腾
http://imgfree.21cn.com/free/flash/84.swf闪动的白色圆圈
http://imgfree.21cn.com/free/flash/85.swf浅蓝色的纸片旋入
http://imgfree.21cn.com/free/flash/86.swf绿色的指针旋转
http://imgfree.21cn.com/free/flash/87.swf跟随鼠标移动的黄色小球
http://imgfree.21cn.com/free/flash/88.swf七彩礼花开放
http://imgfree.21cn.com/free/flash/89.swf金光闪闪(中间到四周)
http://imgfree.21cn.com/free/flash/90.swf立方体折叠
http://imgfree.21cn.com/free/flash/91.swf浅蓝色的纸片旋入
http://imgfree.21cn.com/free/flash/92.swf飘舞的七彩丝线
http://imgfree.21cn.com/free/flash/93.swf闪电效果
http://imgfree.21cn.com/free/flash/94.swf扇形旋转七彩光圈
http://imgfree.21cn.com/free/flash/95.swf 七彩光8字形旋转
http://imgfree.21cn.com/free/flash/96.swf小球和旋钮、光晕
http://imgfree.21cn.com/free/flash/97.swf旋转的花瓣、蝴蝶随鼠标飞舞
http://imgfree.21cn.com/free/flash/98.swf飞旋的七彩光
http://imgfree.21cn.com/free/flash/99.swf白色旋转的花瓣变形
http://imgfree.21cn.com/free/flash/100.swf蓝宝石七彩闪光
http://imgfree.21cn.com/free/flash/101.swf黄色4瓣花飘落
http://imgfree.21cn.com/free/flash/102.swf蓝色的球从页面左侧飞入
http://imgfree.21cn.com/free/flash/103.swf从空中滴落的一个大雨滴
http://imgfree.21cn.com/free/flash/104.swf左右飞入两个箭头、3个圆圈旋转
http://imgfree.21cn.com/free/flash/105.swf由中心向外扩展的闪电光圈
http://imgfree.21cn.com/free/flash/106.swf从下向上飞入的箭头,闪光
http://imgfree.21cn.com/free/flash/107.swf一只大眼睛黄色蝴蝶
http://imgfree.21cn.com/free/flash/108.swf旋舞的3个半透明圆圈
http://imgfree.21cn.com/free/flash/109.swf从左至右的箭头
http://imgfree.21cn.com/free/flash/110.swf从右向左的粉红色箭头
http://imgfree.21cn.com/free/flash/111.swf左、右飞入的透明箭头
http://imgfree.21cn.com/free/flash/112.swf右下方向左上方的箭头
http://imgfree.21cn.com/free/flash/113.swf粉红色的花瓣飘落
http://imgfree.21cn.com/free/flash/114.swf粉红色的大箭头
http://imgfree.21cn.com/free/flash/115.swf跟随鼠标游动的浅蓝色的鱼
http://imgfree.21cn.com/free/flash/116.swf闪动的横条
http://imgfree.21cn.com/free/flash/117.swf白色光圈和飘舞的丝带*
http://imgfree.21cn.com/free/flash/118.swf
http://imgfree.21cn.com/free/flash/119.swf旋转的风车和黄色光圈
http://imgfree.21cn.com/free/flash/120.swf旋转梦幻
http://imgfree.21cn.com/free/flash/121.swf飘落的白蝴蝶?
http://imgfree.21cn.com/free/flash/122.swf上下飞动的绿色小横条
http://imgfree.21cn.com/free/flash/123.swf透明的气泡升腾
http://imgfree.21cn.com/free/flash/124.swf闪动的白色大光圈
http://imgfree.21cn.com/free/flash/125.swf闪动的白色圆圈
http://imgfree.21cn.com/free/flash/126.swf旋转的大立方体
http://imgfree.21cn.com/free/flash/127.swf 圆圈、箭头
http://imgfree.21cn.com/free/flash/128.swf黑色的人影
http://imgfree.21cn.com/free/flash/129.swf下雨了
http://imgfree.21cn.com/free/flash/130.swf鼠标滑过,雪花飘飘
http://imgfree.21cn.com/free/flash/131.swf绿色的枫叶飘落
http://imgfree.21cn.com/free/flash/132.swf鼠标滑过、圆球线条变形
http://imgfree.21cn.com/free/flash/133.swf按折线飞入的一个小蝌蚪流星
http://imgfree.21cn.com/free/flash/134.swf一个橘黄色的小球在空中飞舞
http://imgfree.21cn.com/free/flash/135.swf旋转的闪亮蝌蚪符号
http://imgfree.21cn.com/free/flash/136.swf 很多旋转的红色4角星
http://imgfree.21cn.com/free/flash/137.swf水平移动的风
http://imgfree.21cn.com/free/flash/138.swf萤火虫
http://www.nice.or.jp/~mosmos/free/f703.swf在救生圈上的女孩
http://www.nice.or.jp/~mosmos/free/f903.swf 城堡
http://www.nice.or.jp/~mosmos/nice_topic/hinamaturi.swf两个蛋壳娃娃随鼠标变换表情
http://www.nice.or.jp/~mosmos/nice_topic/hakucho.swf一只白天鹅随鼠标抬头低头
http://www.nice.or.jp/~mosmos/free/f110.swf蝴蝶女孩
http://www.nice.or.jp/~mosmos/free/f111.swf捉树叶的女孩
http://www.nice.or.jp/~mosmos/free/f105.swf随风摆动的野草
http://www.nice.or.jp/~mosmos/free/f102.swf圆桌上的一杯茶水热气腾腾
http://www.nice.or.jp/~mosmos/free/f101.swf城堡星空
http://www.nice.or.jp/~mosmos/free/f601.swf骑自行车的女孩
http://zqbbs.netsh.com/usr/12/12_191_15.swf荷叶、荷花、金鱼*
http://zqbbs.netsh.com/usr/12/12_191_17.swf古诗,鱼随鼠标游 http://hiro003.cool.ne.jp/iptrace_cgi/set/xmas7/fx_rtree1.swf圣诞快乐(Merry Christmas)
http://wanruo.jahee.com/jpsc/flash2/053.swf粉红色的花瓣飘落
http://zqbbs.netsh.com/usr/12/12_631_14.swf粉黄色的6瓣花飞舞
http://www.forshine.net/flash/71.swf绿色黄色树叶飘舞
http://wanruo.jahee.com/jpsc/flash2/057.swf圆圈,飘带
http://mailimg-fs.hanmail.net/fl/effect/19/e-fall2.swf黑色背景,红叶飘舞*
http://display.lizhimi.com/IMAGES/Bird.swf
http://bbs.flasher123.com/Upload ... 451020535773219.swf一只白鹤飞舞
http://display.lizhimi.com/IMAGES/Bird.swf
http://www.forshine.net/flash/32.swf圆圈幻影
http://wanruo.jahee.com/jpsc/flash/25.swf大小圆圈
http://file2.flash8.net/2004up/fla/6/1/200461153578559.swf无色背景粉色的金鱼*
http://wanruo.jahee.com/jpsc/flash/11.swf
http://hlm.nease.net/swf/red/liu.swf[/url]柳条飘舞*
http://www.flash8.net/upload/2004/2/29/20042291313205540.swf七彩闪光星星
http://file2.flash8.net/2004up/fla/8/3/2004831139337831.swf闪光的礼花
http://zqbbs.netsh.com/usr/12/12_631_14.swf灰色背景小花瓣
http://www.forshine.net/flash/71.swf白色背景小绿叶
http://wanruo.jahee.com/jpsc/flash2/057.swf黑色背景白色飘带
http://imgfree.21cn.com/free/flash/16.swf 黄色背景飞舞的白色小星星
http://mailimg-fs.hanmail.net/fl/effect/19/e-fall2.swf黄色背景飘舞的红叶
http://display.lizhimi.com/IMAGES/Bird.swf蓝色背景海鸥
http://bbs.flasher123.com/Upload ... 451020535773219.swf白色背景大雁飞过
http://imgfree.21cn.com/free/flash/51.swf黑色背景飞行的蜻蜓
http://imgfree.21cn.com/free/flash/59.swf浅兰背景白色大雁飞过
http://display.lizhimi.com/IMAGES/Bird.swf浅兰背景鸟飞过
http://www.forshine.net/flash/32.swf黑色背景白色球圈
http://wanruo.jahee.com/jpsc/flash/25.swf黑色背景很大的水圈
http://file2.flash8.net/2004up/fla/6/1/200461153578559.swf白色背景金鱼
http://wanruo.jahee.com/jpsc/flash/11.swf黄色背景飞舞的星光
http://www.flash8.net/upload/2004/2/29/20042291313205540.swf黑色背景多彩的星光
http://file2.flash8.net/2004up/fla/8/3/2004831139337831.swf黑色背景礼花
作者: Jiaflower    时间: 2005-8-20 00:45
Thanks
作者: kevinjiang5    时间: 2005-8-20 03:44
谢谢。。。
作者: jzhihui    时间: 2005-8-20 08:51
[动画基础]运动规律


[动画基础]运动规律(zt) 理论资料---运动规律--潜伏者关于运动规律的一些基本概念 动画片中的活动形象,不象其它影片那样,用胶片直接拍摄客观物体的运动,而是通过对客观物体运动的观察、分析、研究,用动画片的表现手法(主要是夸张、强调动作过中的某些方面),一张张地画出来,一格格地拍出来,然后连续放映,使之在银幕上活动起来的。因此,动画片表现物体的运动规律既要以客观物体的运动规律为基础,但又有它自已的特点,而不是简单的模拟。研究动画片表现物体的运动规律,首先要弄清时间、空间、张数、速度的概念及彼此之间的相互关系,从而掌握规律,处理好动画片中动作的节奏 一、时间 所谓“时间”,是指影片中物体(包括生物和非生物)在完成某一动作时所需的时间长度,这一动作所占胶片的长度(片格的多少)。这一动作所需的时间长,其所占片格的数量就多;动作所需的时间短,其所占的片格数量就少。 由于动画片中的动作节奏比较快,镜头比较短(一部放映十分钟的动画片大约分切为100-200个镜头),因此在计算一个镜头或一个动作的时间(长度)时,要求更精确一些,除了以秒(呎)为单位外,往外还要以“格”为单位(1秒=24格,1呎=16格)。 动画片计算时间使用的工具是秒表。在想好动作后,自己一面做动作,一面用秒表测时间;也可以一个人做动作,另一个人测时间。对于有些无法做出的动作,如孙悟空在空中翻筋斗,雄鹰在高空翱翔或是大雪纷飞乌云翻滚等,往往用手势做些比拟动作,同时用秒表测时间,或根据自己的经验,用脑子默算的办法确定这类动作所需的时间。对于有些自己不太熟悉的动作,也可以采取拍摄动作参考片的办法,把动作记录下来,然后计算这一动作在胶片上所占的长度(呎数、格数),确定所需的时间。 我们在实践中发现,完成同样的动作,动画片所占胶片的长度比故事片、记录片要略短一些。例如,用胶片拍摄真人以正常速度走路,如果每步是14格,那么动画片往往只要拍12格,就可以造成真人每步用14格的速度走路的效果;如果动画片也用14格,在银幕上就会感到比真人每步用14格走路的速度要略慢一点。这是由于动画的单线平涂的造型比较简单的缘故。因此,当我们在确定动画片中某一动作所需的时间时,常常要把我们用秒表根据真人表演测得的时间或记录片上所摄的长度,稍稍打一点折扣,才能取得预期的效果。 二、空间 所谓“空间”,可以理解为动画片中活动形象在画面上的活动范围和位置,但更主要的是指一个动作的幅度(即一个动作从开始到终止之间的距离)以及活动形象在每一张画面之间的距离。 动画设计人员在设计动作时,往往把动作的幅度处理得比真人动作的幅度要夸张一些,以取得更鲜明更强烈的效果。 此外,动画片中的活动形象做纵深运动时,可以与背景画面上通过透视表现出来的纵深距离不一致。例如:表现一个人从画面纵深处迎面跑来,由小到大,如果按照画面透视及背景与人物的比例,应该跑十步,那么在动画片中只要跑五、六步就可以了,特别是在地平线比较低的情况下,更是如此。 三、速度 所谓“速度”,是指物体在运动过程中的快慢。按物理学的解释,是指路程与通过这段路程所用时间的比值。在通过相同的距离中,运动越快的物体所用的时间越短,运动越慢的物体所用的时间就越长。在动画片中,物体运动的速度越快,所拍摄的格数就越少;物体运动的速度越慢,所拍摄的格数就越多。 四、匀速、加速和减速 按照物理学的解释,如果在任何相等的时间内,质点所通过的路程都是相等的,那么,质点的运动就是匀速运动;如果在任何相等的时间内,质点所通过的路程不是都相等的,那么,质点的运动就是非匀速运动。(在物理学的分析研究中,为了使问题简化起见,通常用一个点来代替一个物体,这个用来代替一个物体的点,称为质点。) 非匀速运动又分为加速运动和减速运动。速度由慢到快的运动称加速运动;速度由快到慢的运动称减速运动。 在动画片中,在一个动作从始至终的过程中,如果运动物体在每一张画面之间的距离完全相等,称为“平均速度”(即匀速运动);如果运动物体在每一张画面之间的距离是由小到大,那么拍出来在银幕上放映的效果将是由慢到快,称为“加速度”(即加速运动);如果运动物体在每一张画面之间的距离是由大到小,那么拍出来在银幕上放映的效果将是由快到慢,称为“减速度”(即减速运动)。 上面讲到的是物体本身的“加速”或“减速”,实际上,物体在运动过程中,除了主动力的变化外,还会受到各种外力的影响,如地心引力、空气和水的阻力以及地面的摩擦力等,这些因素都会造成物体在运动过程中速度的变化。 在动画片中,不仅要注意较长时间运动中的速度变化,还必须研究在极短暂的时间内运动速度的变化。例如:一个猛力击拳的动作运动过程可能只有6格,时间只有1/4秒,用肉眼来观察,很难看出在这一动作过程中,速度有什么变化。但是,如果我们用胶片把它拍下来,通过逐格放映机放映,并用动画纸将这6格画面一张张地摹写下来,加以比较,就会发现它们之间的距离并不是相等的,往往开始时距离小,速度慢;后面的距离大,速度快。由于动画片是一张张地画出来,然后一格格地拍出来的,因此我们必须观察、分析、研究动作过程中每一格画面(1/24秒)之间的距离(即速度)的变化,掌握它的规律,根据剧情规定、影片风格以及角色的年龄、性格、情绪等灵活运用,把它作为动画片的一种重要表现手段。 在动画片中,造成动作速度快慢的因素,除了时间和空间(即距离)之外,还有一个因素,就是两张原画之间所加中间画的数量。中间画的张数越多,速度越慢;中间画的张数越少,速度越快。即使在动作的时间长短相同,距离大小也相同的情况下,由于中间画的张数不一样,也能造成细微的快慢不同的效果。 五、时间、距离、张数、速度之间的 关系 前面讲了时间、距离、张数、速度的基本概念,从一个动作(不是一组动作)来说,所谓“时间”,是指甲原画动态逐步运动到乙原画动态所需的秒数(呎数、格数)多少;所谓“距离”,是指两张原画之间中间画数量的多少;所谓“速度”,是指甲原画动态到乙原画动态的快慢。 现在,我们分析一下时间、距离、张数三个因素与速度的关系。关于这个问题,初学者往往容易产生一个错觉:时间越长,距离越远,张数越多,速度就越慢;时间越短,距离越近,张数越少,速度就越快。但是有时并非如此,例如: 甲组:动画24张,每张拍一格,共24格=1秒,距离是乙组的二倍。乙组:动画12张,每张拍一格,共12格=0.5秒,距离是甲组的一半。 虽然甲组的时间和张数都比乙组多一倍,但由于甲组的距离也比乙组加长了一倍,如果把甲组截去一半,就会发现与乙组的时间、距离和张数是完全相等的,所以运动速度并没有快慢之别。由此可见,当影响速度的三种因素都相应地增加或减少时,运动速度不变。只有将这三种因素中的一种因素或两种因素向相反的方向处理时,运动速度才会发生变化,例如: 甲组:动画12张,每张拍一格,共12格=0.5秒,距离是乙组的二倍。 乙组:动画12张,每张拍一格,共12格=0.5秒,距离是甲组的一半。 甲组的距离是乙组的二倍,其速度也就相应地快一倍。由此可见:在时间和张数相同的情况下,距离越大,速度越快;距离越小,速度越慢。 需要说明的是,为了叙述方便,上面是以匀速运动为例,不仅总距离相等,而且每张动画之间的距离也相等。实际上,即使两组动画的运动总距离相等,如果每张动画之间的距离不一样(用加速度或减速度的方法处理),也会造成快慢不同的效果。 六、节奏 一般说来,动画片的节奏比其它类型影片的节奏要快一些,动画片动作的节奏也要求比生活中动作的节奏要夸张一些。 整个影片的节奏,是由剧情发展的快慢、蒙太奇各种手法的运用以及动作的不同处理等多种因素造成的。这里说的不是整个影片的节奏,而是动作的节奏。 在日常生活中,一切物体的运动(包括人物的动作)都是充满节奏感的。动作的节奏如果处理不当,就象讲话时该快的地方没有快,该慢的地方反而快了;该停顿的地方没有停,不该停的地方反而停了一样,使人感到别扭。因此,处理好动作的节奏对于加强动画片的表现力是很重要的。 造成节奏感的主要因素是速度的变化,即“快速”、“慢速”以及“停顿”的交替使用,不同的速度变化会产生不同的节奏感,例如: A.停止----慢速----快速,或快速----慢速----停止,这种渐快或渐慢的速度变化造成动作的节奏感比较柔和。 B. 快速----突然停止,或快速----突然停止----快速,这种突然性的速度变化造成动作的节奏感比较强烈。 C.慢速----快速----突然停止,这种由慢渐快而又突然停止的速度变化可以造成一种“突然性”的节奏感。 由于动画片动作的速度是由时间、距离及张数三种因素造成的,而这三种因素中,距离(即动作幅度)又是最关键的,因此,关键动作的动态和动作的幅度往往构成动作节奏的基础。如果关键动作的动态和动作幅度安排得不好,即使通过时间和张数的适当处理,对动作的节奏起了一些调节作用,其结果也还是不理想的,往往造成比较大的修改。 我们不能因此忽视时间和张数的作用。在关键动作的动态和动作幅度处理得都比较好的情况下,如果时间和张数安排不当。动作的节奏不但出不来,甚至会使人感到非常别扭。不过这种修改较容易,只要增加中间画的张数或是调整摄影表上的拍摄格数就可以了。 动作的节奏是为体现剧情和塑造任务服务的,因此,我们在处理动作节奏时,不能脱离每个镜头的剧情和人物在特定情景下的特定动作要求,也不能脱离具体角色的身份和性格,同时还要考虑到电影的风格。
第二章 惯性运动 惯性运动 人们在大量实践的基础上,经过抽象概括,认识到这样一个规律:如果一个物体不受到任何力的作用,它将保持静止状态或匀速直线运动状态,这就是我们通常所说的惯性定律。这一定律还表明:任何物体,都具有一种保持它原来的静止状态或匀速直线运动状态的性质,这种性质,就是惯性。 一切物体都有惯性,在日常生活中,表现物体惯性的现象是经常可以遇到的。例如:站在汽车里的乘客,当汽车突然向前开动时,身体会向后倾倒,这是因为汽车已经开始前进,而乘客由于惯性还要保持静止状态的原因;当行驶中的汽车突然停止时,乘客的身体又会向前倾倒,这是由于汽车已经停止前进,而乘客由于惯性还要保持原来速度前进的原因。 人们在生产和生活中,经常利用物体的惯性。例如,榔头松了,把榔头柄的末端在固定而坚硬的物体上撞击几下,榔头柄因撞击而突然停止,榔头由于惯性仍要继续运动,结果就紧紧地套在柄上了。挖土时,铁锹铲满了土,用力一甩,铁锹仍旧握在手里,而土却由于惯性被扬出去了。 物体的惯性还表现在当它受到力的作用时,容易不容易改变原来的运动状态。有的物体运动状态容易改变,有的则不容易改变。运动状态容易改变的物体,保持原来运动状态的能力小,我们说它的惯性小;运动状态不容易改变的物体,保持原来运动状态的能力大,我们说它的惯性大。 惯性的大小是由物体的质量决定的。物体的质量越大,它的惯性越大;物体的质量越小,它的惯性越小。例如:一辆四十吨的大型平板车的质量比一辆小汽车的质量要大得多,它的惯性也就比小汽车的惯性大得多,因此大型平板车起步很慢,小汽车起步很快;大型板车的运动状态很 不容易改变,小汽车的运动状态则容易改变得多。 汽车刹车时,只须刹住一对后轮就可以了;火车却不行,它的每个轮子都装有刹车装置,这是因为火车的惯性比汽车的惯性大,因此要改变它原来的运动状态也就困难得多。 人们骑自行车时,如果带有较重的货物,起动、转弯和停车都比骑空车时困难,这也是由于惯性大小不同的原因。 我们在日常生活中,要经常注意观察、研究、分析惯性在物体运动中的作用,掌握它的规律,作为我们设计动作的依据。 当然,动画片在表现物体的惯性运动时,不能只是按照肉眼观察到的一些现象,进行简单的模拟。应该根据这些规律,充分发挥自己的想象力,运用动画片夸张变形的手法,取得更为强烈的效果。例如:汽车快速行驶时,突然刹车,由于轮胎与地面的摩擦力,以及车身继续向前惯性运动而造成的挤压力,会使轮胎变为椭圆形,变形比较明显;车身由于惯性,虽然也略微向前倾斜,但变形并不明显。为了造成急刹车的强烈效果,我们在设计动画时,不仅要夸张表现轮胎变形的幅度,还要夸张表现车身变形的幅度,并且要让汽车向前滑行一小段距离,才完全停下来,恢复到正常状态。又如:飞刀插入木板,刀的前端由于木板的阻力而突然停止,后端由于惯性仍然继续向前运动,因此造成挤压变形。由于刀是钢制的,变形极不明显,但我们在表现这一动作时,也可以加以夸张。动物在奔跑中突然停步,身体也会由于惯性向前倾斜,有时要顺势翻一个筋斗,有时要滑行一小段距离,才能完全停下来。 我们在运用夸张变形的手法表现物体的惯性运动时,必须掌握好动作的速度与节奏。速度越快,惯性越大,夸张变形的幅度也越大。另外,由于变形只是出现在一霎那间,所以只要拍几个片格,就应迅速恢复到正常状态。 第三章 弹性运动 弹性运动 皮球从空中落下,碰到地面马上就会弹起来。皮球为什么会从地面上弹起来呢? 物理学告诉我们:物体在受到力的作用时,它的形态和体积会发生改变,这种改变,在物理学中称为“形变”。物体在发生形变时,会产生弹力,形变消失时,弹力也随之消失。 皮球落在地面上,由于自身的重力与地面的反作用力,使皮球发生形变,产生弹力,因此,皮球就从地面上弹了起来。皮球运动到一定高度,由于地心引力,皮球落回地面,再发生形变,又弹了起来。 皮球受力后会发生形变,产生弹力,那么其它物体受力后,是否也会发生形变,产生弹力呢?答案是肯定的,物理学的研究已经表明:任何物体在受到任意小的力的作用时,都会发生形变,不发生形变的物体是不存在的。 当然,由于物体的质地不同,受到的作用力的大小也不一样,所发生的形变大小也不一样,产生的弹力大小也不一样。有的物体形变比较明显,产生的弹力较大;有的物体形变不明显,产生的弹力较小,不容易为肉眼所察觉。 皮球是用橡皮做的,质地较软,里面又充足了气体,因此在受力后发生的形变明显,产生的弹力大,所以弹得很高,并可以连续弹跳多次;如果是实心的木棒,它受力后所发生的形变和产生的弹力都很小;如果是铅球,它的形变和弹力就更小,几乎难以感觉到了。 既然物理学已经证明任何物体都会发生形变,那么在动画片中,对于形变不明显的物体,我们也可以根据剧情或影片风格的需要,运用夸张变形的手法,表现其弹性运动。 如同表现惯性运动一样,我们在表现弹性运动时,也必须掌握好速度与节奏,否则就不能达到预期的效果。 由于每部动画片的内容和风格样式不同,所以无论是表现惯性运动或弹性运动,其夸张变形的幅度大小也是不一样的。例如:同样是表现汽车的急刹车,其夸张变形的幅度在漫画风格的动画片中就比在其它风格的动画片中要大得多。 第四章 曲线运动 曲线运动 生活中存在着大量的曲线运动,例如:大炮射出的炮弹的抛物体运动,人造卫星围绕地球的圆周运动等,都是最简单的曲线运动。 按照物理学的解释,曲线运动是由于物体在运动中受到与它的速度方向成一定角度的力的作用而形成的。动画片动作中关于曲线运动的概念,与物理学中所描述的曲线运动虽不万全相同,但物理学中阐述的这一原理,同样可以帮助我们理解动画片动作中曲线运动的某些规律。 动画片动作中的曲线运动,大致可归纳为三种类型: 1. 弧形运动 2. 波形运动 3. “s”形运动 其中,弧形运动比较简单,所以有时不能把它列入曲线运动的范畴,波形运动和“s”形运动比较复杂,是研究动画片动作中曲线运动的主要内容。 曲线运动是动画片绘制工作中经常运用的一种运动规律,它能使人物或动物的动作以及自然形态的运动产生柔和、圆滑、优美的韵律感,并能帮助我们表现各种细长、轻薄、柔软及富有韧性和弹性的物体的质感。 下面,我们分别讲述这三种类型曲线运动的基本规律。 1.弧形曲线运动 凡物体的运动路线呈弧线的,称为弧形曲线运动。例如:用力抛出的球、手榴弹以及大炮射出的炮弹等,由于受到重力及空气阻力的作用,被迫不断改变其运动方向,它们不是沿一条直线,而是沿一条弧线(即抛物线)向前运动的。 表现弧线曲线(抛物线)运动的方法很简单,只要注意抛物线弧度大小的前后变化并掌握好运动过程中的加减速度即可。 另一种弧形曲线运动是指某些物体的一端固定在一个位置上,当它受到力的作用时,其运动路线也是弧形的曲线。例如:人的四肢的一端是固定的,因此四肢摆动时,手和脚的运动路线呈弧形曲线而不是直线。又如:韧性较好的草或细长的树枝在被风吹拂时,会呈现弧形曲线运动,也有可能同时呈现波形和“s”形曲线运动。 2.波形曲线运动 比较柔软的物体在受到力的作用时,其运动 路线呈波形,称为波形曲线运动。 在物理学中,把振动的传播过程,称为波。例如,把一根具有一定弹性的绳索一端固定,用手拿着另一端向上抖动一下,就会看到一个凸起的波形沿者绳索传播过去,这就是最简单的波。当用不断地将绳索一端上下振动时,就会看到一个接一个凸起凹下的波形沿绳索传播过去,这就是一般的波动过程。 我们将轻薄而柔软的物体的一端固定在一个位置上,当它受到力的作用时,其运动规律就是顺着力的方向,从固定一端渐渐推移到另一端,形成一浪接一浪的波形曲线运动。例如,旗杆上的彩旗或束在身上的绸带等,在受到风力的作用时,就会呈现波形曲线运动,海浪和麦浪也是波形曲线运动。 有些鸟(海鸥、老鹰等)的翅膀比较长,它们的翅膀在上下扇动时,就是呈“s”形曲线运动。 另外,还有一种螺旋形的曲线运动,如体操运动员手中旋转挥舞的彩稠。 以上所讲的,只是曲线运动中一些基本规律。在实际工作中,常常会遇到一些运动路线比较复杂的物体,既有波形曲线运动,又有“s”形或螺旋形曲线运动。例如,旗帜或绸带迎风飘扬就不仅仅是波形曲线运动,常常穿插着“s”形曲线运动;龙在空中飞舞,金鱼尾巴在水中摆动,也都是比较复杂的曲线运动。因此,我们在理解了这些基本规律以后,还必须在实际工作中加以组合和变化,并灵活运用,才能取得生动逼真的效果。 在表现波形曲线运动时,必须注意顺着力的方向,一波接一波地顺序推进,不可中途改变。同时还应注意速度的变化,使动作顺畅圆滑,造成有节奏的韵律感,波形的大小也应有所变化,才不致显得呆板。 此外,细长的物体在波形运动时,其尾端质点的运动路线往往是“s”形曲线,而不是弧形曲线。 3.“s”形曲线运动 “s”形曲线运动的特点,一是物体本身在运动中呈“s”形,二是其尾端质点的运动路线也呈“s”形。 最典型的“s”曲线运动,是动物的长尾巴(如松鼠、马、猫虎等)在甩动时所呈现的运动。尾巴甩过去,是一个“s”形;甩过来,又是一个相反的“s”形。当尾巴来回摆动时,正反两个“s”形就连接成一个“8”字形运动路线。

作者: jzhihui    时间: 2005-8-20 08:52
flash action 详解

flash action 详解 第 1 章: 代码格式及规范 Actions cript 的每行语句都以分号 ";" 结束. 不同于 BASIC 语言, Actions cript 语句同 C++, Java, Pascal 一样允许分多行书写, 即允许将一条很的长语句分割成两个或更多代码行, 只要在结尾有个分号就行了. 允许语句分行书写的唯一缺点是(至少对许多熟悉 BASIC 的人而言): 语句末尾不能忘记加分号. 语句分行唯一的限制是字符串不能跨行, 即两个分号必须在同一行. 分行书写长语句也是一个很好的排版办法, 例如下面的语句段(目前你不需理解下面的语句是什么意思, 在双斜杠后面是注释): duplicateMovieClip( "MyOldMovieClip", //旧的 MovieClip 实例名 "MyNewMovieClip", 999 ); //新复制的实例名和所在层次 setProperty( "MyNewMovieClipNameIsNewMC", //要修改其属性的 MovieClip 实例名 _alpha, "30"); //修改其透明度为 30% 但是在 Flash MX 中似乎自动格式化功能不是很完善. 上面的代码可以运行通过, 但在使用自动格式化时会出错. 问题就在于插入其间的注释语句. 毕竟上面我写的例子并不是很好地符合 Flash MX 的语法规范(但按照 C 语言的语法来看是绝对没问题的), 所以请记住: 只有在语句很长或是很复杂的情况下才使用多行书写. -------------------------------------------------------------------------------- 一个好的程序员会懂得在程序代码中加入注释. 但也许你会说: 没关系, 我知道我写的是什么. 但是假如你是在 1 个月后再读这段代码呢? 很明显, 你记不住. 所以多打几个字又有什么麻烦的? 给 Actions cript 代码加注释使用下面格式: statements; //这是单行注释, 由双斜杠开头,这行的后面部份都是注释内容 statements; /* 这也是注释只不过可以换行 */ 就这么简单(却又十分有用). 注意 /* 和 */ 已经不建议使用了(因为必须配对, 所以经常会导致错误). -------------------------------------------------------------------------------- 除了注释, 增加代码可读性的另一途径是使用代码排版格式. 下面是一段具有高可读性的代码: //计算 x 阶乘的函数 function f(x) { if (x<=0) { //假如 x 小于等于 0 return 1; //返回 1 } else { return x*f(x-1); //否则返回阶乘结果 } } Flash MX 之前版本必须由程序员自行编排代码格式, 而 Flash MX 的 Action 面板多了一个 Auto Format (自动格式化)按钮 , 可以用它来自动格式化代码(同时也会进行语法检查, 相当方便). 格式化的选项可以在 Action 面板弹出菜单的 Auto Format Options 项对应的对话框中设置. 下面是对 Actions 面板的一点介绍: 语法着色和代码提示语法着色(Syntax Hightlighting)是许多编程语言的 IDE (集成开发环境)所具备的功能. Flash 也具有这项功能. 语法着色的颜色可以在 Action 面板弹出菜单的 Preferences... 项对应的对话框中设置. 对此, 没什么好详细解说的. 只是希望大家能利用语法着色来发现错误和阅读代码. Flash MX 新增加的代码提示功能(Code Hints)对于熟悉 Visual Studio 6.0+ 版本的读者而言并不陌生. 例如在输入了一个对象名后再输入".", 就会显示相关的属性和方法列表; 在输入了函数名后输入"(", 就会显示相关的函数格式. 具体的可在输入代码时自己体会. 语法规范 关键字关键字是任何一种语言程序的基本构造单位. 它是程序语言的保留字(Reserved Words), 不能被作为其它用途(不能作为自定义的变量, 函数, 对象名). Flash 的 Actions cript 中关键字不是很多, 下面的它们的列表: Flash MX Actions cript 的关键字 break 跳出循环体 instanceof 返回对象所属的类(Class) case 定义一个 switch 语句的条件选择语句块 new 使用构造函数(Constructor)创建一个新的对象 continue 跳到循环体的下一项目 return 在函数中返回值 default 定义 switch 语句的默认语句块 switch 定义一个多条件选择语句块 delete 清除指定对象占用的内存资源 this 引用当前代码所在的对象 else 定义 if 语句返回为假时的语句块 typeof 返回对象的类型 for 定义一个循环 var 声明一个本地变量(Local Variable) function 定义一个函数语句块 void 声明返回值类型不确定 if 定义一个条件语句块 while 定义一个条件循环语句块 in 在一个对象或元素数组中创建循环 with 定义一个对指定对象进行操作的语句块 列出这些并不是要求你像背单词一样把它们背下来(这也是为什么中国的教育质量这么差的原因), 只是希望大家记住: 在 Flash 中有一些作为关键字的单词是不能随意使用的. 这在分析错误的时候是很有用的(特别对于初学者). 语法规范---大小写敏感同 C++ 和 Java 一样, Actions cript 是区分大小写的. 这就意味着: If 并不等于 if. 假如在代码中使用了 If, 在运行和检查时都会产生错误. 避免这种情况发生其实很简单: 多注意一下输入的代码是否自动地被语法着色了(Syntax Hightlighting). 但是对于变量(Variable), 实例名(Instance Name)和帧标签(Frame Label), Actions cript 是不区分大小写的. 尽管如此, 我还是建议大家在书写代码时保持大小写一致. 这是个很好的习惯. 语法规范---运算符除了关键字, 程序语言中最重要的组成部分就是运算符. 先不要说我死板, 因为不了解这些东西, 你什么也做不成. 下面是运算符的列表, 运算符的优先级(即几个运算符出现在同一表达式中时先运算哪一个)从上到下递减: 运算符 描述 + 一元(Unary)加 - 一元(Unary)减 ~ 按位(Bitwise)逻辑非 ! 逻辑非(NOT) not 逻辑非 (Flash 4 格式) ++ 后期(Post)递加 -- 后期(Post)递减 ( ) 函数调用 [ ] 数组(Array)元素 . 结构(Structure)成员 ++ 先期(Pre)递加 -- 先期(Pre)递减 new 创建对象 delete 删除对象 typeof 获得对象类型 void 返回未定义值 * 乘 / 除 % 求模(除法的余数) + 加 add 字符串(String)连接 (过去的&) - 减 << 按位左移 >> 按位右移 >>> 按位右移 (无符号 unsigned, 以 0 填充) < 小于 <= 小于或等于 > 大于 >= 大于或等于 lt 小于 (字符串使用) le 小于或等于 (字符串使用) gt 大于 (字符串使用) ge 大于或等于 (字符串使用) == 等于 != 不等于 eq 等于(字符串使用) ne 不等于 (字符串使用) & 按位(Bitwise)逻辑和(AND) ^ 按位逻辑异或(XOR) | 按位逻辑或(OR) && 逻辑和(AND) and 逻辑和 AND (Flash 4) || 逻辑或 OR or 逻辑或 OR (Flash 4) ?: 条件 = 赋值 *= /= %= += -= &= |= ^= <<= >>= >>>= 复合赋值运算 , 多重运算

作者: jzhihui    时间: 2005-8-20 08:54
对于运算符的使用, 也有一些要注意的地方. 例如 and 和 or, 虽然对于效率而言与 && 和 || 没什么至关重要的区别, 但如果你过去使用过 BASIC, 你肯定会选择前者的表示方式; 假如你过去是使用 C++ 或是 Java 的, 那么你就会倾向于使用后一种方法. 就我个人的观点, 为了使代码具有高可读性, 初学者还是应该使用意思明了的 and 和 or. 特别是像 ?: 这类极其简化的运算符, 初学者更难以阅读. 例如下面代码: x = 5; y = 10; z = (x < 6) ? x: y; //如果 x 小于 6, 就把 x 的值赋给 z, 否则将 y 的值赋给 z trace (z); //返回 5 从上例开始, 本教程中的所有范例代码都可以复制粘贴到新建的 Flash 动画的第一帧的 Action 里. 然后通过 Control 菜单的 Test Movie 项或是按下组合键 CTRL+ENTER 运行它. 这样你就可以看看这些代码有什么实际效果了. 当然你也可以试着改动这些代码, 通过改动的效果来理解教程的内容. 就不如下面的代码易于理解(尽管很冗繁): x = 5; y = 10; if(x < 6){ //如果 x 小于 6, 就把 x 的值赋给 z, 否则将 y 的值赋给 z z = x; } else { z = y; } trace (z); //返回 5 语法规范---常量常量是在程序运行中不会改变的量. 例如数值 1,2,3..., 逻辑值 true, false 等等. 另外还有一些系统内建的常量, 具体的可以看帮助文件的内容. 语法规范---表达式在 Actions cript 中最常见的语句就是表达式, 它通常由变量名, 运算符及常量组成. 下面是一个简单的表达式: x = 0; 左边是变量名(x), 中间是运算符(赋值运算符 "="), 右边是常量(数值 0). 这就是一个非常简单的赋值表达式. 由这个表达式我们可以声明(Declare)一个变量, 为下一步操作做准备. 表达式又分为赋值表达式, 算术表达式和逻辑表达式. 赋值表达式上面已经说明了, 就是给变量一个值. 算术表达式顾名思义就是做数学运算的表达式, 例如: 1+3 (返回值为数值 4). 逻辑表达式就是做逻辑运算的表达式, 例如: 1>3. 只不过逻辑表达式返回的是逻辑值而已. 前面的 1>3 返回值为 false, 即 1 大于 3 为假. 将多个表达式组合在一起就可以组成复合表达式, 一般我们用到的也是这种表达式. 例如: t = 3*3+(2+3); x = 1>3; 上面的第二行是一个逻辑-赋值复合表达式. 首先 Flash 计算逻辑表达式 1>3 的值(false), 然后将该值赋给 x (即 x = false. 对于复合表达式的运算顺序可以参考上面的运算符表. 要改变运算顺序可以使用圆括号(例子的第一行), 这是同其它语言一致的. 这一章就到此为止. 在下一章中, 我们将详细讨论 Flash 中的数据类型及变量的使用第 2 章: 变量及数据类型---变量---定义变量变量是什么? 大概说来就是存放信息的容器(更确切的说是指向内存空间中某个存贮位置的指针, 不过能够理解就行了, 何必去记这么抽象的定义). 只要能够理解它可以存放信息并可以通过各种途径改变其中的信息就可以了, 我又不是大学里面的老师, 整天就知道叫学生死记硬背定义, 实际的东西一点都没有, "一切为了考试". 还有一个概念: 什么叫初始化变量? 就是在定义时给它一个有效值以说明它的内容和数据类型. 就像下面的例子, 定义了一个字符串(String)变量: MyString = "我不懂什么是初始化变量"; 就这么简单, 但是也有要注意的问题: 变量名必须为有效的标识符(例如不能以数字和不允许使用的字符开头). 变量名不能与 Actions cript 关键字和常量相似或相同. 变量名在它的作用域(Scope)中必须是唯一的(在下面我们会提到什么是作用域). 变量作用域也就是变量在什么范围内是可以访问的. 就好像在 C&C: Renegade 中的任务一样, 没有 Security Level 3 的 ID Card 就进不了安全级别为 3 的区域的. 作用域一般说来有三种: 时间线(Timeline), 局部(Local), 全局(Global). -------------------------------------------------------------------------------- 对于时间线范围的变量, 就像上面的例子一样用 = 赋值并声明, 当然你也可以用 set 动作(Flash 4, 不推荐使用的方法, 除非你觉得代码不够长): set( MyString, "我不懂什么是初始化变量" ); 时间线范围变量声明后, 在声明它的整个层级(Level)的时间线内它是可访问的. -------------------------------------------------------------------------------- 什么是局部变量? 我也常常问自己. 局部变量就是在声明它的语句块内(例如一个函数体)是可访问的变量, 通常是为避免冲突和节省内存占用而使用. 声明它可以使用 var 关键字: function LocalVar(){ var MyLocalString = "这是一个局部字符串变量"; trace( "Inside: " + MyLocalString ); } LocalVar(); trace( "Outside: " + MyLocalString ); 上面的 MyLocalString 字符串变量在函数尾就会被自动清除出内存. 所以在外面的 trace 语句返回结果为空("Outside:"), 而函数体内的 trace 返回:"Inside: 这是一个局部字符串变量". 假如你删除了 var 关键字, 那么 MyLocalString 就成时间线范围的变量了. 运行后显示 Inside 和 Outside 都为 "这是一个局部字符串变量". 在后面的函数一章我们还会提到局部变量的内容. 也许你注意到了函数中有一个 trace 动作. 它可以在测试模式(Testing Movie, CTRL+ENTER 组合键)下把指定变量的值发送到输出窗口(Output Window), 以便在运行时检查处理变量的代码是否正常. 这是一个非常方便的检查方法, 在测试代码时经常使用. 在代码中如果遇到有不清楚的函数和关键字, 可以通过 Action 面板的参考按钮(Reference)打开参考面板显示光标所在位置关键字或内建函数以及对象的详细信息, 也可以通过组合键 SHIFT+F1 打开它. 下面是参考面板: 全局变量, 顾名思义就是在整个 Movie 中都可以访问的变量. 它的声明比较特殊: _global.MyGlobalString = "这是一个全局字符串变量"; 声明使用了一个 _global 标识符和点语法(Dot Syntax, 将在后面的章节讨论). _global 标识符是在 Flash 6 中新增加的, 用于创建全局变量, 函数, 对象和类(Class, 不清楚类是什么的话可以看看 C++ 的书). 总的来说 _global 是一个与最底层 _level0 并列的对象. 所有的全局变量, 函数, 对象其实就相当于是它的属性, 方法, 子对象. 关于它的具体内容可以查阅帮助文件, 一般我们只要懂得用就行了. 全局变量会被同名的时间线变量和局部变量屏蔽(Obscured), 这时我们就要通过别的方式来访问它了. 看看下面的例子: //定义全局变量 _global.x = "Global"; //一个简单的函数 function show() { trace("没有局部变量时函数内: "+x); var x = "Local"; trace("有局部变量时函数内: "+x); trace("有局部变量时调用时间线变量: "+this.x); } //测试 trace("------没有时间线范围变量时------"); show(); trace("直接调用: "+x); //设置时间线变量 x = "Timeline"; //测试 trace("-------有时间线范围变量时-------"); show(); trace("直接调用: "+x); trace("有时间线范围变量时调用全局变量: "+_global.x); 由上例的结果可以看出, 在当前时间线范围内有和全局变量同名的变量时, 直接通过变量名只能访问时间线范围内的同名变量, 这时应该用 _global.变量名 来调用全局变量. 同样局部变量也会屏蔽时间线变量(这时可以用 this.变量名 来调用时间线变量)和全局变量(这时可以用 _global.变量名 来调用全局变量). 在代码中使用变量使用变量很简单, 有点编程基础的读者都可以办到. 下面用一个例子来说明在 Actions cript 中变量的使用: function vars(x){ if(x<5){ //如果 x 小于 1 x = x + 1; //x 加 1 } else { x = 10; //否则赋值 10 } trace("x="+x); return x; } vars(2); vars(6); trace("x="+x); //测试 x 是否为局部变量函数声明中的参数无需加 var 声明也自动作为局部变量(例如上面例子中的 x). 通过上面例子的最后一句就可以看出来(返回值为空). 我们可以看到, 上面定义的函数中对局部变量 x (在函数参数中声明)进行了 4 种操作: 赋值: 就是改变变量所存贮的内容. 运算: 使用运算符运算并返回结果. 上例中的 x = x + 1 可视为一个运算操作(x + 1)和一个赋值操作(x = ...)的复合语句. 对于逻辑运算(上面 if 语句的条件), 返回的为逻辑值 true 或 false(就像 x<5 在 x 为 4 时会返回 true). 函数及命令调用: 就如上面 trace("x="+x); 中的一样, x 是被作为参数传递给函数的, 它代表的是它所存贮的实际内容(在 return x; 中也一样). 在 Actions cript 中变量的使用具有很大的灵活性, 下面我们将会针对不同的数据类型进行讲解. 常见数据类型---字符串 | String 一个字符串就是一系列的字符, 例如 "This" 就是一个字符串. 定义一个字符串变量很简单, 只要在初始化时将一个字符串数据赋给它就行了: chapter = "第 2 章"; section = "第 2 节"; section_name = "常见数据类型"; full_name = section + " " add section_name + 999; //连接字符串 if(typeof(full_name) ne "string"){ full_name = "类型错误!"; } trace("full_name=" + full_name); 上面的第 4 行的 full_name 的值是前面两个变量(section 和 section_name)和一个常量(999)的运算结果(使用了 + 和 add 运算符, 它们的功能是相同的). 请注意, 这行代码最后面的数值常量 999 不是同一类型的数据, 如果在 Pascal 这种数据类型检查极其严格的语言中这行代码是错误的. 但是 Actions cript 可以自动将它转换为字符串格式, 而不需要专门的函数(当然, 最安全的方法是使用 Number 对象的 toString() 函数或是 String() 函数). 由此可见, Actions cript 是一种弱类型检查的语言(即不严格限制各种数据类型间的运算和传递), 这和 VB 倒是有点相似, 只不过更过分一点. 在后面我用了一个 if 语句来测试后面加上 999 的代码是否运行正常(即检查表达式返回的值是否为字符串, 尽管在实际中并没有这个必要). 注意我用的是字符串类型专用的逻辑运算符 ne, 当然这只是为了表现字符串数据类型的特殊性, 实际应用中用 != 也就可以了. 对于 typeof 操作符, 我们会在这一章的末尾详细讲解

作者: jzhihui    时间: 2005-8-20 08:56
对于运算符的使用, 也有一些要注意的地方. 例如 and 和 or, 虽然对于效率而言与 && 和 || 没什么至关重要的区别, 但如果你过去使用过 BASIC, 你肯定会选择前者的表示方式; 假如你过去是使用 C++ 或是 Java 的, 那么你就会倾向于使用后一种方法. 就我个人的观点, 为了使代码具有高可读性, 初学者还是应该使用意思明了的 and 和 or. 特别是像 ?: 这类极其简化的运算符, 初学者更难以阅读. 例如下面代码: x = 5; y = 10; z = (x < 6) ? x: y; //如果 x 小于 6, 就把 x 的值赋给 z, 否则将 y 的值赋给 z trace (z); //返回 5 从上例开始, 本教程中的所有范例代码都可以复制粘贴到新建的 Flash 动画的第一帧的 Action 里. 然后通过 Control 菜单的 Test Movie 项或是按下组合键 CTRL+ENTER 运行它. 这样你就可以看看这些代码有什么实际效果了. 当然你也可以试着改动这些代码, 通过改动的效果来理解教程的内容. 就不如下面的代码易于理解(尽管很冗繁): x = 5; y = 10; if(x < 6){ //如果 x 小于 6, 就把 x 的值赋给 z, 否则将 y 的值赋给 z z = x; } else { z = y; } trace (z); //返回 5 语法规范---常量常量是在程序运行中不会改变的量. 例如数值 1,2,3..., 逻辑值 true, false 等等. 另外还有一些系统内建的常量, 具体的可以看帮助文件的内容. 语法规范---表达式在 Actions cript 中最常见的语句就是表达式, 它通常由变量名, 运算符及常量组成. 下面是一个简单的表达式: x = 0; 左边是变量名(x), 中间是运算符(赋值运算符 "="), 右边是常量(数值 0). 这就是一个非常简单的赋值表达式. 由这个表达式我们可以声明(Declare)一个变量, 为下一步操作做准备. 表达式又分为赋值表达式, 算术表达式和逻辑表达式. 赋值表达式上面已经说明了, 就是给变量一个值. 算术表达式顾名思义就是做数学运算的表达式, 例如: 1+3 (返回值为数值 4). 逻辑表达式就是做逻辑运算的表达式, 例如: 1>3. 只不过逻辑表达式返回的是逻辑值而已. 前面的 1>3 返回值为 false, 即 1 大于 3 为假. 将多个表达式组合在一起就可以组成复合表达式, 一般我们用到的也是这种表达式. 例如: t = 3*3+(2+3); x = 1>3; 上面的第二行是一个逻辑-赋值复合表达式. 首先 Flash 计算逻辑表达式 1>3 的值(false), 然后将该值赋给 x (即 x = false. 对于复合表达式的运算顺序可以参考上面的运算符表. 要改变运算顺序可以使用圆括号(例子的第一行), 这是同其它语言一致的. 这一章就到此为止. 在下一章中, 我们将详细讨论 Flash 中的数据类型及变量的使用第 2 章: 变量及数据类型---变量---定义变量变量是什么? 大概说来就是存放信息的容器(更确切的说是指向内存空间中某个存贮位置的指针, 不过能够理解就行了, 何必去记这么抽象的定义). 只要能够理解它可以存放信息并可以通过各种途径改变其中的信息就可以了, 我又不是大学里面的老师, 整天就知道叫学生死记硬背定义, 实际的东西一点都没有, "一切为了考试". 还有一个概念: 什么叫初始化变量? 就是在定义时给它一个有效值以说明它的内容和数据类型. 就像下面的例子, 定义了一个字符串(String)变量: MyString = "我不懂什么是初始化变量"; 就这么简单, 但是也有要注意的问题: 变量名必须为有效的标识符(例如不能以数字和不允许使用的字符开头). 变量名不能与 Actions cript 关键字和常量相似或相同. 变量名在它的作用域(Scope)中必须是唯一的(在下面我们会提到什么是作用域). 变量作用域也就是变量在什么范围内是可以访问的. 就好像在 C&C: Renegade 中的任务一样, 没有 Security Level 3 的 ID Card 就进不了安全级别为 3 的区域的. 作用域一般说来有三种: 时间线(Timeline), 局部(Local), 全局(Global). -------------------------------------------------------------------------------- 对于时间线范围的变量, 就像上面的例子一样用 = 赋值并声明, 当然你也可以用 set 动作(Flash 4, 不推荐使用的方法, 除非你觉得代码不够长): set( MyString, "我不懂什么是初始化变量" ); 时间线范围变量声明后, 在声明它的整个层级(Level)的时间线内它是可访问的. -------------------------------------------------------------------------------- 什么是局部变量? 我也常常问自己. 局部变量就是在声明它的语句块内(例如一个函数体)是可访问的变量, 通常是为避免冲突和节省内存占用而使用. 声明它可以使用 var 关键字: function LocalVar(){ var MyLocalString = "这是一个局部字符串变量"; trace( "Inside: " + MyLocalString ); } LocalVar(); trace( "Outside: " + MyLocalString ); 上面的 MyLocalString 字符串变量在函数尾就会被自动清除出内存. 所以在外面的 trace 语句返回结果为空("Outside:"), 而函数体内的 trace 返回:"Inside: 这是一个局部字符串变量". 假如你删除了 var 关键字, 那么 MyLocalString 就成时间线范围的变量了. 运行后显示 Inside 和 Outside 都为 "这是一个局部字符串变量". 在后面的函数一章我们还会提到局部变量的内容. 也许你注意到了函数中有一个 trace 动作. 它可以在测试模式(Testing Movie, CTRL+ENTER 组合键)下把指定变量的值发送到输出窗口(Output Window), 以便在运行时检查处理变量的代码是否正常. 这是一个非常方便的检查方法, 在测试代码时经常使用. 在代码中如果遇到有不清楚的函数和关键字, 可以通过 Action 面板的参考按钮(Reference)打开参考面板显示光标所在位置关键字或内建函数以及对象的详细信息, 也可以通过组合键 SHIFT+F1 打开它. 下面是参考面板: 全局变量, 顾名思义就是在整个 Movie 中都可以访问的变量. 它的声明比较特殊: _global.MyGlobalString = "这是一个全局字符串变量"; 声明使用了一个 _global 标识符和点语法(Dot Syntax, 将在后面的章节讨论). _global 标识符是在 Flash 6 中新增加的, 用于创建全局变量, 函数, 对象和类(Class, 不清楚类是什么的话可以看看 C++ 的书). 总的来说 _global 是一个与最底层 _level0 并列的对象. 所有的全局变量, 函数, 对象其实就相当于是它的属性, 方法, 子对象. 关于它的具体内容可以查阅帮助文件, 一般我们只要懂得用就行了. 全局变量会被同名的时间线变量和局部变量屏蔽(Obscured), 这时我们就要通过别的方式来访问它了. 看看下面的例子: //定义全局变量 _global.x = "Global"; //一个简单的函数 function show() { trace("没有局部变量时函数内: "+x); var x = "Local"; trace("有局部变量时函数内: "+x); trace("有局部变量时调用时间线变量: "+this.x); } //测试 trace("------没有时间线范围变量时------"); show(); trace("直接调用: "+x); //设置时间线变量 x = "Timeline"; //测试 trace("-------有时间线范围变量时-------"); show(); trace("直接调用: "+x); trace("有时间线范围变量时调用全局变量: "+_global.x); 由上例的结果可以看出, 在当前时间线范围内有和全局变量同名的变量时, 直接通过变量名只能访问时间线范围内的同名变量, 这时应该用 _global.变量名 来调用全局变量. 同样局部变量也会屏蔽时间线变量(这时可以用 this.变量名 来调用时间线变量)和全局变量(这时可以用 _global.变量名 来调用全局变量). 在代码中使用变量使用变量很简单, 有点编程基础的读者都可以办到. 下面用一个例子来说明在 Actions cript 中变量的使用: function vars(x){ if(x<5){ //如果 x 小于 1 x = x + 1; //x 加 1 } else { x = 10; //否则赋值 10 } trace("x="+x); return x; } vars(2); vars(6); trace("x="+x); //测试 x 是否为局部变量函数声明中的参数无需加 var 声明也自动作为局部变量(例如上面例子中的 x). 通过上面例子的最后一句就可以看出来(返回值为空). 我们可以看到, 上面定义的函数中对局部变量 x (在函数参数中声明)进行了 4 种操作: 赋值: 就是改变变量所存贮的内容. 运算: 使用运算符运算并返回结果. 上例中的 x = x + 1 可视为一个运算操作(x + 1)和一个赋值操作(x = ...)的复合语句. 对于逻辑运算(上面 if 语句的条件), 返回的为逻辑值 true 或 false(就像 x<5 在 x 为 4 时会返回 true). 函数及命令调用: 就如上面 trace("x="+x); 中的一样, x 是被作为参数传递给函数的, 它代表的是它所存贮的实际内容(在 return x; 中也一样). 在 Actions cript 中变量的使用具有很大的灵活性, 下面我们将会针对不同的数据类型进行讲解. 常见数据类型---字符串 | String 一个字符串就是一系列的字符, 例如 "This" 就是一个字符串. 定义一个字符串变量很简单, 只要在初始化时将一个字符串数据赋给它就行了: chapter = "第 2 章"; section = "第 2 节"; section_name = "常见数据类型"; full_name = section + " " add section_name + 999; //连接字符串 if(typeof(full_name) ne "string"){ full_name = "类型错误!"; } trace("full_name=" + full_name); 上面的第 4 行的 full_name 的值是前面两个变量(section 和 section_name)和一个常量(999)的运算结果(使用了 + 和 add 运算符, 它们的功能是相同的). 请注意, 这行代码最后面的数值常量 999 不是同一类型的数据, 如果在 Pascal 这种数据类型检查极其严格的语言中这行代码是错误的. 但是 Actions cript 可以自动将它转换为字符串格式, 而不需要专门的函数(当然, 最安全的方法是使用 Number 对象的 toString() 函数或是 String() 函数). 由此可见, Actions cript 是一种弱类型检查的语言(即不严格限制各种数据类型间的运算和传递), 这和 VB 倒是有点相似, 只不过更过分一点. 在后面我用了一个 if 语句来测试后面加上 999 的代码是否运行正常(即检查表达式返回的值是否为字符串, 尽管在实际中并没有这个必要). 注意我用的是字符串类型专用的逻辑运算符 ne, 当然这只是为了表现字符串数据类型的特殊性, 实际应用中用 != 也就可以了. 对于 typeof 操作符, 我们会在这一章的末尾详细讲解

作者: jzhihui    时间: 2005-8-20 08:57
在实际应用中, 有一些特殊的字符不能直接输入在字符串中, 例如不能在字符串中直接输入引号(会破坏字符串的完整性). 这时我们就需要用到转义字符了(Escaping). 要使用转义字符, 首先要输入一个反斜杠(\), 然后输入相应的代码. 详细的代码列表如下: 转义字符 代表字符 \b 退格字符 (ASCII 8) \f 换页符 (ASCII 12) \n 换行符 (ASCII 10) \r 回车符 (ASCII 13) \t 制表符 (ASCII 9) \" 双引号字符 \' 单引号字符 \\ 反斜杠字符 \000 - \377 八进制表示的字符 \x00 - \xFF 十六进制表示的字符 \u0000 - \uFFFF 十六进制表示的 16 位 Unicode 字符 例如: trace("He said:\"I don\'t care about you.\"\nAnd she smiled:\"Really?\""); 你可以根据上面的对照列表读出上面代码的字符串内的实际内容. 运行后的输出为: He said:"I don't care about you." And she smiled:"Really?" 可以看到, 转义字符都被转换为相应的实际字符了. 这就是转义字符的作用, 学过 C++ 的读者应该很熟悉了. 数值 | Number Actions cript 中的数值型数据为双精度浮点数(不懂是什么意思也没关系, 反正知道是数值就行了, 那只不过是个范围限制). 对数值型数据可以进行任何相应操作. 如下例: a = 1; b = 2; sum = a + b; //求 a, b 之和 if(sum>0){ //假如结果大于 0 square_root = Math.sqrt(sum); //使用 Math 对象的平方根函数求 sum 的平方根 } trace("sum=" + sum); trace("square_root=" + square_root); 完. 逻辑变量 | Boolean 逻辑变量又被称为布尔变量(由其英文名称而来). 它只有两个值: true 和 false. 在必要的情况下, Actions cript 会自动将它的值转换为 1 和 0, 你也可以用 1 和 0 给它赋值(这是可能是为了和 Windows API 函数调用兼容而产生的). a = 10; b1 = 1; b2 = false; if(b1 == true){ a = a + b1; } else { b2 = !b2; } trace("a=" + a); trace("b1=" + b1); trace("b2=" + b2); 上面代码混合了数值型和逻辑型变量的运算. a = a + b1 将逻辑值 b1(true 即 1)加到 a 上, b2 = !b2 则是对 b2 取反(即由 false 变为 true 或是由 true 变为 false, 因为逻辑值只有两种情况: 真或假). 你可以试着修改一下 b1 的值来看看不同的效果. 对象 | Object 对象是 Actions cript 中的一个重要数据类型. 说得更清楚一些, 它就是现在大多数编程语言中的类(Class). 其实在 Flash 中使用的 MovieClip 其实也属于一种预定义的类, 只不过它有些特殊而已. 关于对象我们会在后面章节详细介绍影片 | Movieclip 影片是 Flash 中唯一用来引用图像元素的数据类型. 你可以通过 MovieClip 对象的各种属性(Property)和方法(Method)来操作它的实例(Instance). 关于影片我们也会在后面详细讲解空 | Null 空? 我是说"空", 也就是什么都没有. 这种数据类型就是这个意思, 而且它只有一个值: null. 那么它有什么用呢? 用来表示一个变量尚未赋值 用来表示一个变量已经不包含数据 用来表示一个函数没有返回值 用来表示一个函数的某个参数被省略了 不要认为它毫无意义, 在涉及到具体的程序问题时它是非常有用的. 定义 | Undefined 未定义类型同 Null 差不多, 也只有一个值: undefined. 它被用来表示一个变量尚未赋值. typeof 操作符 在实际应用中我们经常遇到需要判断具体变量和对象的数据类型的情况. Flash 提供了一个很好用的 typeof 来解决这个问题. 特别是对于自定义函数的设计, 确定参数的类型是非常重要的步骤. 参数类型 返回值(字符串) String string MovieClip movieclip Button object TextField object Number number Boolean boolean Object object Function function Undefined undefined Null null typeof 操作符的优先级很高, 可以在逻辑运算或是算术运算符之前被运算. 下面是它具体应用的例子: //常数的类型 trace("数值常数 36 的类型: "+typeof 26); trace("字符串常数 what 的类型: "+typeof "what"); //一般 typeof 操作符可以像 +, -, add 等操作符一样使用 //但为了避免出错还是建议你使用括号, 如下例 trace("逻辑常数 true 的类型: "+typeof(true)); //对象的类型 trace("对象 Object() 的类型: "+typeof (Object())); trace("new String() 的类型: "+typeof new String()); //注意 new 操作符优先级比 typeof 高 //函数的方法的类型取决于其返回值 trace("Math.sqrt() 方法的类型: "+typeof Math.sqrt()); trace("Math.toString() 方法的类型: "+typeof Math.toString()); //null 空类型 trace("null 的类型: "+typeof null); //在这里我用了多级 typeof 来看看 typeof 返回的值的类型 trace("typeof 返回值的类型: "+typeof (typeof null)); 你还可以自己试着改动一下代码, 看看其它东西的 typeof 是什么. 这一章就到此为止了, 下一章会比较现实一点(因为有人说前面这些东西根本没必要讲, 不切实际). 对于数据类型的对象性方面的内容将在对象部分中介绍第 3 章: 条件和循环--综述 Actions cript 的条件和循环语句有 if, else, else if, for, while, do...while, for...in 和 switch. 在 Flash 中它们被叫做流程控制动作(Action), 但实际上, 其实质与其它程序语言没什么不一样的. 因为条件和循环语句是程序语言中最基础的, 也是最具有实用价值的语句, 所以要在这里仔细讲解一下. 对于有 C++ 和 Java 等编程经验的读者随意浏览一下就可以了. 条件语if句--if 可以说是程序语言中最基本的条件判断语句. 无论在任何语言中都有它的身影. 由下面的例子可以了解它的格式: name = "SiC"; //下面是 if 语句 if(name == "SiC"){ trace("作者"); } if 语句通过判断其后圆括号内的逻辑表达式是否为 true 来确定是否执行大括号内的语句. 假如逻辑表达式 name == "SiC" 返回值为真, 就在输出窗口(Output Window)内显示"作者", 否则就不执行. 然后让我们设想一下下面例子的效果: if(1){ trace("总是执行"); } 如果你还记得前面数据类型的内容, 那么应该可以看出, 这时的 if 语句基本上是多余的, 因为对于常量 1, 逻辑表达式的值恒为 true(其实 1 就是逻辑值 true 的数值表示形式). 但对于常量 0, 则永远为 false. 你可以试试把上例中的 1 改成一个字符串常量(例如 "hi!")看看会有什么效果. 再看一个例子: name = "SiC"; //下面是 if 语句 if(name = "SiC"){ trace("作者"); } 比较一下看这个例子与第一个例子有什么不同? 不同之处就在于第一个用了 ==, 而这个用了 =. 对于这个例子, if 的判断永远为 true. 想想为什么? 问题就在于使用了赋值运算符 = 而不是逻辑运算符 ==. 对于赋值运算, 其返回的逻辑值总是 true. 这也是初学者常犯的错误. 一定要注意区分赋值运算符 = 和逻辑运算符 ==. 否则你会遇到一些莫名其妙的错误和问题, 而且语法检查也找不出错误(因为赋值运算表达式也是有效的条件表达式). 所以请记住, Actions cript 的相等逻辑运算符是 == 而不是 =. if...else 假如想要在判断条件不成立时执行另一项操作时怎么办? 很简单, 在 if 语句后面加上个 else 语句块就可以了: name = "未知"; //下面是 if...else 语句 if(name == "SiC"){ trace("作者"); } else { trace("未知"); } 很简单吧? 只要把在判断结果为假时要执行的语句放在 else 后的大括号里就行了. if...else if 如果要进行很多个条件判断怎么办? 也好办, 用 else if 解决: name = "Sam"; //下面是 if...else if 语句 if(name == "SiC"){ trace("作者"); } else if(name == "Flash MX") { trace("Flash MX 是软件名称."); } else if(name != "未知") { trace("谁是 " + name + "?"); } else { trace("未知"); } 你可以接任意多个的 else if 来进行多个条件的判断, 最后的 else 语句块可有可无(根据实际需要选用). 唯一不足的就是 else if 太多时执行速度较慢(在其它程序语言中也是一大问题). 这时就轮到 switch 出场了 switch switch switch 在 Visual Basic 里面是个很好用的命令. 它可以通过判断不同的条件表达式来执行不同操作. 但是在 Actions cript 中就没有那么大的弹性了. 因为 Actions cript 中 switch 的条件被固定为 ===, 即绝对等于(包括数据类型也要相同), 不像在 VB 中可以额外使用 >, >= 之类的条件运算符. 所以, else if 在需要判断大于小于之类的情况下还是大有用处的. 现在来看看下面的例子: mynumber = 3; //赋值给 mynumber //下面是 switch 语句 switch (mynumber) { case 1: trace ("这是我希望得到的数字."); break; case 2: trace ("这个数字比我的小一点."); break; case 3: trace ("这是我的数字."); break; default: trace ("这不是我要的数字.") } 上面的例子是一个完整的 switch 语句块. 在 case 关键字后面的就是需要满足的条件, 如果都不满足, ActionScipt 会查找是否存在 default 语句块, 如果存在, 则执行其中的语句. 另外, 你可能已经发现在每个语句块后都有一个 break 关键字, 为什么呢? 因为如果没有用 break 来跳出 switch 条件选择语句, 程序会继续向下搜索满足条件的 case 项目(包括 defualt 块)并执行其中的语句. 下面是一个修改后的例子: mynumber = 3; //赋值给 mynumber //下面是没有加 break 的 switch 语句 switch (mynumber) { case 1: trace ("这是我希望得到的数字."); case 2: trace ("这个数字比我的小一点."); case 3: trace ("这是我的数字."); default: trace ("这不是我要的数字.") } 运行一下这个例子, 你会发现会同时输出了 "这是我的数字" 和 "这不是我要的数字". 为什么? 因为没有了 break, 在运行了满足条件的 case 3: 语句块后, 条件选择语句仍会继续执行, 而 default 块作为默认条件, 它总是会被执行, 从而产生了这样的结果. 一些常见的程序错误也就由此而来. 在 Actions cript 中还有一个用于循环的 continue 命令, 它可以直接跳到所在循环的条件检测部分(即立即进行下一次循环的条件判断). 这个命令不常用到, 所以在这里没有讲解. . 循环语句--for 循环语句 for 对于 for 循环, 我想大多数读者都不会陌生. 下面是一个求 1 到 100 的自然数之和的程序段. var sum = 0; //下面是 for 循环 for (var i=1; i<=100; i++) { sum = sum + i; } trace ("sum="+sum); for 后面括号里面的内容分为三部分: 初始值; 循环条件; 循环值变化方式. 对于初始值没什么可说的, 随便取; 循环条件就是在什么条件下继续循环, 只要懂得逻辑表达式就可以了; 循环值的变化方式可以用任意的赋值语句来改变. 下面是一个修改后的例子: var sum = 0; //下面是 for 循环 for (var i=2; i<100; i+=2) { sum = sum + i; //trace(i); } trace("sum="+sum); 上例中我把初始值 i 改为了 2, 条件改为 <100 (即不包括 100), 循环值变成每次加 2. 运行后看看结果, 结果是 1 到 100 的开区间中所有双数之和. 如果不清楚循环内部的工作机理, 可以删除上例中 for 循环体内 //trace(i); 前的双斜杠, 运行代码时会在输出窗口中列出每次的 i 值. 那么如果初值不满足循环条件会怎样? 你可以把 i=2 改为 i=100 看看. 对应于 for 还有一个 for...in 循环, 这涉及到数组和对象的内容, 在后面会介绍 while & do...while while & do...while 说实在话, 对于一般的编程 while 用得不多. 但是在需要的时候你才会发现它的价值. while 循环在运行时遵循下面的步骤: 检查 while 后面括号内的条件是否成立. 如果条件成立, 运行语句块内的语句. 否则结束循环, 运行循环体后面的语句. 运行完语句块内的语句后回到第一步. n = 0; //下面是 while 循环 while(n < 5) { n++; } trace("n="+n); 上面的例子运行结果为 n=5. 当 n 小于 5 时循环的条件成立, 于是运行其中的 n++ (即 n 增加 1). 当 n 等于 5 时, 因为循环条件已经不成立, 所以中止循环, 执行后面的 trace 语句.
作者: jzhihui    时间: 2005-8-20 08:59
第 4 章: 函数---函数的基本概念 终于写完了数据类型和条件以及循环语句部分, 现在可以讲讲函数了. 函数是在程序中可以重复使用的代码. 你可以将需要处理的值或对象通过参数的形式传递给函数, 然后由函数得到结果. 从另一个角度说, 函数存在目的就是为了简化编程的负担, 减小代码量和提高效率. 而一个写得好的函数, 就像一个"黑箱", 你只要懂得调用它就行了, 而不用去关心它的具体功能是如何实现的创建自己的函数---函数定义(Definition) 要创建一个函数, 就需要有函数的定义. 对于 Actions cript, 就没有什么返回值类型, 形参实参之类的东西好讨论了. 下面是一个简单函数的定义: //计算矩形面积的函数 function areaOfBox(a, b) { return a*b; //在这里返回结果 } //测试函数 area = areaOfBox(3, 6); trace("area="+area); 现在来分析一下函数定义的结构. function 关键字说明这是一个函数定义, 而不是一段执行代码. 其后便是函数的名称: areaOfBox. 函数名后面的括号内是函数的参数列表(也可以没有参数, 但括号是必须要有的). 紧接着的大括号内是函数的实现代码, 即 Actions cript 语句. 如果函数需要返回值, 可以使用 return 关键字加上要返回的变量名, 表达式或常量名. 在一个函数中可以有多个 return 语句, 但无论何时, 只要执行了其中的任何一个 return 后, 函数便自行终止而不会继续执行下去. 如果没有 return 语句, 则在函数尾最后一个语句执行后结束. 因为 Actions cript 的特殊性, 函数的参数定义并不要求参数类型的声明, 即可以不指定参数类型. 这省去了很多麻烦, 也带来了一些问题. 虽然把上例中倒数第二行改为 area = areaOfBox("3", 6); 也同样可以得到 18 的结果, 但是这对程序的稳定性非常不利(假如函数里面用到了 a+b 的话, 就会变成字符串的连接运算, 结果自然会出错). 所以, 有时候在函数中类型检查是不可少的. 在函数体中参变量用来代表要操作的对象. 你在函数中对参变量的操作, 就是对传递给函数的参数的操作. 上例中的 a*b 在你调用函数时会被转化为参数的实际值 3*6 处理. -------------------------------------------------------------------------------- 函数还有一种创建方法, 叫做函数显式声明(function literal, 不是通过正式的函数声明而是在一个表达式内通过未命名的函数来进行声明): areaOfBox = function(a,b) {return a*b;}; trace("area="+areaOfBox(2,3)); 这种形式的声明经常用在对象的方法或是函数库的函数声明中. 在 Flash MX 的帮助中函数定义部分关于这种声明的范例代码有误, 请注意. -------------------------------------------------------------------------------- 上面是有返回值的函数, 在函数尾使用了 return 关键字来返回结果. 函数也可以不返回任何值. 如下例: //无返回值的函数 function areaOfBox(a, b) { _root.area = a*b; } //测试函数 areaOfBox(3, 6); trace("area="+_root.area); 它的结果也是 18, 只不过最后的结果是传递到 _root 下的指定变量 area 而已.下面一个例子更简单: //计算矩形面积的函数 function simpleFunc() { trace ("什么都没有"); //在这里返回结果 } //测试函数 simpleFunc(); 最后的输出就是 trace 中的字符串. 就是说, 函数可以既没有参数也没有返回值, 而是一系列操作的集合. 可见函数的使用具有很高的灵活性. -------------------------------------------------------------------------------- 同变量一样, 函数也可以具有全局性. 只要在声明时在前面给它加一个 _global 就可以了: //计算矩形面积的全局函数 _global.areaOfBox = function (a, b) { return a*b; //在这里返回结果 } //测试函数 area = areaOfBox(3, 6); trace("area="+area); 请注意: 在函数体中出现的关键字 this 代表的是调用函数的 MovieClip, 而不是函数体所在的 MovieClip. 这很容易被忽略而产生不期望的结果. 如果要指定 this 所代表的对象就要用到 Function.call() 和 Function.apply() 方法. 在后面的 arguments 对象介绍中会讲到. 函数参数的检查 为了保证函数运行的正确性, 我们有时必须检测用户是否给了足够的或是正确类型的参数. 下面是我对上面例子进行改动后的代码: //计算矩形面积的全局函数 _global.areaOfBox = function (a, b) { //输出两个参数之和, 用于理解下面的 typeof 语句 trace("a+b="+(a+b)); //检测参数是否足够且类型正确 if(a==undefined || b==undefined || typeof(a+b)!="number") { trace("<参数错误>"); return 0; //返回 0 作为错误时的结果 } return a*b; //在这里返回结果 } //测试函数 trace("----下面是正确的参数----"); area = areaOfBox(3, 6); trace("area="+area); trace("----下面是错误的参数----"); //这里为了节省篇幅, 我在命令中直接调用函数, 而不是先将返回值赋给一个变量 //其实这才是我们常用的函数调用方法 trace("area="+ areaOfBox(3, "6")); trace("----下面是不足的参数----"); trace("area="+areaOfBox(3)); 上例中我用 a==undefined 来判断 a 是否被赋值了(即是否已定义, 对于 undefined 数据类型的内容请参阅前一章的内容). 为了确保万无一失, 我还用了 b==undefined 来保证 b 也已被赋值, 中间使用一个逻辑 "或" 运算符 || 来连接这两个条件. 此外, 在这两个条件后面我又通过 typeof(a+b)!="number" 来确认参数类型是否正确(关于 typeof 关键字的信息请参考前一章). 这里我利用了 Actions cript 的一个特点: 数值与字符串相加的和会被优先做为字符串处理. 所以 a+b 中只要有一个为字符串, 那么整个 a+b 的返回值就是一个字符串, 在后面通过 typeof 来检测的结果自然就不是我们所要的 "number". 通过 trace("a+b="+(a+b)); 输出的结果可以看出这一点. -------------------------------------------------------------------------------- 在 Actions cript 中除了用户定义的函数外, 还有预定义的内建函数. 对于不同的对象, 也有不同的函数(或者说是方法)可以调用. 下面是拥有最高优先级的系统内建函数列表: 函数 说明 Boolean 将所给参数值转化为逻辑值(也叫做布尔值) escape 将所给参数转化为字符串并用 URL 格式编码(所有非标准字符将被转化为以 % 开头的十六进制值) eval 返回所给参数表示的对象, 参数可以是常量, 表达式, 属性等(这在 DuplicateMovieClip 时经常用到) getProperty 返回指定对象的指定属性值 getTimer 返回从动画开始运行到当前所经过的毫秒数 getVersion 返回 Flash 版本和操作系统信息 isFinite 返回所给参数是否是有穷的(逻辑型返回值) //创建新对象 object_1 = new Object(); object_1.value = 0; //为对象加入 value 属性并给予初值 0 object_2 = object_1; //由 object_1 复制出一个 object_2, 此时两者的 value 属性均为 0 //测试函数 areaOfBox.call(object_1, 3, 6); trace("object_1.value="+object_1.value); array_ab = [4, 5]; //创建参数数组 areaOfBox.apply(object_2, array_ab); trace("object_2.value="+object_2.value); 为什么要通过 call 和 apply 来调用函数? 这样不比前面的直接调用麻烦吗? 的确, 这样调用函数比较麻烦, 但你注意到了我使用的第一个参数没有? 通过第一个参数可以指定在函数体中的 this 关键字代表什么对象, 这就是用 call 和 apply 的好处(关于对象和 this 的内容在后面章节中才会提到, 在这里暂且不提). 这个好处只有在实际的编程中你才能体会得到, 这里只是简要介绍一下, 让你有个基本的概念. 如果函数中没有使用 this 关键字, 第一个参数要用 null 代替. 在本例中第一个返回值被放入 object_1 的 value 属性中, 另一个会被放入 object_2 的 value 属性中. 通过 call 和 apply 的第一个参数我们让函数体中的 this 先后代表了 object_1 和 object_2 两个对象. 第一个参数后面的实际参数的给予完全依照要调用函数的参数个数和类型确定. 至于 call 与 apply 的不同之处上面已经表示得很明白了: apply 的实际参数是通过数组传递的. arguments 对象 arguments 对象 arguments 对象, 顾名思义就是参数对象, 它包含的是函数调用的参数. 作为一个数组对象, 它只有三个属性: 属性 描述 arguments.callee 正被调用的函数 arguments.caller 正在进行此调用的函数 arguments.length 传递给被调用函数的参数数目
作者: jzhihui    时间: 2005-8-20 09:02
一个精美的FLASH。。。大家请欣赏。


点击就可观看了。。。。不看别后悔!:D:D:D


Flash: http://games.tom.com/script/minigame/20030925_Redyan.swf

[ Last edited by jzhihui on 2005-10-23 at 15:38 ]

[ 本帖最后由 jzhihui 于 2005-12-6 18:25 编辑 ]
作者: magx    时间: 2005-8-22 08:36
支持!
作者: 壮志豪情    时间: 2006-1-7 10:47
http://www.ebook99.com/dn_bc.htm


http://www.ebook99.com/dn.htm


CHM电子书制作工具 PowerCHM 5.3 Build 0301绿色免安装版
http://bbs.macd.cn/viewthread.php?tid=902586&extra=page%3D1

【分享】密码破解工具全集
http://bbs.macd.cn/viewthread.php?tid=796566&extra=page%3D1

清空全部内存(注意啦 只有5K) - 空前绝后 赞誉不止
http://bbs.macd.cn/viewthread.php?tid=872545&extra=page%3D1

电脑修理工 1.3
http://bbs.macd.cn/viewthread.php?tid=903570&extra=page%3D1

Microsoft Office技巧1000例(绿色)
http://bbs.macd.cn/viewthread.php?tid=879042&extra=page%3D1

最全的办公文档格式全集 包括300多种
http://bbs.macd.cn/viewthread.php?tid=903636&extra=page%3D1

右脑学习法电子书珍藏版
http://bbs.macd.cn/viewthread.php?tid=707292&extra=page%3D1

1500篇电脑教程资料,值得收藏。
http://bbs.macd.cn/viewthread.php?tid=842181&extra=page%3D1

网博士-您的知识管理专家 3.00 Beta3(Build211)
http://bbs.macd.cn/viewthread.php?tid=903566&extra=page%3D1

汽车驾驶视频教程高速下载(难得的哦!)
http://bbs.macd.cn/viewthread.php?tid=870811&extra=page%3D1

UltraEdit-32 V11.20+5 绿色汉化版
http://bbs.macd.cn/viewthread.php?tid=831371&extra=page%3D2

67款绿色软件
http://bbs.macd.cn/viewthread.php?tid=900562&extra=page%3D2

告诉你60个经典的电脑使用技巧
http://bbs.macd.cn/viewthread.php?tid=897985&extra=page%3D2

精彩下载~有了它,在公司里办公所向无敌!03-12更新~
http://bbs.macd.cn/viewthread.php?tid=794599&extra=page%3D3

一个提取图标的小软件( FREE)
http://bbs.macd.cn/viewthread.php?tid=903123&extra=page%3D3

[ 本帖最后由 壮志豪情 于 2006-3-21 23:13 编辑 ]
作者: quobit    时间: 2006-1-7 19:36
不用也顶
作者: 壮志豪情    时间: 2006-3-11 14:15
原帖由 jzhihui 于 2005-7-25 05:58 发表
:D

作者: hxldc    时间: 2006-4-4 21:56
标题:

作者: nguyen    时间: 2006-4-7 23:24
谢谢提供
作者: adqadqan    时间: 2006-6-20 17:06
好书。
作者: mingyi789    时间: 2006-6-23 11:12
dddddddddddddddd
作者: 江南风景    时间: 2006-11-8 23:07
Thanks!
作者: 江南风景    时间: 2006-11-8 23:14
真是不错,支持。
作者: 独孤一苇    时间: 2006-11-11 19:24
精神可嘉!!!
作者: jzhihui    时间: 2006-11-12 09:46
【PS教程】彩色半调-边框
作者: jzhihui    时间: 2006-11-12 09:47
【PS教程】刮风字效果
作者: jzhihui    时间: 2006-11-12 09:48
【PS教程】不知名小花制作.gif
作者: jzhihui    时间: 2006-11-12 09:49
【PS教程】边框XX.gif
作者: jzhihui    时间: 2006-11-12 09:51
历史记录磨皮
作者: jzhihui    时间: 2006-11-12 09:52
【PS教程】边框小4角
作者: jzhihui    时间: 2006-11-12 09:53
【PS教程】缺憾美艺术边框.gif
作者: jzhihui    时间: 2006-11-12 09:53
【PS教程】从抽丝图中抠字
作者: jzhihui    时间: 2006-11-12 09:54
【PS教程】金属质感字.jpg
作者: jzhihui    时间: 2006-11-12 09:56
【PS教程】类似抽丝的效果
作者: jzhihui    时间: 2006-11-12 09:57
【PS教程】晶莹碎碎边框
作者: jzhihui    时间: 2006-11-12 09:58
【PS教程】书签式签名.gif
作者: jzhihui    时间: 2006-11-12 09:59
【PS教程】自制米字星笔刷.gif
作者: jzhihui    时间: 2006-11-12 10:00
【PS教程】朦胧效果图.jpg
作者: jzhihui    时间: 2006-11-12 10:00
【PS教程】粉红PP字.jpg
作者: jzhihui    时间: 2006-11-12 10:01
【PS教程】水晶效果边框.gif
作者: jzhihui    时间: 2006-11-12 10:02
【PS教程】渐变影射效果.jpg
作者: jzhihui    时间: 2006-11-12 10:03
【PS教程】边框效果.jpg
作者: jzhihui    时间: 2006-11-12 10:04
【PS教程】4角边框.jpg
作者: jzhihui    时间: 2006-11-12 10:04
【PS教程】图片碎影效果.gif
作者: jzhihui    时间: 2006-11-12 10:05
【PS教程】复古边框00.jpg
作者: jzhihui    时间: 2006-11-12 10:06
【PS教程】简单的磨皮.jpg
作者: jzhihui    时间: 2006-11-12 10:07
【PS教程】透明边框X1.gif
作者: jzhihui    时间: 2006-11-12 10:07
【PS教程】溶图图.gif
作者: jzhihui    时间: 2006-11-12 10:08
【PS教程】一种纹理边框.gif
作者: jzhihui    时间: 2006-11-12 10:09
【PS教程】扭曲边框.jpg
作者: jzhihui    时间: 2006-11-12 10:10
【PS教程】个性字.gif
作者: jzhihui    时间: 2006-11-12 10:11
【PS教程】花案文字.jpg
作者: jzhihui    时间: 2006-11-12 10:11
【PS教程】漂亮的叠影边框.gif




欢迎光临 MACD俱乐部 (https://bbs.macd.cn/) Powered by Discuz! X3.4