TKCB 发表于 2018-2-3 14:47:18

【AS3新手教程】——第4章 从变量开始吧!

本帖最后由 TKCB 于 2018-11-26 11:48 编辑

第4章 从变量开始吧!
现在就让我们正式开始ActionScript 3.0编程的学习之路吧!但是从那一部分开始讲呢?真的很不好选,因为基础的东西好几个都是相互牵连的,从那个开始貌似都不够好,既然其他教程都是从变量开始的,那我也从变量开始吧!变量是什么呢?先从原因说起吧。
下载:本章的Flash练习文件
一、变量的由来(小故事)用一个小故事形象的说说变量的由来吧(专业人士勿喷,只是为了让新手理解而已)。“小量”是一个大型公司的库房总管,刚上任没多久,他发现一个严重的问题。以前主管把库房钥匙进行了分区分类编号,虽然很整齐,就像身份证号码一样。但是他觉得这样虽然很好,但是还是很难辨别。因为库房数量有点多,如果能给库房起个名字就好了(就像人名字一样),只要分区合理,即使名字重复也不会混乱。说干就干,于是他改良了钥匙的命名方式,非常好用。之后这种命名方式广为流传,同行的库房主管纷纷使用这种命名方式对钥匙进行命名,而流传久了之后大家纷纷称这套钥匙命名方式为“变量”了,取其“变革“的意思,“量”是为了记住小量的功绩。

二、程序中的变量是什么?在学习变量之前,我们先来回忆一下自己对电脑的认知。电脑中有以各种形式展示和储存的“文字”、“数字”,那么在程序中其实文字和数字也是最基础的程序组成部分。变量就像钥匙一样,它对应一个房间,这个房间可以装“文字”、“数字”以及各种各样的数据或者代码程序。而变量就是这个房子的钥匙,变量也有自己的名字(想想上面的故事)。玩游戏的时候钥匙通常有很多颜色(黄钥匙、蓝钥匙、红钥匙等),每一种颜色对应一种“钥匙类型”。而在ActionScript中,变量也有类型,文字是一种类型,数字有三种类型:整数、正整数、任意数(可以是小数、整数、负数的任意数字,专业术语为浮点数,请记住浮点数的称呼,因为后面会统一使用浮点数这个称呼)。当然除了文字和数字,在程序中还有很多类型,这个在后面的章节进行介绍(因为数据类型是程序中非常重要的概念)。变量的类型专业点都叫做“数据类型”,因为在程序的世界,一切都是数据。简单来说,在ActionScript中,变量就是用来操作程序数据的,变量本身不是数据,变量是类似钥匙的东西。

三、变量的声明和使用看到这里或许你还是对变量不明不白,不要紧,先写几句代码,然后在去回味前面的那些话,或许就豁然开朗了。下面是两个变量在代码中的写法,“//”为注释代码,也就是解释代码的文字,没有任何代码作用。// 通俗翻译:我们拿了一把钥匙,将它命名为“myName”,给它的房间装了“TKCB”这四个文字(英语),钥匙的类型是“文字类型”
// 专业翻译:我们声明了一个变量,将它命名为“myName”,给它的赋值为“TKCB”这四个文字(英语),变量的数据类型是“文字类型”
var myName : String = "TKCB";

// 通俗翻译:我们拿了一把钥匙,将它命名为“number1”,给它的房间装了“1.23”这个数字(浮点数),钥匙的类型是“浮点数类型”
// 专业翻译:我们声明了一个变量,将它命名为“number1”,给它的赋值为“1.23”这个数字(浮点数),变量的数据类型是“浮点数类型”
var number1 : Number = 1.23;怎么样,是不是大概对变量有了一个简单的了解的印象呢?下面会一点点将变量的所有细节解释给大家。
1. 声明变量的语法不论是语文、数学,还是英语,都有一定的书写规则,变量也是一样的,它也有自己的书写规则(我们称之为语法)。使用变量之前,需要先声明(创造)变量,然后才可以使用这个变量。在ActionScript中声明变量的格式如下:var 变量名称 : 数据类型;
var 变量名称 : 数据类型 = 值;“var”是一个关键字用来声明变量(关键字是代码中固定的语法格式,必须遵守),然后跟着一个空格(用来区分变量名和关键字),之后跟着“:”英文冒号(代码语法格式中都使用英文标点符号),再就是数据类型。如果要在声明变量时候,就给变量赋予值的话(也可以之后再赋值)。就在数据类型之后跟着“=”等于号,最后写上值还有“;”分号。
*专业知识1:在“:”冒号和“=”等于号两边都是可以加一些空格等用来让代码更优美(也就是让代码不那么挤在一起,不方便查看),注意“var”和变量名之后这个空格是必须的。
*专业知识2:在ActionScript中一行代码的末尾应该加上“;”分号,表示这行代码结束了,也可以不加,但这不是好习惯(从这里可以看出,代码是一行一行的)。
*专业知识3:其实在声明变量的时候,可以不需要数据类型(冒号也就不要了),但这样的变量其实也有类型,它的类型是undefined,翻译成中文就是未定义类型(所以在代码中数据都有类型,那怕是没有类型也是有未定义类型的,是不是有点绕口呢?)。
*专业知识4:声明变量时候不赋值是不是变量就是空的,什么都没有呢?不是的不同的数据类型都会有自己的默认值,这个在之后的章节会进行介绍。
下面我们看一些错误和正确的变量声明的方式吧!//// 错误的例子
// 没有使用var关键字,说明没有声明变量,错误
a;

// 没有使用var关键字,同上,错误
b=4;

// var关键字和变量名之间没有空格,代码无法识别,错误
varc=10;

// 变量的数据类型是String(文字)类型,但是赋值时候却是数字类型的值,错误
var d:String=20;


////正确的例子
// 声明了一个“efg”名字的变量,数据类型为Number(浮点数),值为“10.01”
var efg:Number=10.01;

// 声明了一个“h”名字的变量,数据类型为int(整数),值为“-20”
var h:int = -20;

// 声明了一个“i”名字的变量,数据类型为uint(正整数),值为“100”
var i : uint = 100;

// 声明了一个“j”名字的变量,数据类型为String(文字),值为“www.11ria.com”
// 注意的是,不同的数据类型赋值的写法稍有不同,String就需要使用""或者''将值包裹起来
var j : String = "www.11ria.com";

// 下面两种方式都是声明未定义类型的变量,他们的效果是一样的,数据类型都是undefined
var k;
var m:*;试着自己打开Flash软件,声明一些变量试试,然后发布测试SWF,如果不幸你的Flash弹出如下类似的提示“编辑器错误”,那就说明你的变量声明是错误的,在重新阅读上面的教程吧。

2. 变量的使用初探因为变量通常不是单独使用的,所以本章没有办法过于深入的介绍变量的使用方法。但是结合之前的章节(第3章 献给Flash动画师的常用AS3代码)中提到的一些代码功能。我们试着给大家展示一些变量最基本的使用方法。使用方法1:我们可以使用数字变量做最基础的数字运算(加减乘除等等)。我们应该都知道电脑的设计之初就是为了超大的数学计算。// 小明有10个苹果,变量a
var a : Number = 10;
trace( a );

// 小红有20个苹果,变量b
var b : Number = 20;
trace( b );

// 请问小明和小红一共几个苹果,变量c
var c : Number = a + b;
trace( c );

// 再问小明和小红平均有几个苹果,变量d
var d : Number = c / 2;// 提示:在程序运算中“/”号就是数学中的“÷”号
trace( d );通过这个练习,是不是觉得其实变量其实也挺熟悉的,和学校中的数学。试试自己写更多的数字变量之间的计算吧,在代码中基础的数学仍然适用。
使用方法2:结合之前“第3章的上下翻页”的练习,说下不使用prevFrame()和nextFrame()方法,如何使用变量+gotoAndStop实现上下翻页的功能。下面之前练习的代码,我们如何修改这个代码,加入变量实现我们使用gotoAndStop()上下翻页的功能。你可以自己想一想,试一试,如果不知道如何做,再继续往下看吧。// 停止播放
stop();

// 下面写法就是正常的函数,有名字,所以就不会被多次调用执行,自己多次试试感受下区别吧!
// 上一帧
prevBtn.addEventListener( MouseEvent.CLICK, prevBtnMouse );
function prevBtnMouse ( eve:MouseEvent ) : void
{
      // 跳转并停止在上一帧
      prevFrame();
}

// 下一帧
nextBtn.addEventListener( MouseEvent.CLICK, nextBtnMouse );
function nextBtnMouse ( eve:MouseEvent ) : void
{
      // 跳转并停止在下一帧
      nextFrame();
}下面是我们加入变量修改的代码,可以看到if(){}这个代码是我们没有说过的,下面会解释给大家,后面章节也会特意单独说的。// 停止播放
stop();

// 创建一个变量,用来记录当前时间轴的帧数
var frame : uint = 1;

// 再创建一个变量,用来表示当前时间轴的总帧数
var totalFrame : uint = 6;

// 下面写法就是正常的函数,有名字,所以就不会被多次调用执行,自己多次试试感受下区别吧!
// 上一帧
prevBtn.addEventListener( MouseEvent.CLICK, prevBtnMouse );
function prevBtnMouse ( eve:MouseEvent ) : void
{
      // 跳转并停止
      if ( frame > 1 )
      {
                frame = frame - 1;                // 其实还可以简写为:frame++;
                gotoAndStop( frame );
      }
}

// 下一帧
nextBtn.addEventListener( MouseEvent.CLICK, nextBtnMouse );
function nextBtnMouse ( eve:MouseEvent ) : void
{
      // 跳转并停止
      if ( frame < totalFrame )
      {
                frame = frame + 1;                // 其实还可以简写为:frame++;
                gotoAndStop( frame );
      }
}首先我们在stop()代码下面,增加了两个变量,一个记录当前时间轴帧数,一个表示总的时间轴帧数。这两个变量应该不难理解吧,如果不理解,再去把上面讲的知识看一遍。然后我们将prevFrame()替换为if(){……},我们来解释下给大家听吧。if ()是一个判断语句(代码),大致就是如果当前帧数大于1,则执行“{}”里面的代码,否则不执行“{}”里面的代码(这就跟明天如果不下雨,我就出去玩耍,下雨我就呆在家一样的)。“frame = frame - 1;”的意思就是变量现在的值,等于变量原来的值减去1,想一想如果当前是第5帧,则5-1等于4,则gotoAndStop()跳转的是第四帧,就实现了向上翻页的功能。
向下翻页的代码和向上翻页很类似,相信聪明的你一看就懂,我也不想多打字解释了。变量在代码中就像积木,代码还有很多形状的积木,拼过积木的同学都知道,只要会玩,一个积木可以千变万化,变量也是类似的道理。但你也不要被千变万化吓到了,其实会玩的积木高手眼里,再千变万化的积木仍然是积木而已。后面我们在慢慢给大家演示变量的使用吧!

四、 *变量命名规范(专业知识)虽然本节可以跳过,但是强烈推荐认真阅读。变量都有名称,那么如何有序、良好、整齐的给变量命名是一个学问。更何况变量只是代码的一部分,还有很多代码需要命名,那么如果都是随便混乱的命名,估计你使用起来也无比头疼。好的命名规范也为日后同事之间的合作、公司的人员素质考核打下良好的基础。我(TKCB)自己就写过自己的命名规范文档,也阅读过大量的关于命名规范的文档,加起来估计至少有三五十页A4纸吧!下面我来介绍一些业界通用的变量命名规范。
★ 尽量使用有含义的英文单词作为变量名使用英文单词是业界的通用做法,请勿使用拼音代替英文。变量要存储什么值,就给变量命名为这个值对应的英文单词。比如存储我的昵称TKCB,那么就命名为tkcbName会比较好,myName或name也可以,但是如果多个人就有点不合适了。如果英语好,大家可以直接命名,差点的同学例如我,就使用翻译工具来翻译词语为英文,然后命名。其实很多人对于代码有天生恐惧,例如我英语非常差(考试全靠蒙,三十分是我的常态),那么其实不用太害怕,因为在编程中常用的英语单词也就一百来个,再多点不过两百来个,只要吃点苦,咬咬牙就记住了。当初我也是为了记住一些关键单词,学习了很长时间英语,还写了不少英语单词表格用来帮助我记忆英语单词。
★ 使用骆驼峰式命名法骆驼峰命命名法很简单,如果变量名为一个英语单词,则全部小写(例如:name、tkcb)。如果有两个或者多个单词组成变量名,则第二个及之后的单词首字母大写,其他仍然小写(例如:myName、tkcbName)。上面其实是小骆驼峰命名法,其实还有大骆驼峰命名法,区别只有一个,就是第一个单词首字母也大写(例如:MyName)。小骆驼峰命名法适用于变量的命名,大骆驼峰命名法在编程中另有用途,在之后的章节会提到。
★ 变量名越短越好,含义越清晰越好因为代码中的名字会超级多,各种变量和其他代码,如果名称都很长,那么会阅读很累。但是也不能过于简短而含义不清晰,那么就得不偿失了。其实这两个是非常矛盾的,但是我们尽量去做就好,开始经验不足不要紧,学学别人的代码。后面经验丰富了,就知道如何命名即短小又精干了。说几个例子吧,Minimum和Maximum在代码中常常会简写为min和max。不仅仅是单词的简写,还有就是需要大家能用一个单词别用两个单词,总之符合短小精干的原则。

五、 *变量的实现本质:变量、引用、对象、数据(进阶知识)本节推荐给有专业基础或者想深入了解ActionScript的朋友阅读,新手建议跳过本节,后续对编程有了一定了解后再回看本节。首先我们要知道的是ActionScript 3.0是面向对象编程,编程中一切都是数据,而AS3面向对象编程中一切数据都是对象。编程语言中有两大思想体系,一种是面向过程编程,一种是面向对象编程。这就像我们世界上的国家有两大体系,一个是社会主义国家,另一个是资本主义国家(这样比喻虽然不太恰当,但是大家只要在脑子中形成一个大致的概念就可以了)。AS3新手往往以为变量持有的是数据,其实不完全正确。正确的是变量持有的是引用,而引用持有的是对象,对象对应的是数据。引用是什么呢?程序运行的时候,每一个数据(对象)创建的时候都会在内存(内存条)中请求一块空间来临时存储数据。不同的数据需要的空间大小都不一样,我们通过变量或者其他代码访问数据的时候,其实是通过持有的引用去访问内存中的数据。引用是一种数据类型,它指示了数据在内存中的实际地址。在AS3中引用是不可见的,但我们要记住的是变量持有引用,引用指向对象(内存中的数据),对象持有数据。

六、本章练习学习不仅是“看”,更多是要“练”!由于本章仅仅讲了变量,刚开始学代码,那就只布置一个练习给大家,后面会尽量多个练习让大家更多的练习代码。大家可以把自己的练习结果以代码、文件、截图等等任意形式回帖发布上来,相互学习。
1. 鸡兔同笼问题(经典数学问题)有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?
提示:大家试着用变量,trace(),以及最简单的加减乘除运算,用代码的形式一步步算出有多少只鸡和多少只兔子吧!没有固定代码格式,参考上面的苹果的问题的形式,一步步用trace()显示出变量的值的变化,最终求出答案。

七、总结首先我们通过一个小故事(自编)引导大家对变量有一些兴趣,之后通过一系列比喻讲解了程序中变量是什么,然后又给大家说了变量在程序中的实现(声明和使用)。后面的变量命名规范,建议大家好好阅读。最后面的变量的实现本质,如果看不懂不要紧,忘记它,然后继续往下看吧。因为它对于新手不重要,只是为了给专业或者深入了解的朋友,等你有了一定基础再回头来看吧!

TKCB问答编辑:能不能用一句话总结下变量是什么?TKCB:变量是被创造出来的,用来以简单的方式,操作电脑数据的东西。(学过底层编程的同学肯定知道,要以指令等等操作电脑数据是一个极其繁琐的过程,所以变量实在是一个好东西,但不幸的是底层编程可能永远不会有变量)

TKCB 发表于 2018-2-3 14:47:47

1. 大家可以如果觉得哪里写的不够好(或者一些建议),可以随时提出,帖子的方便之处,就是可以随时更新!!!!
2. 如果有大家有什么讨论的,或者不懂得,可以留言进行交流。


返回总贴:【AS3新手教程】——Animate & Flash Action Script 3.0 编程教程

叶颗 发表于 2018-3-2 17:47:32

跟第三章磕了两天,跳过了{:1_94:}

junlas 发表于 2018-6-20 10:40:40

以前有些人喜欢用中文做变量,感觉好奇怪。哈哈哈

闪闪红星 发表于 2020-6-30 17:58:47

文是好文,写的细致,易懂,可惜更新太慢了。

TKCB 发表于 2020-6-30 21:18:49

闪闪红星 发表于 2020-6-30 17:58
文是好文,写的细致,易懂,可惜更新太慢了。

后续不更新了,因为没人学,,而且很浪费精力
页: [1]
查看完整版本: 【AS3新手教程】——第4章 从变量开始吧!

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)