您的位置: 首页 > 技术文档 > 多媒体制作 > Moock在FF2K1大会上的演说
FLV MetaData Injector 回到列表 Macromedia Breeze 快速安装
 Moock在FF2K1大会上的演说

作者:chocobo 时间: 2004-04-27 文档类型:翻译 来自:蓝色理想

第 1 页 由O开始
第 2 页 基础、解读、还有一些概念
第 3 页 开始第一个版本的选择题的制作
第 4 页 再来补充一点AS知识
第 5 页 可以重复的函数
第 6 页 第二个版本选择题的制作
第 7 页 数组(arrays)
第 8 页 第三个版本的选择题
第 9 页 一点面向对象编程知识
第 10 页 第四个版本的选择题
第 11 页 XML
第 12 页 最后一个版本选择题

第十二章:第四个版本的选择题

第三个版本的时候我们已经设想好,新版本中题目将是动态生成的,不用我们在FLASH的场景里面一题一题输入了,我们要做的只是输入题目和题目答案的数据就够了。
很明显,每一条题目都将是一个对象(不然我们学这么多对象的知识干嘛?),而这些所有的题目,会用一个数组来存放

再重提一下,可配合源程序学习 http://www.moock.org/webdesign/lectures/ff2001sfWorkshop/moockQuizzes.zip

好,开始设计题目的模版

模版就是一个MC,包含两个TEXT FIELD,里面不用填东西,分别起变量名为:(FOR小鸟:TEXT FIELD就是按工具条里T按钮拉出来的文本框,同时还要在文本面板(ctrl+t)里将其改为Dynamic Text,变量名则在面板的Variable处改)
* qNum (以后将显示题目的编号)
* qText (以后将显示题目的正文)
我们还要在库里面做标识,点一库面板(ctrl+l)右上的Options>> Linkage ,选第二个Expert this symbol,identifier填上questionTemplate,至此,题目模版完成

再制作选项的模版

选项模版应包括一个选择用的按钮
还有该选项的内容,一个起名为answerText的TEXT FIELD
在本例的后面,将为每一个动态生成的选项一个唯一的名字,譬如: "answer0", "answer1",..."answern".
答题者所选定的答案将由这个名字来决定,调用一个MC的名字,用的是_name这个属性
所以答题的按钮上面的AS为:
on (release) {
  // Trim the prefix "answer" off this clip's name
  // 下面使用了String.slice()方法,例如_name为answer0,它将被处理成0,slice的具体语法请查阅AS字典
  // 按钮提交什么由该MC的名字决定的,我作个标记 @@ ,记得一会看回来
  choice = _name.slice(6, _name.length);
  // 与前面的例子一样,最后将答案提交给answer函数处理,不过现在我们是在某一MC里面用外面主时间线的函数了,所以得加上_root
  _root.answer(choice);
}

最后,Options>> Linkage,标识名:answerTemplate,制作模版的工作就完成了

下面将是放在第一帧的程序主体,可要打起精神来了:

// Stop the movie
stop();
// Init main timeline variables
var displayTotal; // Text field for user's final score
var totalCorrect = 0; // Number of questions answered correctly

// Array containing the user's guesses 记录作答答案的数组
var userAnswers = new Array();

// Number of the question the user is on 记录正在作答中题目的编号
// 要注意的是,它是由0开始的,第一题的编号是0,因为我们要用到数组,数组的第一个编号是0,所以这里我们也用0
var currentQuestion = 0;


// The Question constructor
// 以下是新类型对象question的构造函数,包含三个属性:正确答案,题目正文,各个选项
function Question (correctAnswer, questionText, answers) {
this.correctAnswer = correctAnswer;
this.questionText = questionText;
this.answers = answers;
}

// Import the source file containing our array of question objects
// 咦?应该是输入各条题目的数据先啊,放哪去了?因为嘛,数据输入是个与编程无关的过程,为了让代码更优雅,这些繁琐的东西扔别地方去了,AS太长,会使查阅相当麻烦,分开存放也是好习惯!
// #include是引用外部AS命令,可以将AS分开储存于各个后缀名为AS的文件中,输入题目的代码就是放到了questionsArray.as中(记得和FLA放在同一目录下喔)
#include "questionsArray.as"

//// 我改变了一下教程的结构,把questionsArray.as的内容也插入进来了,因为跳过这段的话,看起来会有疑问
//// 以下内容系存放questionsArray.as中的

// 输入数据其实是建立对象
// MOOCK用一个数组还存放这些对象,这样对象才更易于管理
// 不要被括号给弄昏了,输入对象参数的中间还有中括号,是因为输入题目的参数“各个选项”是一个数组
// 因为是存放于数组中,每个对象之间记得应有逗号分隔
// Remember to place a comma after each object
// in the array except the last

questionsArray = [new Question (2,
"Which version of Flash first introduced movie clips?",
["version 1", "version 2", "version 3",
"version 4", "version 5", "version 6"]),

new Question (2,
"When was ActionScript formally declared a scripting language?",
["version 3", "version 4", "version 5"]),

new Question (1,
"Are regular expressions supported by Flash 5 ActionScript?",
["yes", "no"]),

new Question (0,
"Which sound format offers the best compression?",
["mp3","aiff", "wav"]),

new Question (1,
"True or False: The post-increment operator (++) returns the
value of its operand + 1.",
["true", "false"]),

new Question (3,
"Actionscript is based on...",
["Java", "JavaScript", "C++", "ECMA-262", "Perl"])];

//// 离开questionsArray.as部分,我们继续

// Begin the quiz 出题目!调用makeQuestion函数来完成,我们只需要给这个函数一个参数:题目的编号,函数就会按编号提取数据,结合我们刚才做的模版生成题目。
makeQuestion(currentQuestion);

// Function to render each question to the screen
// 下面就是makeQuestion函数
function makeQuestion (currentQuestion) {

// Clear the Stage of the last question
//这句是清理上一题生成的MC,这句从第二题开始生效,questionClip就是题目的MC名,MC从哪来的?看下面就知道了
questionClip.removeMovieClip();

// Create and place the main question clip
// 利用模版questionTemplate生成一个叫questionClip的MC,这个MC就是我们的问题
attachMovie("questionTemplate", "questionClip", 0);

// 设定MC的位置
questionClip._x = 277;
questionClip._y = 205;

// 把题目编号输入MC的qNum文本框中
questionClip.qNum = currentQuestion + 1;

// questionsArray[currentQuestion]就是数组questionsArray里的第currentQuestion个对象,例如currentQuestion是0,那么就是我们的第一条题目
// questionsArray[0].questionText就是第一条题目对象的问题属性
// 然后问题输入MC的qText文本框中
questionClip.qText = questionsArray[currentQuestion].questionText;

// Create the individual answer clips in the question clip
// 以下循环将结合选项模版生成这一条题目的各个选项的MC

// questionsArray[currentQuestion].answers记得吗?选项这个属性可是个数组,所以我们把它的长度作为循环的次数,这个数组有多大,我们就生成多少个选项
for (var j = 0; j < questionsArray[currentQuestion].answers.length; j++) {

// Attach our linked answerTemplate clip from the Library.
// It contains a generalized button and a text field for the question.
// 用answerTemplate做模版生成MC,MC名为"answer" + j ,即第一个选项MC名为answer0,第二个为answer1,选项的名字可是关系到按钮选什么的,如果你忘了,看看上面有 @@ 标记的地方
// 同时它们的深度为j,每次不同

// 但和上面不同的是,我们要把选项MC生成到题目MC里,这样我们清除题目MC的同时也清除了选项
// 所以写成questionClip.attachMovie
questionClip.attachMovie("answerTemplate", "answer" + j, j);

// Place this answer clip in line below the question.
// 设定MC的位置,第一个高度为70,之后顺序加15
questionClip["answer" + j]._y += 70 + (j * 15);
questionClip["answer" + j]._x -= 100;

// Set the text field in the answer clip to the appropriate
// element of this question's answer array.
// 下面语句的:questionClip["answer" + j]可不是指数组,j=0的时候,它代表questionClip.answer0,具体解释可见上一章。
// 这句语句的作用是把questionsArray[currentQuestion]这个对象数组里面的answers[j]数组,输入到对应的选项MC的answerText文本框中,就是该选项的内容
questionClip["answer" + j].answerText = questionsArray[currentQuestion].answers[j];
}
//生成选项的循环结束

}

// Function to register the user's answers
// 以下是记录答题者答案的函数,记录在数组userAnswers中,和上一例同
// 每一个选项如果被选都会调用此函数,并用参数choice传来作答的答案
function answer (choice) {
userAnswers.push(choice);

// 判断是否题目全部完成,是的话清楚掉题目MC,并跳转到quizEnd帧
if (currentQuestion + 1 == questionsArray.length) {
questionClip.removeMovieClip();
gotoAndStop ("quizEnd");
} else {
// 在这里改变题目的编号,然后调用makeQuestion函数再次生成新的题目
currentQuestion++;
makeQuestion(currentQuestion);
}
}

// Function to tally the user's score
// 改题的函数
function gradeUser() {
// Count how many questions the user answered correctly
for (var j = 0; j < questionsArray.length; j++) {
// 将答题数组userAnswers[j]与问题数组questionsArray[j]的属性correctAnswer逐个比较
if (userAnswers[j] == questionsArray[j].correctAnswer) {
totalCorrect++;
}
}
// Show the user's score in an onscreen text field
// 显示答对与题目数比
displayTotal = totalCorrect + "/" + questionsArray.length;
}

好了,我们来总结一下这个例子吧

我们已经完成了第三个版本结束时候定下来目标,更快捷的建设,更便易的扩展
我们的题目跟选项都是动态生成的,也就是说生成10、100题或更多题目也只需要修改questionsArray.as这个文件就可以了
如果说生成两题这个例子用时要长于上面的例子,那么生成100题,你会发现用这个例子将是最快的。还有,在100题里面修改其中一题,也是最快的。

看完了例子,希望大家不是只明白了代码的含义,最重要是理解运用对象来编程的方法。同样的例子,其实还可以用其他的对象结构来完成的,更有效地组织数据也是编程艺术的一部分

为了更进一步改进我们的例子,最后一个,就是第五个版本,将用XML代替那个存放对象的数组(也就是在questionsArray.as里那个),它实在太难懂了,是不是啊?呵呵

出处:蓝色理想
责任编辑:qhwa

上一页 一点面向对象编程知识 下一页 XML

◎进入论坛Flash专栏版块参加讨论

相关文章 更多相关链接
Flash 酷站猎手
中文ID3乱码问题MX解决方案
用AS2解决中文ID3的乱码
Flash常用效果-移动模糊效果
Flash MX 2005 制作环境预览
作者文章
Moock在FF2K1大会上的演说
制造像素字体,FLASH MX2K4?
flash mx 2004的項目管理
原 Blueidea 首页调查彻底解析
Royale,為程序員設計的FLASH?
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:10/121个记录/页 转到 页 共12个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2