flashactionscript30游戏编程实训指导手册2内容摘要:

进行编译的,但是某些示例将生成意外的值: var myUInt:uint = 3。 // Assign int/Number value to uint variable trace(myUInt)。 // 4294967293 var myNum:Number = sampleUINT。 // Assign int/uint value to Number variable trace(myNum) // 4294967293 var myInt:int = + 1。 // Assign Number value to uint variable trace(myInt)。 // 0 myInt = + 1。 // Assign uint/Number value to int variable trace(myInt)。 // 2147483648 下表概述了将其它数据类型转换为 Number、 int 或 uint 数据类型的结果。 转换为 Boolean 在从任何数值数据类型( uint、 int 和 Number)转换为 Boolean 时,如果数值为 0,则结果为 false ;否则为 true。 对于 Number 数据类型,如果值为 NaN,则结果也为 false。 下面的示例说明在转换 0 和 1 等数字时的结果: var myNum:Number。 for (myNum = 1。 myNum2。 myNum++) { trace(Boolean( + myNum +) is + Boolean(myNum))。 } 本示例的输出结果演示在这三个数字中,只有 0 返回 false 值: Boolean(1) is true Boolean(0) is false Boolean(1) is true 在严格模式下,系统会对布尔变量进行特殊处理,因为您不必转换即可向布尔变量赋予任何数据类型的值。 即使在严格模式下,也可以将所有的数据类型隐式强制为 Boolean 数据类型。 换言之,与几乎其它所有数据类型不同,转换为 Boolean 数据 程序设计实践与游戏编码指导手册 9 类型不是避免在严格模式下出错所必需的。 下面的几个示例全部是在严格模式下编译的,它们在运行时按照预期的方式工作: var myObj:Object = new Object()。 // instantiate var bool:Boolean = myObj。 trace(bool)。 // true bool = random string。 trace(bool)。 // true bool = new Array()。 trace(bool)。 // true bool = NaN。 trace(bool)。 // false 下表概述了在从其它数据类型转换为 Boolean 数据类型时的结果: 转换为 String 从任何数值数据类型转换为 String 数据类型时,都会返回数字的字符串表示形式。 在将布尔值转换为 String 数据类型时,如果值为 true,则返回字符串 true ;如果值为 false,则返回字符串 false。 在从 Object 类的实例转换为 String 数据类型时,如果该实例为 null,则返回字符串 null。 否则,从 Object 类 转换为 String 类型会返回字符串 [object Object]。 在从 Array 类的实例转换为 String 时,会返回一个字符串,其中包含所有数组元素的逗号分隔列表。 例如,在下面的示例中,在转换为 String 数据类型时,将返回一个包含数组中的全部三个元素的字符串: var myArray:Array = [primary, secondary, tertiary]。 trace(String(myArray))。 // primary,secondary,tertiary 在从 Date 类的实例转换为 String 时,会返回该实例所包含日期的字符串表示形式。 例如,下面的示例返回 Date 类实例的字符串表示形式(输出结果显示的是太平洋夏令时): var myDate:Date = new Date(2020,6,1)。 trace(String(myDate))。 // Fri Jul 1 00:00:00 GMT0700 2020 下表概述了在将其它数据类型转换为 String 数据类型时的结果: 程序设计实践与游戏编码指导手册 10 常数 ActionScript 支持 const 语句, 该语句可用来创建常量。 常量是指具有无法改变的固定值的属性。 只能为常量赋值一次,而且必须在最接近常量声明的位置赋值。 例如,如果将常量声明为类的成员,则只能在声明过程中或者在类构造函数中为常量赋值。 下面的代码声明两个常量。 第一个常量 MINIMUM 是在声明语句中赋值的,第二个常量 MAXIMUM 是在构造函数中赋值的。 请注意,此示例仅在标准模式下进行编译,因为严格模式只允许在初始化时对常量进行赋值。 class A { public const MINIMUM:int = 0。 public const MAXIMUM:int。 public function A() { MAXIMUM = 10。 } } var a:A = new A()。 trace()。 // 0 trace()。 // 10 运算符的优先级 下表按优先级递减的顺序列出了 ActionScript 中的运算符。 在该表中,每一行中包含的运算符优先级相同。 表中每一行运算符的优先级都高于出现在它下面的行中的运算符。 程序设计实践与游戏编码指导手册 11 决策机制 在 AS3 中程序的决策主要由以下语句来执行: 条件语句: if… else if… else if switch 循环语句: for for… in for each… in while do..while 大部分语法与 C++或 Java 类似,我们来看一下大家比较不常用的 for… in 和 for each… in。 for..in 循环访问对象属性或数组元素。 例如,可以使用 for..in 循环来循环访问通用对象的属性(不按任何特定的顺序来保存对象的属性,因此属性可能以看似随机的顺序出现): var myObj:Object = {x:20, y:30}。 for (var i:String in myObj) 程序设计实践与游戏编码指导手册 12 { trace(i + : + myObj[i])。 } // output: // x: 20 // y: 30 还可以循环访问数组中的元素: var myArray:Array = [one, two, three]。 for (var i:String in myArray) { trace(myArray[i])。 } // output: // one // two // three for each..in 循环用于循环访问集合中的项,这些项可以是 XML 或 XMLList 对象中的标签、对象属性保存的值或数组元素。 如下面这段摘录的代码所示,可以使用 for each..in 循环来循环访问通用对象的属性,但是与 for..in 循环不同的是, for each..in 循环中的迭代变量包含属性所保存的值,而不包含属性的名称: var myObj:Object = {x:20, y:30}。 for each (var num in myObj) { trace(num)。 } // output: // 20 // 30 您可以循环访问 XML 或 XMLList 对象,如下面的示例所示: var myXML:XML = users fnameJane/fname fnameSusan/fname fnameJohn/fname /users。 for each (var item in ) { trace(item)。 } /* output Jane Susan John */ 还可以循环访问数组中的元素,如下面的示例所示: var myArray:Array = [one, two, three]。 for each (var item in myArray) 程序设计实践与游戏编码指导手册 13 { trace(item)。 } // output: // one // two // three 函数 在 ActionScript 中可通过两种方法来定义函数:使用函数语句和使用函数表达式。 您可以根据自己的编程风格(偏于静态还是偏于动态)来选择相应的方法。 如果您倾向于采用静态或严格模式的编程,则应使用函数语句来定义函数。 在这里仅向大家介绍 :使用函数语句 ,因为主符合大家 C++的编程习惯。 函数语句 函数语句是 在严格模式下定义函数的首选方法。 函数语句以 function 关键字开头,后跟: • 函数名 • 用小括号括起来的逗号分隔参数列表 • 用大括号括起来的函数体 — 即,在调用函数时要执行的 ActionScript 代码 例如,下面的代码创建一个定义一个参数的函数,然后将字符串 “hello” 用作参数值来调用该函数: function traceParameter(aParam:String):void { trace(aParam)。 } traceParameter(hello)。 // hello 函数的其他概念请大家查看 AS3 帮助文档。 实例:猜数字 学编程没有任何捷径,最好的办法就是动手,看书是远远不够的,实际操作比看几遍书更有效,接下来我们通过一个游戏来学习。 游戏的规则:让玩家猜一个 1100 之间的数字,玩家每猜一次都会有一个提示,告诉玩家现在猜出的数字比要猜的大还是小,这样可以缩小下一次的猜测范围。 每次猜测的数字都会记录下来,直到玩家猜对这个数字,游戏结束。 场景设计: 场景元素: 开始按钮,命名为 btnStart 提 交按钮,命名为 btnSubmit 一个猜数字输入框,命名为 txtInput 一个动态本文提示框,命名为 txtTip 程序设计实践与游戏编码指导手册 14 一个历史猜测记录显示框,命名为 txtHis 注:元素的命名尽量使用容易反映该元素功能或用途的单词,前面加上一定的类型前缀。 游戏代码: // 全局使用的目标数字 var suc:int。 // 调用游戏初始化方法 init()。 // 游戏初始化方法,设定游戏开始前的场景布局、状态 function init():void{ = false。 = 点击开始进行游戏。 // 注册 2 个鼠标点击事件 (, onStartHandler) (, onSubmitHandler)。 } // 处理“开始”按钮的事件 function onStartHandler(event:MouseEvent):void{ = false。 = true。 =。 =。 suc = (()*100) + 1。 } // 处理“提交”按钮的事件 function onSubmitHandler(event:MouseEvent):void{ var str:String = trim()。 if(isInteger(str)){ (str+)。 if(int(str) suc){ = 您猜的数字大了点,请猜一个小点的。 =。 } if(int(str) suc){ = 您猜的数字小了点,请猜一个大点的。 =。 } if(int(str) == suc){ = 恭喜您,猜对了。 = true。 = false。 = 再来。 } } 程序设计实践与游戏编码指导手册 15 else{ = 请输入一个 1- 100 间的数字。 } } // 使用正则表达式,判断参数是否为整数 // 是整数就返回 true,不是就返回 false function isInteger(char:String):Boolean{ if(char == null){ return false。 } char = trim(char)。 var pattern:RegExp = /^[\+]?\d+$/。 var result:Object = (char)。 if(result == null) { return false。 } return true。 }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。