百度首页 | 百度空间
 
文章列表
 
您正在查看 "转载文章" 分类下的文章

2007年02月21日 星期三 下午 07:22

何三坡:中国文学世界一流远超西方作家

  文|吴怀尧 发自北京
  【人物简介】何三坡,著名文化批评家,毕业于解放军艺术学院文学系。曾出版诗集《灰喜鹊》,主编《鲁迅文集》(二卷)、《现代艺术札记》(三卷)、《青少年百部文学经典》(一百卷)等。现居北京。

  2008年2月21日,德国汉学家顾彬在接受《瞭望东方周刊》采访时再次抛出“中国没有散文”、“中国作家没有什么思想”等观点。

近日,著名文化批评家何三坡就此接受笔者独家专访,作出了让人耳目一新的回答。

  顾彬是“盲人摸象”

  吴怀尧:近两年来,德国汉学家顾彬热衷于对中国作家品头论足,但他也曾透露,自己“只是通过中国朋友的建议来阅读中国当代文学的。如果没有人推荐,我懒得看,作品实在太多了”,你觉得他真的了解中国作家和中国文化吗?

  何三坡:顾彬就是一个摸象的盲人,而他的诚实让他显得愈发有趣。老实说,我非常喜欢这个有趣的德国人,他向往中国文化这头大象,但很遗憾,他摸到的是这头大象的蹄子。他还一直在积极举手发言,总在说蹄子上的尘土。他的声音尖锐刺耳,给我们带来了无限的乐趣。

  吴怀尧:你觉得造成顾彬盲人摸象的原因是什么?

  何三坡:平心而论,顾彬并非天生盲人,他的悲剧与他看到的东西有关,他赖以为基的发言蓝本是陈平原与陈思和两位教授撰写的《中国文学史》。当两本内容陈腐、了无见地的混乱资料成了顾彬先生的指路明灯,事情就变得很可怕,观点就变得很可疑,结论就变得很荒诞。他真要了解中国文学,应该来向我索要名单,而不是去听几个崇拜西方文化的小知识分子在墙角里的嘀咕。

  吴怀尧:顾彬说“中国作家没有什么思想”,你怎么看?

  何三坡:顾彬不明白,他们那些西方的思想在一个诞生了老子、墨子、庄周等的智慧国度显得多么荒谬与幼稚。

  吴怀尧:顾彬觉得中国当代作家视野狭隘,对此你是否有同感?

  何三坡:他的这个说法完全是无稽之谈,我们有一份叫《世界文学》的杂志,自1953年创办至今已长达半个世纪,一直在不遗余力地译介西方的文学作品和作家。我相信每个优秀的中国作家都曾是它忠实的读者。而人民文学、上海译文、漓江、湖南美术等诸多出版社几十年来都在源源不断地译介、出版西方文学读物。对西方作家与作品我们如数家珍。与此相反的恰恰是,因为盲目与自大,西方人不愿关注中国文学。所以,他们听不到中国作家的声音,那是他们的听力出了问题,而不是我们的过错,任何人也没办法让一个聋子听智者讲笑话。

  吴怀尧:他说《狼图腾》是中国最丢脸的小说,虹影、卫慧、棉棉是垃圾,他的说法有道理吗?

  何三坡:这是废话,他是一个搞学术研究的人,按道理不应该说这样的废话。《狼图腾》是糟糕的小说,虹影、卫慧、棉棉是垃圾,在中国不是什么天大的秘密,黄口小儿都知道。我想问的倒是:他们西方人为什么要出版这些垃圾?甚至还给垃圾颁奖?

  中国文学世界一流

  吴怀尧:我是否可以这样理解,在你眼里,顾彬敢于对中国文学发言,但他并不是说出皇帝没穿衣服的那个小孩,而是果戈里笔下的“钦差大臣”?

  何三坡:说得非常对,尽管顾彬怀着一腔热爱而来,但由于他不可避免地带着西方的文学标准与西方人的优越感,而阻碍了他认识真正的中国文学。他可能误以为自己是上帝身边的天使,手捧着小红书来了,开始给我们宣布天堂的消息,并随身带着雅各的梯子,仿佛随时可以将他感兴趣的几个会用英语交谈的小知识分子接到天堂去。他自称认识钟鸣,且相谈甚欢,他以为钟鸣是个诗人,并不知道钟鸣是世界上最了不起的散文家,《畜界人界》是人类史上最有趣味的文本,一定会像英国的兰姆一样千古流传。而顾彬却说中国唯一的散文家是北岛,我只能为他遗憾,他可能没有听过这样一个成语:买椟还珠。

  吴怀尧:顾彬一直在强调文学的世界性,这个世界性意味着什么?中国作家是不是应该去适应它?

  何三坡:我理解的世界性应该是包括了中国在内的游戏圈子,而不是顾彬所说的那个只有西方人自娱自乐的圈子。

  吴怀尧:顾彬按自己的标准看中国文学,你觉得德国文学水准如何?

  何三坡:我不会说德语,也不研究德国文学,我不应该对德国文学发言。我所能说的是,我读过君特?格拉斯、托马斯?曼、海因里希?伯尔的作品,还读过帕特里克?聚斯金德,他们的语言能力与想象力让我满意。但与中国文学相比,就是老鼠比大象,好像还有不小的距离。

  吴怀尧:你对中国当代文学抱乐观态度,那么中国当代文学现状如何?整体创作实力在世界文坛是否占有一席之地?

  何三坡:中国文学自上世纪80年代复苏以来,产生了许多伟大的诗人与作家,为世界贡献了一大批不朽的杰作。中国文学作品世界一流,让西方所有的作家望尘莫及,它们是全人类的精神财富,西方现在需要做的是老老实实向一个伟大民族的创造力致敬,而不是装聋作哑,珠玉在前而不识,金声玉振而不应。西方人不关注中国文学,不只是对一个伟大民族的污辱,也是他们巨大的精神损失。

  王小波足够西方研究两百年

  吴怀尧:你认为中国文学世界一流,这是鼓励中国作家的话还是你的肺腑之言?

  何三坡:中国作家不需要我上励志课,他们已写出了无愧于世的杰作,一个王小波就足够西方研究两百年了。

  吴怀尧:除王小波之外还有哪些作家呢?

  何三坡:请允许我首先来谈诗人,在我们这个没有恒定的宗教传统的国度里,诗歌是我们每个人的宗教,这构成了整个人类文明中最奇妙的风景。屈原太远了,不说也罢,朦胧诗人跑国外了,懒得谈他;单是上世纪80年代以来就产生了无数杰出诗人,他们的诗歌对中国语言的杰出贡献有目共睹,使得我们的汉语在五四之后,绽放出了它璀璨夺目的光华。

  我愿意在这里说出部分诗人的名字:他们是于坚、吕德安、海子、黑大春、李亚伟、柏桦、于小韦、陆忆敏、王寅、韩东、史铁生、陈村、崔健、何小竹、张楚、小安、马松、翟永明、杨健、余怒、巫昂、阎安、尹丽川、施工、祁国、宗霆锋、李小洛、许巍、苏非舒、魔头贝贝、金黄的老虎,不胜枚举。

  吴怀尧:他们作品的特质呢?

  何三坡:文学的特质是语言,但它不止于语言,语言是它的曲径而已,它要让你看到的是禅房里的花木,展览的是心灵的狂喜、创痛与悲悯。它要述说另一种“可能的生活”,它诉说我们心灵的悲喜和明暗、尘世的美好与艰难。

  在这条叙诉心灵的道路上,我要说我们的小说家干得相当不错,你如果看过莫言的《透明的红萝卜》、鲁羊的《九三年的后半夜》、残雪的《苍老的浮云》,余华的《活着》、王朔的《动物凶猛》、刘震云的《故乡天下黄花》、阎连科的《受活》、王安忆的《纪实与虚构》、张万新的《马口鱼》、狗子的《在深圳飞》、魏微的《流年》,就会明白我们的小说作品在叙述才华与揭示人性的深邃上,丝毫也不比任何一位西方大师逊色。

  相比而言,从事散文创作的作家不多,但成就突出。钟鸣的寓言格物体随笔与周涛粗粝张扬的文字相映成趣,都具有东方性灵文学中独抒胸臆的特质;史铁生的生命言说与陈村的机智小品都在传达着人性深处的光辉;而张晓枫与阿简诗意飘扬的随笔,像秋天蓝色苍穹上雪白的云朵,让人迷醉;苇岸的那本弥漫着朴素乡土气息的《大地上的事情》,是一个伟大的乡村诗人对美好自然的颂歌!它的清澈的质地闪着黄金般的光芒,相信任何一位热爱汉语的人看上一辈子也不会厌弃。

  在非虚构作家里,有写出《风雪定陵》的岳南、写出《陈寅恪最后二十年》的陆键东、还有写出《心灵史》的张承志,它们的文化见地与叙述之美,都强过获得第一届诺贝尔文学奖的蒙森。

  外国文学,拉美风景独好

  吴怀尧:既然你如此力挺中国作家,那么您认为和中国文学相比,世界其他国家、特别是欧美国家的文学,现在处于什么水平?

  何三坡:欧洲作家普遍呈萎靡之势,法国自贝克特与杜拉斯后,图森是值得一读的作家,意大利卡尔维诺是个想象力的天才,德国的君特?格拉斯,捷克的米兰?昆德拉,都有自己独到的建树。与中国文学相比,他们的长处是语言的精致与思辩,缺乏的是生动的力量与生命的乐趣。当然我必须把拉美文学单列开来,那是一片草莽英雄辈出的沃土,在马尔克斯、博尔赫斯、胡安?鲁尔弗与略萨之外,常有强人出没,需要分外小心。

  吴怀尧:现在说说硬币的背面。中国作家自己的问题是什么?应该如何解决?

  何三坡:中国作家面临写作以外的一切问题,比如好作品没有像样的评论家阐释,作品出版后印刷数受到大量隐瞒……诸如此类。一个渴望文化复兴的国度,应该在每一座城市为作家和艺术家塑像,在所有的大学设立作家研究中心,解读他们的作品。文学艺术是一个国家的文化核心,大学里的教授讲师都不知文学为何物,文化复兴就是个空谈。

  吴怀尧:获过诺贝尔文学奖的日本作家大江健三郎说自己一生的努力是为了靠近鲁迅,而鲁迅曾委婉拒绝过诺贝尔奖提名。现在,很多人动辄拿诺贝尔获奖说事,并由此得出中国作家不行的结论,对此你怎么看?

  何三坡:钱钟书说过,诺贝尔文学奖是比诺贝尔更加有害的事物。我的说法比钱钟书先生要冷静、礼貌和客观:诺贝尔是一个制造炸药的西方人,他死前想到一个能让世界永远记住自己的办法,那就是每年把自己银行存款的利息拿来贿赂知识分子。他的这个做法也不是每次都成功。1964年,让?保罗?萨特就不给诺贝尔面子,他毫不留情地拒绝了它。萧伯纳与贝克特也表示过他们对这笔款子不感兴趣,这都是迄今为止我最喜欢的西方知识分子。至于那些评委,他们秉持的是一套西方价值观,根本找不到进入中国文化堂奥的大门,何以评判中国文学?

类别:转载文章 | 评论(0) | 浏览()
 
2007年02月21日 星期三 下午 07:21

局域网共享教程

前言:局域网共享是个头疼的问题,只要找到的正确的设置方法,其实也很简单。既使是XP原版也需要设置,否则也不能进行共享!

第一章:共享的前提工作:

1.更改不同的计算机名,设置相同的工作组!(图1)

2.我的电脑右键-管理-计算机管理-本地用户和组-用户:更改管理员用户名(图2)

3.手动设置IP,将ip设置在同一个网段,子网掩码和DNS解析相同(图3)

4.如何设置DNS解析:首先你可以使用自动获取,然后在开始-运行里面输入cmd后回车,在命令里面输入ipconfig/all后回车(图4)

5.运行里输入services.msc回车打开服务(图5)

第二章:共享的准备工作(注意设置完成后最好重启一下生效):

1.开始-设置-控制面板-防火墙-例外-勾选“文件和打印机共享”!当然你也可以关闭防火墙(图6)

2.运行里面输入secpol.msc回车进入本地安全设置-本地策略-安全选项将“网络访问:不允许SAM账户的匿名枚举”停用 注意此点只对来宾起效,将在第六章说到。将“账户:使用空白密码的本地账户只允许进行控制台登录”停用(图7)

3.双击我的电脑打开资源管理器-工具-文件夹选项-查看-将“使用简单的文件夹共享”前面的勾去除!(图8)

4.设置共享文件夹或共享盘符(我这里设置D盘为共享盘符,当然你可以自己设置磁盘里面的任意文件夹为共享文件)打开资源管理器-右键D盘-共享和安全-左键点选打开(图9)(图10)

再看下图

注意:经过上两个图的共享资源设置,偶们进入对方的机子只有“只读”权限,只能看不能动的哦!这可是XP默认的这安全性呵呵!当然你可以设置完全控制。这样你就可以为所欲为了哈哈。(图11)

第三章:用管理员登录的局域网共享方式
经过上面两章的设置,我们已经可以访问计算机today了

1.在主机中双击网上邻居-点击查看工作组计算机

2.双击today或是右键打开(图12)

3.还有一个更快捷的访问方法就是在主机的地址栏里面直接输入\\today后回车,出现的界面和上面相同。

4.在登录框输入用户名play和密码(这里密码为空,所以不用输入),确定后就进入today的共享盘符了(图13)

小提示:以后我们再次登录today的时候就不用再输入用户名和密码了呵呵(图14)(图15)

再看下图

第四章:以来宾登录的局域网共享方式
经过第一和第二两章的设置,我们还要进一步设置才能做到来宾共享

1.“我的电脑”右键-管理-本地用户和组-用户-启用来宾(注意:在这里启用来宾的效果和在控制面板-用户账户里面启用来宾是一样的。区别就是在此启用后面板里面的来宾还是显示没有启用的,而在面板里面启用来宾的话这里也就启用了。)(图16)

2..运行里输入secpol.msc启动“本地安全设置”-“用户权利指派”-将“拒绝从网络访问这台计算机”里面的guest用户删除。(图17)

3.运行里输入secpol.msc启动“本地安全设置”-“安全选项”-“网络访问:本地账户的共享和安全模式”-将“经典”改为“仅来宾”。(图18)

4.运行里输入secpol.msc启动“本地安全设置”-“用户权利指派”-将“拒绝作为服务器和批作业”里面的用户删除(图19)

注意:以上设置需重启后生效

5.我们现在可以象第三章的进入方法进入today的共享资源了。区别就是来宾登录的共享方式没有弹出登录框,不用输入用户名和密码就可以直接进入了。小提示:从以上的设置方法我们可以看出,管理员登录的共享方式是狭义的共享,而来宾登录的共享方式就是广义的共享。可以这么说:来宾共享里面已经包含了管理员共享的方式。不过启用来宾登录的方式就去除了管理员登录的方式了呵呵

第五章:磁盘映射
用磁盘映射,将today的共享资源直接映射到主机中。以后在主机资源管理器里面就可以直接打开了。前提就是today在局域网内也必须开机。

1.在主机中右键“网上邻居”-点选“映射网络驱动器”(图20)

2.浏览today的共享盘符(图21)

3.完成后在主机里面出现了today的共享盘符(图22)(图23)

再看下图

第六章:局域网访问常见的故障及解决方法
1.访问对方电脑时不弹出用户名框,打不开对方电脑上的共享文件夹(图24)

原因为本机的管理员用户名为Administrator,将其改为任意名即可!
注意:这个现象是用来宾登录的共享方式才会出现的。!

2.访问对方机子时,登录对话框中的用户名始终为灰色的guest不可选(图25)

解决方法:本地策略-安全选项-“网络访问:本地账户的共享和安全模式”改为“经典-本地用户以自己的身份验证”即可!
注意:以上这种现象是用来宾登录的共享方式以后,我们不注意禁用了来宾才出现的。禁用了来宾后我们就变成了以管理员登录的共享方式了呵呵!

3.以管理员登录的共享方式登录对方的机子时出现没有权限使用网络资源的现象(图26)

这是我们正常的共享使用之中因为在安装某些安全软件的时候给关闭了。我们只要再次把“使用简单的文件共享”前面的勾去除即可!

4.以来宾登录的共享方式在局域网使用中突然也会出现第3点的情况。原因也是使用了某些安全软件把我们的SAM账户恢复为默认的启用状态了。我们只要进入组策略禁用后重启即可!

友情提示:需要注意的是我们安装有些软件比如金山杀毒软件,它会关闭了我们的共享设置里面的某些服务导致不能正常共享。我们只要按照以上各章的设置和本章的设置就可以解决了。

第七章:增加局域网安全性,为来宾用户设置密码。
其实我们在第二章的共享盘符设置里面已经提到权限的设置了,默认是只读这本身已经很安全了。不过就是局域网内所有人都可以访问你。如果我们设置了密码,其他人就不可随意访问你的共享资源了。

1.运行里面输入control userpasswords2回车(图27)

2.设置密码后重启(图28)

3.设置密码后登录today出现灰色对话框,此对话框和第六章的故障可不同的哦。我们只要输入密码确定即可进入了。(图29)

4.在计算机管理里面-共享文件夹-会话里面就可以看到登录方式了(图30)

提示:从上面的设置我们可以看到此法也设合以管理员登录的共享方式。这里不再哆嗦了。

(所有图片和文字来源于系统之家和雨林木风)

类别:转载文章 | 评论(0) | 浏览()
 
2007年01月31日 星期三 上午 09:01

◆理解函数的目的
◆给函数传递参数
◆理解函数的变量作用域的重要性
◆编写自定义函数
◆从函数返回值
◆用setInterval()创建递归函数
通过使用函数,就可以创建可重用的代码、可读的代码、灵巧的代码。有了函数,就可以写出有效的、结构精巧的、维护得很好的代码,而不是冗长的、笨拙的代码。

一、理解用函数进行编程

函数是一种革新。写代码没有函数,就像出版图书没有印刷机,出版业是如此没有生产力,如此没产量。有了印刷机,只制一次版,就可以从那个版复制出许多副本了。印刷机是一种革新。同样地,如果编程序没有函数,就不得不一次一次地写出代码的每一行。但是,当写出一个函数时,就可以将多条语句封装在一起,就可以重复地调用那个函数(即那些语句的组),而不用重复写相同的代码了。那就巧妙多了。
函数是一种组织起一个代码块的方法,该代码块直到从其主流程中调用(直接地或间接地)时才执行。换句话说,函数是一种将调用时才执行(不调用不执行)某个特殊任务的代码块包装在一起的方法。
函数比非结构化编程更具优势。这些优势包括:
◆ 通过消除混乱和冗余的代码,使代码更具有可读性。
◆ 通过重复使用函数而不是每次重复输入整个代码块,使程序更加有效率。
◆ 函数成为了进行修改的中心点。在函数中做个修改,该修改就能被应用到每个调用该函数的实例中。
◆ 编写成熟的函数可以在许多程序中重复使用。因此,可以开发出一个可被用于建立各种程序的函数库,而不需要每次从打草稿开始写脚本。
◆ 包装在一个函数中的代码提供了进行用户交互的基础。如果没有函数,应用程序就像一个单独的程序那样运行。有了函数,一个用户发起的动作就可以调用一个函数。
二、定义自定义函数
我们已经知道在ActtionScript代码中使用函数的某些优点了。现在,需要学习如何来写函数。写一个函数也被称为“定义”或“声明”一个函数。
函数的语法:


function 函数名(参数):返回数据类型{
  函数体
)

在函数的语法中,要注意如下几个关键点:
◆function关键字告诉Flash,正在声明一个函数。当定义一个函数时,必须像上面那样包括function关键字。
◆函数应该遵守变量的命名规则。就像命名变量那样,给函数取一个能表示其功能的名字是一个好想法。
◆所有函数的定义都必须在函数名字后面包括一对圆括号。在圆括号中的“参数”可以没有。在后面可以读到有关参数的更详细的内容。但是,无论一个函数是否定义了参数,都必须在定义中包括一对圆括号。
◆圆括号后面接着就是冒号和一个有效的数据类型名字。数据类型是函数将返回的数据的类型。在后面会看到如何返回数据。使用Void表示该函数不返回值。
◆函数体是由一对开始和结束波浪式大括号({})定义的。
现在已经知道基本的语法了,那就看一个非常简单的函数例子吧:


function displayGreeting():Void{
  trace("Hello");
}

三、调用函数
我们将术语“函数”定义为延迟执行的代码块。这就是说,一个函数可以被定义,但直到访问或调用它之前什么也不会发生。可以自己测试一下这一点,即在主时间轴的第1帧中,用如下代码创建一个新的Flash影片:


function displayGreeting():Void{
  trace("Hello");
}

当测试该影片时会看到,尽管在代码中有一个trace()动作,但什么也没发生。所以,既然知道了如何“定义”函数,就需要学习如何通过“调用”它们而在程序中使用它们。
为了调用一个函数,需要使用该函数的名字,并后跟一个圆括号(它被称为“函数调用运算符”)。当调用一个函数时,对函数的调用本身就是一个语句。因此,应该在该语句的后面使用一个分号。下面的例子定义了一个函数,然后调用它。如果想自己学习和测试它,只需将该代码放置在主时间轴的第1帧即可。


function displayGreeting():Void{
  trace("Hello");
}
displayGreeting();//调用函数

当测试该影片时,在output窗口中显示如下内容
Hello
四、传递参数
某些函数不需要给它们传递任何信息。例如,前面一节中的dlsplayGreetlng()函数就不需要任何参数。
换句话说,许多函数需要给它们传递参数。例如,如果dlsplayGreetlng()函数可以使用不同的姓名来显示个性化的问候,就会使dlsp]ayGreetlng()函数更加有趣了。有了参数,实现这一点就简单了。把上面的函数修改一下,如下所示:


function displayGreeting(姓名:String):Void{
    trace("Hello"+姓名)
}

一旦用这种方式定义了该函数,就可以调用它了,并给它传递不同的参数值。某些例子如下所示:
displayGreeting("张三");//显示:Hello张三
displayGreeting("李四");//显示:Hello李四
在一个函数中,一个参数就是一个变量,当调用该函数时就给变量赋值。就像在displayGreeting()函数中所看到的那样,参数被命名为"姓名",在每次调用该函数的时候就给该参数设置值。当用值"张三"调用该函数时,该变量就被赋予了"张三";当用值"李四"调用该函数时,该变量就被赋予了"李四"。
参数(变量)是在函数定义的圆括号中声明的。读者可能注意到了,参数的声明与常规变量的声明相似但略微不同。首先,声明的相似性在于,需要给变量创建一个名字并定义一个数据类型。但是,当声明一个参数时,不需要使用var关键字,也不需要使用分号,并且不能在圆括号中初始化一个参数。下面的代码是不正确地声明参数的例子,将产生错误:

//不能使用var关键字。
function displayGreeting(var 姓名:String):Void{
    trace("Hello"+姓名)
}
//不能使用分号。
function displayGreeting(姓名:String;):Void{
    trace("Hello"+姓名)
}
//不要试着在圆括号中初始化变量。
function displayGreeting(姓名:String="王麻子"):Void{
    trace("Hello"+姓名)
}

如果想在函数中使用多个参数,该怎么办呢?很简单,当定义函数时,可以声明用逗号分隔开的多个参数。同样地,当调用该函数时,可以给它传递多个值,只需简单地用逗号分隔这些值即可。如下是具有多个参数的dlsp]ayGreetlng()函数的例子:


function displayGreeting(姓名:String,体重:Number):Void{
  trace(姓名+"的体重是:"+体重);
}

displayGreeting("张三",50);//显示:张三的体重是:50
读者可能注意到了,当开始将越来越多的参数添加到一个函数定义的参数列表中时,代码就开始超出编辑器的边界了。可以在Actions面板中启用自动换行功能。还可以在定义函数时将每个参数(或参数组)放置到新的一行中。这是一个通常采用的习惯,因为它能更容易地阅读一个由许多参数组成的函数的参数列表。语法是相同的,区别仅在于:参数列表中的每个参数都放在新的一行中,以便使它更容易阅读。例如:


function displayGreeting(姓名:String,
                         体重:Number):Void{
  trace(姓名+"的体重是:"+体重);
}

注意:定义函数的参数个数与调用时传递的参数个数不一定要相同,当然,如果该有的参数没有的话,可能函数不会正常工作,多个参数是按先后顺序依次“对号入座”的。
1、给参数传递值和引用
当给函数传递参数时,参数是用两种方式之一进行传递的:按值和按引用。其区别与数据类型有关。
(1)基本数据类型,如string,number,Boolean,是按值传递的。这就是说,值被传递给了函数,而与该值所来自的变量的任何联系都被切断了。换句话说,当值被传递给函数后,任何被用于传递值的变量就独立了。下面是一个例子:


function 引用测试(a:Number):Number{
  a++;
  return a;
}
var b:Number=5;
var c:Number=引用测试(b);
trace(b);
trace(c);

Output窗口会显示如下内容
    5
    6
在这个例子中,尽管b的值被传递给了函数,并且那个值在函数中被增加了1,但b仍保持它的值(5)。为什么?因为b的值被传递给了函数,而不是变量自己。然后,那个值在函数中被赋予了一个名为a的参数,被增加、被返回。然后,返回的值被赋予了一个新的名为c的变量。
(2)当引用数据类型被作为参数传递时,它们就按引用进行传递。这就是说,一个被传递给函数的对象是对该实际对象的一个引用。其结果是,在函数中对对象引用所做的任何事情都会影响到该对象本身。没有产生该对象的副本。下面是一个使用名为mBox的MovieClip实例的例子:

function move(mA:MovieClip,X:Number,Y:Number):Void{
  mA._X=x;
  mA._y=y;
}
move(mBox,100,100);

上面这个例子将名为mBox的MovieClip对象移动到舞台的(100,100)处。

2、使用arguments属性
现在所看见过的函数要么不使用任何参数,要么参数被声明为圆括号中的参数列表。但是,不管一个函数是否声明了任何参
数,传递给函数的所有参数都被保存在一个名为arguments的特殊数组中。每个函数都有一个arguments变量(对象),当调用
函数的时候,就在该函数中创建该变量。
ActionScript并不强求函数定义中的参数个数与调用时传递给该函数的参数个数一致。其意思是在调用时没有被传递、但
在函数的参数字符串中被定义过的任何值,都会具有一个undeflned值;
而在函数调用中传递的任何值,如果在函数的参数定义中没有它,就会被忽略。
因此,完全可以定义一个没有参数的函数,但仍然可使用arguments对象传递参数。下面是一个把arguments对象作为数组使
用的例子:


function traceParams():Void{
  for(i=0;i<arguments.length;i++)(
    trace(arguments[i]);
  }
}
traceParams("one","two","three");

在这个例子中,下面的内容会显示在Output窗口中:
one
two
three
在大多数函数中,声明参数要好得多。当重载一个函数或遇到相似情况时(参见“重载函数”一节),arguments对象很有用。
每一个arguments对象都有两个特殊的引用函数的属性。尽管不常使用这些属性(caller和callee),但在某些情况下(特别
是在开发高度抽象的函数时)这些属性却有用。
如果有一个函数调用当前函数的话,arguments对象的caller属性就返回对这个函数的引用。如果没有另一个函数调用当前
函数的话,caller属性就有一个null值。

function function1():Void{
  function2();
}
function function2():Void{
  if(arguments.caller==function1)
    trace("function2 called from function1");
  else
    trace("function2 not called from function1");
}
function1();//Output:function2 called from function1
function2();//Output:function2 not called from function1

一个函数的arguments对象的callee属性是对该函数本身的引用。可能不能立即看出为什么说这是有用的。但是,考虑一下
匿名的递归函数的情况。可以像下面这样写一个可以递归地调用自己的函数:

Var fFactorial:Function =function(nOperand:Number):Number{
    if(nOperand>0){
      return nOperand * arguments.callee(nOperand-1);
    }else{
      return 1;
    }
}

五、从函数返回一个值
到现在为止,主要介绍了函数作为子程序的这一点。也就是说,函数可以将主程序分解为更小的、更易管理的片段。一方
面,当函数用那种方式作为一个子程序时,函数并不需要返回一个值。另一方面,某些时候想创建一个函数,用它进行某
些计算或操作,然后返回一个值。可以在一个函数中使用return语句来返回一个特定的值。return语句的语法如下所示:
    return value;
当使用return语句从一个函数返回一个值时,应该指定要被返回的数据类型(在函数定义的圆括号后面指定)。在此之前的
例子中,返回类型是Void(表示无返回)。但是,当返回一个字符串时,就应该将返回的数据类型设置成String;当返回一个
数字时,就应该将返回的数据类型设置成Number,等等。
下面是一个计算矩形面积的函数的例子,其返回值是数字:


function 求面积(nA:Number,nB:Number):Number{
    var nArea:Number=nA * nB;
    return nArea;
}

只要遇到return语句,Flash就退出该函数。因此,如果在return语句后面还有其他剩余代码,就不会再执行它们了。例如:


function 求面积(nA:Number,nB:Number):Number{
    var nArea:Number=nA * nB;
    return nArea;
    trace("The area is:"+nArea);
}

求面积(6,6);在上面的例子中,trace()语句总是不会被执行的。这是因为在函数中的return语句后面的代码
是执行不到的。
下面是一个使用几个return语句的例子。明显地,在任何对该函数的调用中,只可能遇到其中的一个return语句。而在这个
例子中,一个return语句是在条件满足时遇到的,其他return语句是在条件不满足时遇到的。该函数接受两个参数:一个(字
符串)数组、一个字符串值。该函数用一个for语句来搜索遍历该数组,直到遇到一个与该字符串匹配的成员为止。一旦发现
匹配,它就返回相应的索引。如果没有发现匹配,该函数就返回null。


function findMatchingIndex(aTitles:Array,sTitle:String):Number{
    //循环遍历数组中的所有成员。
    for(var i:Number=0;i<aTitles.length;i++){
      //如果成员之一匹配sTitle的值,就返回相应的索引。这会导致该函数停止执行。
      if(aTitles[i]==sTitle){
        return i;
      }
    }
    //如果没有发现匹配,就会遇到这条语句(仅此而已)。
    return null;
}

不管函数做什么,只要它返回一个值,就完全可以将其作为表达式的一部分来调用该函数。例如,可以用下面的方法来使用“
求面积”函数:


var nArea:Number=求面积(6,6);//返值存入变量
也可以:
var nArea:Number=求面积(6,3) * 5;//函数参与计算

从本质上说,该函数就变成了一个类似字符串、数字、变量的值。因此,尽管下面的内容是有效的,然而却是不太有用的
ActionScript语句:
    6;
下面也一样:
    求面积(6,6);
我们希望按某些有意义的方法来使用返回的值。可以像使用变量那样来使用一个会返回值的函数。我们已经见过用于赋值
语句中的“求面积”函数了。下面是另外一个例子,在该例子中,函数作为条件表达式的一部分使用:


if(求面积(6,6)>18){
       trace("The area is more than 18.");
    }

注意:函数的返回“值”不但可以是数值,字串等,也可以是对象,如数组、Object等。

六、引用函数
可以用函数的名字来引用一个函数。当将函数名与函数调用运算符(圆括号)结合起来使用时,函数就被调用了,但是名字本
身只是作为对函数的引用。这就是说,实际上可以使用函数的名字来将一个引用赋予一个变量。例如,一旦将对一个函数的
引用赋予给一个变量,就可以将那个变量名与函数调用运算符结合起来调用那个函数。下面是一个例子:

function 求面积(nA:Number,nB:Number):Number{
    var nArea:Number=nA * nB;
    return nArea;
}
var fArea:Function=求面积;
trece(fArea(6,6));//36

下面将看到如何将匿名函数赋予变量。
七、创建匿名函数
现在已经知道如何使用标准的、命名的函数语法来定义函数了。除此之外,还有一种使用“匿名函数”来定义函数的方式,
它允许创建一个没有名字的函数。然后,可以将该函数赋予一个变量。
下面是匿名函数的语法:


function(参数):返回类型{
    函数体
};

读者可能注意到了,标准的函数声明和匿名函数声明在语法上很相似,仅有两点不同。第一,匿名函数没有函数名。第二,匿
名函数后应该跟一个分号,这在标准函数的声明中是不需要的。
正如前面所述,这主要是想将匿名函数赋予一个变量。否则,当该函数被定义之后,它就“离开了”作用域(即变成未定义的
了)。下面是将匿名函数赋予一个变量的例子:


var fSayHi:Function=function(sName:String):Void{
    trace("Hi,"+sName);
);
fSayHi("Joey");//显示:Hi,Joey

就像所看到的那样,可以使用被赋予该匿名函数的变量来调用该匿名函数。
实际上,匿名函数大家经常都在用,回想一下,按钮事件函数的写法,如:


btn.onPress=funceton(){
   ......
}

八、理解作用域
“作用域”是在ActionScript中定义的某些标识符的作用范围。有些标识符仅在一个时间轴中被定义,有些标识符在整个影
片的范围中被定义,有些标识符仅在一个函数中被定义。在函数中,有两种作用域需要解释一下:变量的作用域、函数的作用
域。“变量的作用域”是变量在一个函数中的作用范围,“函数的作用域”是一个函数在一个影片中的作用范围。
1、变量的作用域
当在一个函数中适当地声明一个变量时,该变量就被称为“本地变量”。本地变量表示当在一个函数中声明一个变量时,它
的定义在该函数调用之后就不再保留。这是一种避免与其他变量产生命名冲突的好方法。
下面是一个函数的例子,它声明并初始化了一个名为sMessage的本地变量。该本地变量在该函数中被定义。但是,如果想使
用trace()在该函数之外来显示该变量的值,结果将是未定义的。

function testScope():Void{
    var sMessage:String="hello,world!";
}
testScope();
trace(sMessage);//显示:undefined

在一个具有许多函数的大程序中,使用本地变量有利于确保减少具有相同名字的变量之间的冲突。尽管总是应该试图为变量
取一个惟一的名字,但是在不同的函数中重复使用相同的变量名字还是可能的。如果每个都有相同的作用域,那么一个就会
干扰另一个,就会导致不希望的值和结果。另一个使用本地变量的可能原因是用于内存管理。尽管它可能并不是真的很大,
但在程序中定义的每个变量都会占用内存。如果不用一个变量做什么事了,但它仍被定义,就会浪费内存。通过使用本地变
量,当函数结束之后内存就会被释放。
参数被看做本地变量,即其作用域在该函数中,但不在它之外。从下面的例子就可以看出这一点:

function testParameterScope(sMessage:String):Void{
    trace(sMessage);
}
testParameterScope("Hello"); //显示:Hello
trace(sMessage);//显示:undefined

与此不同的是,在该函数外面声明的变量(但在定义该函数的相同时间轴中)是可以在该函数中使用的,例如:

function testScopeTimeline():Void{
    trace(sMessage);
}
Var sMessage:String="Hello";
testScopeTimeline();//显示:Hello

在该例子中,变量sMessage是在该函数之外声明的,但仍可以在该函数之中使用。
九、函数的作用域
正如现在所知,当声明一个函数时,其作用域被限制在声明它的时间轴中。这就是说,可以通过它的名字在相同的时间轴中调
用它;如果使用一个目标路径,那么就可以在那个时间轴之外调用它。在相同的时间轴中使用该函数,是非常容易的。在另一
个时间轴中使用该函数,就有些不方便了。在一个没有时间轴的对象中使用该函数,就变得颇具挑战性了。试一试吧!
十、创建递归
“递归”是指一个函数在其函数体中调用它自己。在某些情况下,这是一种必需的方法。递归的经典例子是计算一个数的阶
乘。作为复习,数n的阶乘是指如下公式:
    n*(n-1)*(n-2) … *1
例如,5的阶乘是120(即5*4*3*2*1)。下面就是一个完成这一工作的函数:

function factorial(n:Number):Number{
    if(n>0){
      return n*factorial(n-1);
    }
    else{
      return 1;
    }
}

递归是一个相当简单的概念,但对于还没有写过大量代码的人来说它又是一个头痛的概念。因此,有些时候它可能有些模糊
。为了搞清该例子中的递归的工作原理,我们来看看当调用该函数时会发生什么。这次,我们使用一个小数字来使其简单些:
trace(factorial(3));
当第一次调用factorial()函数时,是用3这个值进行调用的。因为n大于0,所以它执行if语句中的语句。该语句指示函数返
回表达式n*factorial(n-1)的值。为了计算该表达式,该函数必须调用它自己(factorial(n-1))。这一次,当调用
factorial()时,是用2这个值进行调用的。同样,n的值大干0,所以执行第一个rettIrn语句。该函数再一次调用它自己。这
一次,是用1这个值进行调用的。重复相同的处理,再一次用0这个值调用factorial()。然而,在这次函数调用时,因为n不再
大于0了,所以返回1并且不再调用该函数了。
应该非常小心,以确保递归函数在递归的次数上有一个限制。设想一下,如果这个例子的函数被写成下面这样,将会发生什么

function factorial(n:Number):Number{
    return n*factorial(n-1);
}

该函数将永远地调用它自己。这个无限循环往往会导致系统崩溃。幸运的是,Flash对此有一个保护措施,即在一个设定的递
归次数之后,会在影片中禁止ActionScript。如果在影片中使用了这种无限递归(即没有一个条件能使该递归停止)的函数,
当测试影片时就会在Output窗口中看到警告信息。


十、重载函数
重载函数是指,使多个函数具有相同的名字但具有不同数量和/或类型的参数。在许多情况下这可能是有用的。例如,可能
有一个名为caIculateArea()的函数,它基于两个参数(各个边的长度)来计算矩形的面积。但可能还希望有一个
calculateArea()函数,它基于一个单独的参数(半径)来计算圆的面积。问题是,正如已经提到过的那样,ActionScript并不
要求函数定义中的参数数量与传递给它的参数的数量一致。这就是说,不能有两个具有相同名字的函数,即便它们有不同数
量的参数。因此,不能真的用ActionScript来重载函数。
相反,可以在函数中使用if语句或switch语句来检查参数的数量而模仿函数的重载。下面是一个例子,它说明可以如何写一
个函数,使其根据传递给它的参数的数量(由arguments.length决定)计算矩形的面积或者圆的面积。这并不是一个严格意义
上的重载函数,而是ActionScript的等价物。

function calculateArea():Number{
    switch(arguments.length){
      case 1:
        var nRadius:Number=arguments[0];
        return(Math.PI*(nRadius*nRadius));
      case 2:
        var nA:Number=arguments[0];
        var nB:Number=arguments[1];
        return(nA*nB);
      default:
        return null;
    }
}

十一、为可重用而编写函数
当写一个函数时,要记住易用的或可重用的代码的重要性。理想的情况是使函数尽可能地通用和尽可能地包装好。函数一般
应该像一个黑箱一样进行操作。这就是说,函数的活动性从本质上讲应该是不依赖于程序的其他部分的。一个写得很好的函
数应该可以被用到许多不同的程序中,就像一把万能钥匙可以开不同的锁一样。
应该用可重用性的观念来写函数。当写通用函数时,要记住如下几点:
◆通常,不要使用在函数外面定义的变量——在函数中使用的变量(和对象)应该是在函数中声明的或作为参数传递给函数的
。如果需要将一个值赋予一个将在函数的作用域之外使用的变量,则考虑使用一个return语句来代替。因为一个函数一次仅
能返回一个值,所以可能会发现用一个return语句似乎有点局限。如果在函数中的确是这样的话,那么也许就会发生下面两
件事之一:要么想返回的值是相关的值,那么可以将它们放入一个数组或一个对象中,然后返回它们;要么它们是不相关的值,
那么就应该将函数拆散成多个函数。但也可能有例外。某些时候,只想用一个函数将一个影片中的某些功能组织到一起,以
便将代码组织成子程序。在这种情况下,直接访问在该函数外面声明的变量和对象还是可以接受的。
◆给函数取一个能描述其任务的名字——当再次看到函数时,就可以很容易地知道该函数是干什么的了。如果因为函数要做
许多事情而不好给它取名,请考虑将那个函数拆散成多个函数。即便是通用函数,它们也应该执行特定的任务。虽然这些指
导方针通常是有用的,但有的时候它完全不适合写一个真正通用的函数。如果写一
个函数的任务对正在写的程序来说非常特殊,那么将它写得太通用了也许并没什么用。
十二、使用内置函数
前面已经学过如何在ActionScript中创建一个自定义函数了。通常,当人们谈到函数时所指的就是这些自定义函数。但是,
在ActionScript中还有许多其他“内置函数”,基本上可以像使用自定义函数那样来使用它们。Actions工具箱中包含一个
名为Global Functions的文件夹,在这个文件夹中是包含所有内置函数的子文件夹。这些函数中的许多已经被类和方法代替
了,因此最好使用这些新的替代品。例如,所有的时间轴控制、影片剪辑控制和打印函数都已经被方法代替了。但仍有某些
全局的内置函数是有用的。这些函数包括:
◆fscommand()_一仅在非常特殊的情况下才使用这个函数。fscommand()函数能使Flash影片与播放器进行通信。
◆setInterval()/clearInterval()——这些函数能够指示Flash按特定的、固定的间隔去调用其他函数。请参见下面的“
创建间隔函数”中的详细内容。
◆escape()/unescape()——这些函数被用于在文本和安全URL格式之间进行转换。
◆getTimer()——getTimer()函数返回自从Flash影片开始播放以来的毫秒数。这在某些定时处理(不要求很高的准确性和
精确性)中可能有用。例如,想在影片“时间到了”之后做某些循环,在这些情况下,getTimer()就是一个合适的函数。例如,
可能有一个等待来自服务器的响应的影片,但是,如果30秒钟之后还没有得到响应,可能就想停止等待并提醒用户服务器没有
响应。
◆trace()——trace()函数在本书中到处可见。在测试Flash应用程序显示信息时,它非常有用。
◆isFinite()/isNaN()——这些函数测试一个值是否是有限的,甚至是否是一个有效的数字。
◆parseFloat()/parselnt()——这些函数从一个字符串中解析一个数字。

十三、创建间隔函数
可以用函数来做的一件非常有用的事情就是:利用setInterval()命令创建间隔函数。通过使用setInterval()函数,可以指
定一个函数和一个连续调用该函数的时间间隔(以毫秒为单位)。该函数返回一个ID(标识),该ID可以被用于稍后停止该间隔
。下面是setInterval()函数与一个函数一起使用时的标准语法:


[Copy to clipboard]CODE:
setInterval(function,interval[,param1…,paramN])

setInterval()函数的第1个参数应该是一个函数的引用。这就是说,不应该包含函数调用运算符,即不能有括号。
interval参数以毫秒为单位。如果给interval参数传递1000,则该函数将大约每秒钟被调用1次。但是要知道,函数被调用的
间隔并不精确。Flash尽可能地按间隔来调用函数。但是,运行播放器的计算机的处理器与间隔应该多么精确之间是有冲突
的。
通过使用setInterval()动作,可以随意地给函数传递参数。紧接在头两个参数(必需的)之后传递给setInterval()的任何参
数,都将接着传递给函数。例如,下面的例子显示了一个使用两个参数的writeMessage()函数。通过使用setInterval()可以
告诉Flash,每隔1000毫秒就调用该函数,并将两个值传递给该函数:


function writeMessage(sName:String,sMessage:String):Void{
    trace("Hello,"+sName+"."+sMessage);
}
var nwriteInterval:Number=setInterval(writeMessage,1000,"Joey","Good morning."),

Flash开发者在使用setInterval()时,常犯的一个错误是:认为会在每次调用函数时计算通过setInterval()传递给该函数的
变量。例如,上面的代码可能被重新写成:


function writeMessage(sName:String,sMessage:String):Void{
    trace("Hello, "+sName+"."+sMessage);
}
var sNameParam:String="Joey";
var sMessageParam:String="Good morning.";
var nWriteInterval:Number=setInterval(writeMessage,1000,sNameParam, SMeSsageParam);

用户可能认为:改变sNameParam或sMessageParam的值将导致在Output窗口中显示不同的值。但是,在每次调用
wrlteMessage()函数时,并没有计算变量sNameParam和sMessageParam的值。相反,当调用setlrlterval()时,才计算它们一
次。然后,那些值就被用于每次调用该函数。因此,尽管改变了这些变量的值,但传递给该函数的仍是相同的值。
下面,让我们看一个例子,可以用它来检查Flash调用间隔函数的精确性。可以将该代码放置在一个新的Flash文档的主时间
轴的第1帧中。


function traceTimer():Void{
    trace(getTimer()),
}
var nTimerInterval:Number=setInterval(traceTimer,200);

当进行测试时就会看到,该函数有规律地,按大约200毫秒的间隔被调用。但间隔是不精确的。如果用setInterval()来影响
舞台中的动画的话,帧速率也可能对如何使用setInterval()产生影响。影片刷新舞台的速率只在视觉上等于该影片的帧速
率。这就是说,如果在该影片中某些处理发生的速率高于帧速率,它就不会对舞台中的显示有影响。因此,假如用
setInterval()来将一个MovieCllp实例移动越过舞台,并且帧速率被设置成1fps(每秒的帧数)时,然而该函数被调用的间隔
却是10毫秒,那么在舞台上的移动就可能起波浪。正如下面的代码所示,通过在正被setInterval()调用的该函数中使用
updateAfterEvent()动作,可以对此进行修补。updateAfterEvernt()动作指示Flash刷新显示器而不管帧速率。


function moveRight(mA:MovieClip):Void{
    mA._x++;
    updateAfterEvent();
}
Var nMoveRInterVal=setInterval(moveRight,10, mCircle);

还可以在setInterval()中定义一个匿名函数,这就不需要传递函数的名字或对函数的引用了。
var nTimerInterval:Number=setInterval(function(){trace(getTimer());},200);
现在,知道如何为一个要被调用的函数设置一个间隔了,读者或许还想知道如何使一个正在被不停调用的函数停下来。换句
话说,就是想知道如何清除间隔。通过调用clearInterval()函数就能非常简单地做到这一点,clearInterval()函数使用一
个单独的参数,即表示应该被清除的间隔的ID。请记住,setInterval()会返回一个可以被用于指示该间隔的ID。下面的代码
停止一个间隔,该间隔的ID已经被赋予 nTlmerInterval 了:


clearInterval(nTlmerInterval);

十四、小结
◆函数是一种将代码块组织到一起的方法,可以通过名字或引用来调用它们,从而一遍又一遍地使用它们。
◆函数可以作为子程序,即它们可以执行某些运算并返回一个值。
◆函数可以被命名,也可以匿名。这两种类型都有不同的优点和缺点。
◆通过使用为函数创建的arguments对象,可以调用一个调用函数,递归地调用一个匿名函数, 并且按数组而不是按单独的各
个变量来使用传递给函数的各个参数。
◆定义可以在许多不同环境中使用的通用函数是值得的。

类别:转载文章 | 评论(2) | 浏览()
 
2007年01月29日 星期一 下午 08:14
画面显示的是2008年前后的台海局势
这是在风诡云谲的背景下的一场博奕
对象
四个女子代表在亚洲围绕台湾进行角力的是四个大国:中国、美国、俄罗斯、日本
旁边的丫头是台湾,她只是观战者
牌局
中美是对家,日本和俄罗斯是陪玩麻将的搭子,她们玩的是亚洲特别是中国盛行的麻将
她们在输一局就脱一件衣服的规则下己经玩了一段时间,所以都衣冠不整,现在的情况是
日本:己经输的精光,全身一丝不挂
俄罗斯:也己经输得仅剩一块遮羞布
美国:虽然上身齐整,但下身赤裸
中国:虽然上身赤裸,但下身还算齐整
作为对家的美国和中国来说,美国虽然上衣齐整,但下身赤裸,表明她在台湾问题上己经没有多少能拿得上台面的东西了,而中国,虽然上身赤裸,但下身齐整,顽强地坚守着自己的原则
动作
台湾虽然不参与博奕,但神情极为专注,因为这决定着自己的命运
日本自顾自地盯着自己的一亩三分地,因为己经输得精光,所以等着摊牌,么样看都像白痴
俄罗斯因为台湾不是自己的利益所在,所以牌桌上最为优雅,也最不守规矩,她的牌打成了相公
中国除了桌上的牌以外,背后还有两张牌,一张是与俄罗斯串通得到的,还有一张梅兰竹菊之类的,相当于赖子呵,这两张牌,一张是背对我们,相当神秘,表明在台湾问题上,我们还有一些不为人知的手段,在台面上,中国也摸到了所有的“东风”,并且开了明杠,显然,这一局,中国握有极大的胜算
美国拿了一手臭牌,无奈地望着台湾,虽然台湾看到了中俄的小动作,但因为自己不在牌局中,也不能明言
衣着
中国身着蕾丝身的裤裙,背上纹有凤凰,这表明她外在西化,内在传统
台湾一身中国兜肚表明了她的纯正中国血统
台湾一手端果盘,一手握小刀,其中的果盘代表着自己的利益,小刀表明她想维护自己利益的意愿
但小刀的用途也许只是:最后谁胜出,台湾就为谁削水果
那似蒋非蒋,似孙非孙的挂图表明了台湾的政治现实
类别:转载文章 | 评论(0) | 浏览()
 
2007年01月09日 星期二 下午 08:33

暴风影音使用技巧
一、视频抓图,一招制敌

我们在欣赏DVD电影时,可能会遇到非常好看的画面,想将它截取下来保存或者设置为壁纸。一般情况下,我们要么使用HyperSnap-DX、SnagIt的DirectX/Direct3D以及Glide视频截图功能,要么是在“显示属性”中依次选择“高级→疑难解答”将“硬件加速”关闭,然后使用Print Screen键来截取。

其实我们完全可以在暴风影音中轻松解决这个问题,首先播放视频,到待截取画面处暂停播放,选择“文件→保存图像”将其保存为bmp或jpg格式。

不过需要提醒大家的是,这种方法并非对所有格式的视频有效,如果程序提示“保存图像失败,hr=...”则表明该方法对当前视频无效。

二、视频画面比例随心所欲

有时候我们会一边看电影一边用电脑干点别的事情,而做不同的事情需要设置视频画面不同的显示大小。其实我们可以将这些大小设置方案保存起来,方便随时切换。选择“查看→全景→编辑”菜单,单击“新建”按钮,并在“位置”和“缩放”栏设置大小参数,其中“位置”栏的数字设置在0.0-1.0之间,“缩小”栏的数字设置在0.2-3.0之间,并为该方案起个名字(如New),完毕后单击“保存”按钮。

当我们需要调节大小时,只需选择“查看→全景→New”即可,如果你想恢复窗口的大小只需选择“查看→全景→复位”或者直接按下数字键5。

三、断点续看未看完的电影

有时候我们在看电影的中途需要关闭计算机,下次如何继续观看呢?其实,暴风影音已经为我们想到这一点了,它提供了一个类似于下载软件的“断点续传”的功能。选择“收藏→添加到收藏夹”,在“请选择一个快捷方式名称”栏设置一个名字,再勾选“记住位置”,单击“确定”按钮。下次播放的时候只需选择“收藏”菜单中你设置快捷方式名称就可以继续观看了。不过该功能同样并非支持所有格式,至少我在测试播放rmvb格式时不支持。

你还可以选择“收藏→管理收藏夹”来管理你添加的收藏项,包括给他们重命名、移动其顺序等。

四、看电视剧的完美解决方案

MM喜欢看电视剧,于是下载了很多电视剧。不过每集电视剧都有一段序幕,她不想看,问我有办法每次不看序幕直接进入正题没?仔细研究了一下,我用下面的方案完美解决了看连续剧的问题:

方法一:首先将要观看的电视剧都拖动到暴风影音的播放列表中,调整其播放次序为正常次序,接下来选择“查看→选项”,切换到“播放器”标签,勾选“使用全屏方式打开文件”,在每集开始的时候按下Ctrl+G键打开“转到”窗口,在“时间”栏中填写电视剧片头显示需要的时间后,回车或者点击“转到”按钮即可。

方法二:首先选择“查看→选项”菜单打开“选项”设置窗口,切换到“其他”标签,在“步进间距(小,中,大;毫秒)”栏将连续剧的片头时间填写进去(注意此处单位为毫秒),接下来在播放的时候只需要按下热键“→”就行了,或者选择“播放→逐帧步进”并开始播放即可。

五、声道切换四种方法

很多电影使用双语压制而成,这里就可能会需要切换声道。在Windows Media Player或者超级解霸中我们可以非常简单的切换声道,在暴风影音中同样可以。在需要切换声道时,你可以做以下尝试:首先选择“播放→滤镜→音频切换器”进行切换;如果该菜单会灰色不可选状态,或者其中只有一个声道子菜单,你可以选择“查看→选项”,切换到“回放”标签中,在“均衡”栏拖动滑竿来设置左右声道。

或者切换到“滤镜”栏下的“音频切换器”标签中,勾选“启用自定义声道映射”,将“扬声器配置为2个输入通道”,并按住Shift键,分别将“前左”、“前右”、“前中”等栏都勾选“1”或者“2”(这取决于你想切换到哪个声道)。

当然,如果你尝试了所有方法都不行,那就只要使用最后一招了:打开“音量控制”,拉动“波形”处的滑竿来调节左右声道。

六、使用暴风影音收看在线视频

如果你卸载了Windows Media Player,又没有安装Real Player,那就不能在线播放视频、音频节目,不过只要你安装了暴风影音就行了。首先运行暴风影音目录下的mpcassoc.exe文件,该文件是用来重新建立文件关联的程序,选中“进行文件关联”,单击“下一步”,在“关联列表”中选中“流媒体协议 mms://”、“实时流协议 (rtsp://)”、“RealNetworks 流协议(pnm://)”三项,确认后你的暴风影音就可以观看在线视频了。

接下来我们再来设置一下Real格式在线视频参数,运行暴风影音安装目录下的realcfg.exe文件,这里分别设置带宽、连接超时时间、缓冲时间、代理服务器以及播放性能等。

七、跳过安装CNNIC插件

大家在安装最新版本的暴风影音的时候,会被要求强制安装CNNIC中文域名插件,如何避免安装呢?运行“Regedit”命令打开注册表编辑器,定位到[HKEY_LOCAL_MACHINE\SOFTWARE\Storm Codec]分支,在右边窗口中新建一个名为“CNNIC”的键,将其值设置为“1”。

八、命令行也玩暴风影音

你是否知道在命令行下面也能完成暴风影音的功能,比如打开D:\1.rmvb文件,方法是运行“CMD”命令打开命令行模式,接下来进入到mplayerc.exe所在目录,运行“mplayerc.exe D:\1.rmvb /play”即可。其格式为“mplayerc.exe 文件路径 参数”,下面例举几个最为常用的命令行参数:

/sub "字幕文件" 载入一个附加的字幕
/cd 播放CD或(S)VCD 的全部音轨
/open 打开文件, 但不自动开始播放
/shutdown 成后关闭操作系统
/fullscreen 以全屏模式启动
/regvid 注册视频格式
/regaud 注册音频格式
/unregvid 视频格式
/unregaud 解除注册音频格式
/start ms 开始播放于 "ms" (= 毫秒) 处

九、在暴风影音中玩双字幕

现在很多字幕文件都潜入了多语言支持,如中文和英文。有时候你可能希望在看电影的同时也顺便学学英文,那就用用双字幕功能吧。下面简单介绍一下实现步骤:

第一步:首先在桌面上单击右键,选择“属性”菜单,切换到“设置”标签,将“颜色质量”设置为“最高(32位)”。

第二步:打开带有双字幕的DVDRip文件,暴风影音会自动加载VSFilter(也就是DirectVobSub),在暴风影音中选择“查看→选项”菜单,切换到“回放”下面的“输出”标签,在“DirectShow 视频”栏设置为“VMR7(无转换)”或者“VMR 9(无转换)”。

第三步:接下来切换到“字幕”和“默认样式”标签中,勾选“覆盖位置”,设置一下字幕的显示位置,注意该位置不要与DirectVobSub调用的字幕位置重合,以免影响正常观看。

十、备份暴风影音中的所有设置

每次重装系统后我们不仅要重新安装一遍暴风影音,而且其中的设置也随之一起丢失了。如何解决这个麻烦事呢?选择“查看→选项”菜单,在“播放器”标签中勾选“保存设定于.ini文件”。

这样大家可以看到暴风影音安装目录下有个名为mplayerc.ini和realcfg.ini的文件,其中便纪录了我们对暴风影音和Real在线视频播放的所有设置,我们只需要将他们保留备份起来,下次再覆盖回原目录即可。

类别:转载文章 | 评论(0) | 浏览()
 
     
 
 
文章分类
 
     
 
文章存档
 
 
 
 
 
 
 
     
 
最新文章评论
   

是S版的吗?
 

人云亦云
 

谢谢!我也搞好了
 

知道的能以我联系吗 我的QQ是728004795
邮箱:junwei0124@126.com 谢谢
 

大家好
我想问个问题希望大家都能帮我这个菜鸟好吗?先谢过了
我的电脑现在每...
 
     


©2008 Baidu