首页网页制作FlashFlash As → 正文内容

AS基础教程整理第7/13页

作者:


第八章 第二个版本选择题的制作
读到这你发现什么,我是发现了,MOOCK不是在教AS,他简直是在上编程课。

在第一个版本的制作里你发现了什么缺点?是的,输入了很多次AS,很麻烦。
我们要做的是用函数来集中我们的代码,只有集中了才好修改,越复杂的程序越是如此(想象一下在很多个MC之间查代码,真是头痛,当然是集中一块好)
这个多选题,我们就归结成两个函数吧answer和gradeUser

代码(可以直接看源程序,在上面地址那个ZIP里面的quiz-version2.fla):
大部分的代码都被集中到第一帧了,千万不要被一大堆代码吓着了,代码这么长,只是为了让阅读者看得更清楚而已。(其实越短的代码才越可怕呢,呵呵)
// Stop the movie at the first question
stop ();

// Initialize main timeline variables 定义变量
var displayTotal;        // Textfield for displaying user's score
var numQuestions = 2;    // Number of quiz questions
var q1answer;            // User's answer for question1
var q2answer;            // User's answer for question2
var totalCorrect = 0;    // Number of questions answered correctly 以上和例一一样
var correctAnswer1 = 3;  // The correct choice for question 1 第一题的正确答案
var correctAnswer2 = 2;  // The correct choice for question 2 第二题的正确答案

// Function to register user's answers 这个函数的功能是提交答题者的答案
function answer (choice) {
  answer.currentAnswer++; 
//现在answer.currentAnswer是1,正在提交的是第一题,下一次answer.currentAnswer就变成2,代表提交的是第二题
  set ("q" + answer.currentAnswer + "answer", choice);  
// 不复杂不复杂,"q" + answer.currentAnswer + "answer"第一题的时候就是q1answer,第二题是q2answer,把参数choice传过来的值放到两个变量里面而已
  if (answer.currentAnswer == numQuestions) {   
// 判断是不是两题都答完了,是就转到问题结束帧
    gotoAndStop ("quizEnd");
  } else {
    gotoAndStop ("q" + (answer.currentAnswer + 1));
  }
}

// Function to tally user's score 这个函数是改题的
function gradeUser() {
  // Count how many questions user answered correctly 将两个答案和正确答案比较,对就totalCorrect加一
  //此处用了一个for循环,大家如有疑问的,可以查AS字典,在帝国就有中文版
  for (i = 1; i <= numQuestions; i++) {
    // 下面用的eval有必要说一下,它的作用是将字符串和变量组成一个新的变量名,是个很方便的功能
    if (eval("q" + i + "answer") == eval("correctAnswer" + i)) {
      totalCorrect++;
    }
  }

  // Show user's score in an on-screen text field 将答案显示出来,与第一个例子同
  displayTotal = totalCorrect;



好了,第一帧的函数写好了,之后每个答案的选择按钮就简单了
例如第一题的选项一,就写:
on (release) {
  answer(1);

第二题的写法同上(如果你的选择题有很多道,做法都是一样的,只要复制第一题,然后把题目改了就行)
最后在quizEnd帧里面调用改题的函数gradeUser();

分析第二个例子是代码,你会发现比第一个例子精简了很多。

而集中在同一帧的代码,将:
* 更容易修改
* 更容易升级
* 更少的出错机会
* 更容易查错
* 更精简(更少的字节数)
相关文章
网友评论