FlashAS基础精典教程(9)

2008-04-02 11:06:09来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折



  // 然后问题输入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里那个),他实在太难懂了,是不是啊?呵呵

  XML,名字是不是很COOL啊,其实,FLASH里面用XML不难(其他地方的应用就……所以千万别说XML不难,是FLASH里面用不难),呵呵,好吧,开始吧。

  第十三章 XML

  XML是一种标记语言,通常用于储存,组织和传输数据,XML文档主要由一系列的元素(elements)和属性(attributes)组成,看下面一个XML的例子:

  Colin Moock

  O'Reilly

  这个例子就是由元素 BOOK, TITLE, AUTHOR, PUBLISHER 组成的。在元素里就包含了一个属性:SALUTATION 这些元素怎么让浏览器解释是什么意思呢?他需要DTD,一套决定这些标记的意义的规则。(例如我们常听说的WML、SVG,他们都是XML,但对应不同的DTD)

  XML和HTML想比需要格式更严格,格式需要:

  * tags 一定要嵌套 (就是说有就一定要有)

  * 一定要有一个根元素 (例如例子中的 BOOK)

  * 开始部分要用XML声明标记 :

  但是AS里面的XML无需DTD(这就是我说FLASH里面用XML不难的原因,哈哈)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 使用钢笔工具绘制曲线路径

下一篇: 拖拽动作连同碰撞动作周详讲解