实用flash应用程序—打字练习(2) -
减小字体
增大字体
作者:佚名 来源:不详 发布时间:2007-12-24 20:37:15
实用flash应用程序—打字练习(2)
第3节、制作练习场景
效果如图1 所示
制作过程: 1.新增一个名为 typespacemovie 的电影剪辑
2.在 typespacemovie 新增一图层,添加两个文字区域 /:text1 和 /:text2 . 并设置他们的大小, 和字体,字符大小完全一样。 在变量名前加 /: 表示这是告诉这个变量在主 timeline 中也是可用的,而不仅仅是typespacemovie 电影剪辑中的局部变量。
第3节.制作练习场景 效果如图1 所示。实例(源文件)制作过程:
1.新增一个名为 typespacemovie 的电影剪辑
2.在 typespacemovie 新增一图层,添加两个文字区域 /:text1 和 /:text2 . 并设置他们的大小, 和字体,字符大小完全一样。 在变量名前加 /: 表示这是告诉flash这个变量在主 timeline 中也是可用的,而不仅仅是typespacemovie 电影剪辑中的局部变量。图1

图 1
3.设置text1属性为“动态文本区域,多行,自动换行”。设置 text2属性为“输入文本、多行、自动换行”。
4.回到主场景,引用电影剪辑 typespacemovie 到主场景中, 并在text1中显示原文内容。 引用电影剪辑并将其显示到屏幕上可以使用 attachmovie 来完成这项任务。不过在引用之前,要正确的设置库。 选中库中的某个symbol(元件),然后在库窗口的options(选项)菜单中选择linkage...(联接)。在 symbol linkage properities (符号连接属性)对话框中选择 export this symbol (导出这个符号), 然后赋予它一个标志符。 这actionscript 就能通过这个标着符访问这个被导出的元件了。例如 :我们把电影剪辑 typespacemovie 的标志符 设为 typespacem 再 通 过attachmovie("typespacem","typespace",depth); 这条命令将符号 typespacem复制到主场景上,命名为typespace,并给其设定一个深度值 depth(整数型变量)。 flash必须为每一个电影剪辑分配一个深度值。当多个电影在屏幕上重叠时,具有最高深度值的电影剪辑将会显示在最上面。并且同个层只能有一个剪辑,如果尝试使用一个已存在的层次,新的电影剪辑将会取代原有的。
5.整理代码:主场景只有一各关键帧: attachmovie( "typespacem","typespace",0 ); loadvariablesnum("english.txt",0); stop();3.6.预览结果,哈!在text1 文字区域显示了 english.txt中的变量, text2文字区域可以进行键盘输入了。到此,练习场景的制作学习完毕。
第4节、菜单选项和成绩判断
预览上一节的成果,好像太单调了点。现在我们将做出类似于 windows 应用程序那样的菜单选项,增添以下效果:
1.让玩家自己可以选择练习内容和时间。
2.甚至可以自己拟定练习的难易程度。
3.能判断玩家每次输入是否正确,并发出提示。
4.统计最后成绩。
4.1 创建声音效果
4.1.1.从flash以外导入声音文件。
通过:文件/导入... ,打开你想要的声音文件,flash5支持的格式有 .wav 和.mp3。导入后的 .wav 文件会被flash压缩, 即变成mp3格式。导入后,这个声音文件的一份被压缩的拷贝将出现你的元件库里。 同样, 选取这个声音元件,联接它,为它设一个标志符,使其在 actionscript 中可用。我们导入了两个声音: error.wav 和 type.wav.
4.1.2.创建声音对象并播放。必须创建声音对象方可使用。
1 2
error = new sound() // 创建一个声音对象;
error.attachsound("errorsound"); //将输出符号为errorsound 的声音拷贝给声音对象error;
error.start(begin,loopnum);//播放声音error,参数begin表示开始 播放的开始时间(单位秒) //参数loopnum表示循环播放的次数
4.1.2 判断当前玩家输入是否正确;
在主场景中用以下代码判断每次输入是否正确:
var temptext1=text1.charat(selection.getbeginindex()-1);
var temptext2=text2.charat(selection.getbeginindex()-1);
if(temptext1!=temptext2 %26amp;%26amp; textlength!=text2.length)
{ //当前输入错误时应触发的事件;
error.start(0,1); // 报警一次;
textlength=text2.length;//保证每按键一次只判断一次
}
if(temptext1!=temptext2 %26amp;%26amp; textlength!=text2.length)
{ //当前输入正确时,也应该有提示
type.start(0,1);// 提示正确;
textlength=text2.length;
}
这段代码有点复杂,但务必要理解,本程序的核心代码就在此了。函数 charat的原型是 mystring.charat(index);返回字符串 mystring中由 index参数 指定位置的字符。
如果index 不是一个 从0到字符串长度减 1的数,就返回字符串。
属性length: 原型string.length . 返回字符串string的长度。 selection: 它是个对象,让你设置和控制当前焦点可编辑文本域。当前聚焦的可编辑文本域是指用户的鼠标目前选中的可编辑文本区域。一次只允许有一个当前焦点可编辑文本域。所以,selection对象不用创建。 selection.getbeginindex():返回光标位置。
var:用于声明局部变量;这下初见端倪了吧。局部变量temptext2返回的是text2文本区域当前光标闪动位置的字符。temptext2返回的是文本区域text2相应位置上的字符。每当键盘输入一次,text2.length也会变化一次,我们在条件语句 if中添加代码 %26amp;%26amp;textlength!=text2.length 保证了只有键盘输入时才 判断temptext1和temptext2是否相等,达到了及时判断正误的效果
1 2