要输入,我们的函数改写好了:
function moveClip (theClip, xDist, yDist) { theClip._x += xDist; theClip._y += yDist; }
当我们要实现原来函数功能的时候,现在调用新函数就变成 moveClip (ball, 10, 10);
定义函数的时候function moveClip (theClip, xDist, yDist) {
这里的theClip等参数(parameters)只是定义,本质上说是不存在的,因为没有内容嘛 当我们用moveClip (ball, 10, 10);调用的时候,ball就输入到theClip中去了,这里的ball称为arguments(偶读得书少,不会翻译)
arguments可以是一个变量,也可以是一个表达式(例如\,先得出结果再传输给函数)只要用逗号隔开各个参数就行 函数如何结束呢
正常来说,函数运行完 {}里所有语句结束,我们也可以用一句AS:return; 让它中途结束,例如:
function say(msg) { return; trace(msg); }
这个函数被调用的时候将什么都不做就结束 return还有更重要的用途:
function sqr { // Squares a number 平方 return x * x; }
a=sqr(2); //a将会被赋予2的平方 4 return更重要的用途就是返回数据
在AS里面,有个内建的函数Math.sqrt(就是说你敲入的时候会变色),其功能和我们刚才做的sqr函数是一样的,现在你该知道内建函数也没什么神秘的,我们一样可以做出相同功能的来。
第八章 第二个版本选择题的制作
读到这你发现什么,我是发现了,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 (\
// 不复杂不复杂,\+ answer.currentAnswer + \第一题的时候就是q1answer,第二题是q2answer,把参数choice传过来的值放到两个变量里面而已 if (answer.currentAnswer == numQuestions) { // 判断是不是两题都答完了,是就转到问题结束帧 gotoAndStop (\ } else {
gotoAndStop (\} }
// 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(\
totalCorrect++; } }
// Show user's score in an on-screen text field 将答案显示出来,与第一个例子同
displayTotal = totalCorrect; }
好了,第一帧的函数写好了,之后每个答案的选择按钮就简单了 例如第一题的选项一,就写: on (release) { answer(1); }
第二题的写法同上(如果你的选择题有很多道,做法都是一样的,只要复制第一题,然后把题目改了就行)
最后在quizEnd帧里面调用改题的函数gradeUser(); 分析第二个例子是代码,你会发现比第一个例子精简了很多。 而集中在同一帧的代码,将: * 更容易修改 * 更容易升级 * 更少的出错机会 * 更容易查错
* 更精简(更少的字节数) 第九章 数组(arrays)
在下一个新版本的多选题里,我们将使用什么AS的特性,来让它更好呢? 那就是数组。
数组就是一系列的数据(MOOCK又开始上课了,chocobo的英文和计算机都不算好,为免误人子弟,概念性的东西尽量精简) 例如这样两个变量储存的数据: fruit1 = \fruit2 = \
它们是互相独立的,使用起来很不方便,我们需要的是数组,以下是数组的定义方法,用“”框住,用“,”分隔开每个元素: fruitList = [\
现在两个数据是放到同一个数组里面了,我们开始详细解说数组 数组里面每一个数据称为元素(element)。
而每一个元素都有个独立数字代表所处的位置,数字叫索引(index),注意! 第一个数据的索引是0,第二个才是1
要按索引来提出数据,我们要用一个运算符,例如使用fruitList第一个元素赋值给a:
a=fruitList;
又例如将a的值赋给fruitList第一个元素: fruitList=a;
当然里面也可以放表达式、变量: var index = 3; // Set numApples to 2 var a = fruitList[index]; 下面是个使用表达式的例子:
// Create a myFrames array. Note the legal formatting. 建立一个记录LABEL的数组