走在网页游戏开发的路上(二)

简介:

AS基础过关

0.  ActionScript简介

ActionScriptMacromedia(现已被Adobe收购)为其Flash产品开发的,最初是一种简单的脚本语言,现在最新版本3.0,是一种完全的面向对象的编程语言,功能强大,类库丰富,语法类似JavaScript,多用于Flash互动性、娱乐性、实用性开发,网页制作RIA应用程序开发。

ActionScript是一种基于ECMAScript的脚本语言,可用于编写Adobe Flash动画和应用程序。由于ActionScriptJavaScript都是基于ECMAScript语法的,理论上它们互相可以很流畅地从一种语言翻译到另一种。不过JavaScript文档对象模型DOM)是以浏览器窗口,文档表单为主的,ActionScript文档对象模型DOM)则以SWF格式动画为主,可包括动画,音频,文字和事件处理

如果你学过Java/C#/JavaScript,那么学习ActionScript3将非常快。其实各种语言的基本数据类型、语句、函数、类、包等用法都大同小异。下面将简单介绍ActionScript3的基本语法,着重与Java/C#/JavaScript不同的地方。

1.  数据类型

什么是数据类型?数据类型:

l  一定的数据在计算机内部的表示方式

l  该数据所表示的值的集合

l  在该数据上的一系列操作

使用数据类型来规定数据的描述和行为,有利于数据的逻辑描述和正确性检查。任何一门编程语言都包含基元数据类型、复杂数据类型。

ActionScript3中声明变量的格式如下:

var 变量名:数据类型;
var
变量名:数据类型 =
;

说明:定义变量时可以不指定数据类型,但是最好指定数据类型,当数据类型不一定时可以使用*表示(var 变量名:*

1.1基元数据类型

基元数据类型:我们在编程中频繁使用到的数据类型,语言的基本构成单元。

数据类型

描述

Boolean

布尔类型只有两个可能的值:true/false1/0)。声明了一个Boolean变量但没有初始化,默认值为false

int

int数据类型是一个32-bit的整数,取值范围为:-2,147,483,648 ~ 2,147,483,647。默认值为0

Null

Null数据类型只包含一个值null,它是String和类的默认值。其它基元数据类型,如Boolean, Number, int, uint,也包含null值,如果将null赋给上述类型的变量,在运行时会转换为相应的默认值

Number

Number可以表示整数、无符号整数、浮点数,它使用IEEE-754标准的64-bit双精度格式表示,取值范围为:-9,007,199,254,740,992 (-253) ~ 9,007,199,254,740,992 (253),默认值为NaN

String

String数据类型是16-bit字符序列,使用UTF-16格式存储。默认值为null

uint

unitUnsigned Integer,是一个32-bit的无符号整数,取值范围:0 ~ 4,294,967,295,默认值为0

void

void数据类型值有一个值undefinedundefined可以赋给未指定类型的变量或指定为*的变量

说明:在ActionScript3中数字存在上述三种类型——intuintNumber,而且Number可以表示整数、无符号整数、浮点数。那该如何选择使用呢?能够使用整数时优先使用intuint;整数有正负之分时,请使用int。只处理正整数,优先使用uint(如处理和颜色相关的数值时,使用uint);碰到或可能碰到小数点时使用Number

1.2复杂数据类型

复杂数据类型:是相对基元数据类型而言的,复杂数据类型由一些基于数据类型组成。如数组Array,可以直接由一些数字或字符串作为元素组成。复杂数据类型还可以由一些复杂数据类型组合而成,如二维数组,Object对象它们包含3个数组。

数据类型

描述

Object

Object数据类型由Object类定义,它是ActionScript中所有其它类的基类。它可以看出是一种关联数组,包含键/值对,如:

var map:Object = { name:"Tyler", sex:"male" };

Array

Array一组数据的集合。ActionScript中的数组是以非零整数为索引的非类型化、稀疏数组。

非类型化,即数组中所有元素不一定要相同。例如,下面的这个数组含有一个字符串、一个整数、一个布尔值、一个对象:

var data:Array = ["a", 1, true, new Object()];

稀疏,即不要求数组中每个位置都必须都有元素,可以留空。如,在索引0处有一个元素,在索引5处有另一个元素,而这两个元素之间的索引位置却是空的。在这种情况下,位置1至位置4的元素是未定义的,表示这些位置不存在元素,而不一定存在值为undefined的元素。

Vector

VectorArray的变种,仅Flash Player 10以上版本支持。Vector是类型化的、密集数组。

类型化,即数组中元素类型必须一样;密集,即数组中所有位置必须有值或者为null。与Array相比,Vector不仅类型更安全,并且性能更高。

Date

Date类表示日期和时间信息。Date类的实例表示一个特定时间点,可以查询或修改该时间点的属性(如月、日、小时和秒)。Date类用于检索相对于通用时间(格林尼治平均时,现称为通用时间或UTC)或相对于本地时间(由运行 Flash Player 的操作系统上的本地时区设置决定)的日期和时间值。Date类的方法不是静态方法,但仅应用于调用该方法时指定的单个Date对象。

Error

Error类包含有关脚本中出现的错误的信息。开发ActionScript 3.0应用程序过程中,如果在Flash Player的调试版中运行已编译的代码,将弹出对话框显示Error类型的异常或子类异常,以帮助排除代码中的故障。可以使用Error构造函数来创建Error对象。通常,将新的Error对象从try代码块中引发,然后由catchfinally代码块捕获。

Function

ActionScript中用户定义的函数和内置函数都由Function对象来表示,该对象是Function类的实例。

类的方法与Function对象略有不同。与普通函数对象不同,方法和与其关联的类对象紧密关联。因此,方法或属性具有在同一类的所有实例中共享的定义。可以从实例提取方法并将其处理为“绑定”方法(保留与原始实例的链接)。对于绑定方法,this关键字指向实现该方法的原始对象。对于函数,this在调用函数时指向关联对象。

RegExp

RegExp类允许使用正则表达式(即可用于在字符串中执行搜索和替换文本的模式)。

XML

AS3中,XML数据类型是AS3的内置数据类型,XML对象有自己的运算符。通过AS3的核心类XML类和XMLLIST类来实现XML的操作。XML类包含用于处理XML对象的方法和属性。XML类(以及XMLListNamespaceQName类)可实现ECMAScript for XML (E4X)规范(ECMA-3572版)中定义的强大的XML处理标准。

使用toXMLString()方法可返回XML对象的字符串表示形式,不管该XML对象具有简单内容还是复杂内容。

XMLList

XMLList类中包含用于处理一个或多个XML元素的方法。XMLList 对象可以表示一个或多个XML对象或元素(包括多个节点或属性),因此,可以对作为一个组的多个元素调用方法,也可以对集合中的各个元素分别调用方法。

如果XMLList对象只包含一个XML元素,那么可以直接对XMLList对象使用XML类方法。

 

2.  运算符

ActionScript3和一般编程语言一样支持以下运算符,而且功能一样:

l  赋值运算符(=

l  算术运算符(+-*/%

l  算术赋值运算符(+=-=*=/=%=

l  关系运算符(==!=><>=<=

l  逻辑运算符(&&||!

l  三元运算符(?:

除此之外,ActionScript还有关系运算符:全等运算符===、不全等运算符(!==,它们与==!=的区别在于在进行比较时不会进行类型转换(唯一例外的是把intuintNumber看成是一样的数据类型)。

3.  流程控制

ActionScript3和一般编程语言一样支持以下流程控制功能:if-elsewhiledo-whilefor,用法也相同。但同时还支持for…infor each…in两种新的流程控制。它们用来枚举一个集合中所有的元素。所谓枚举,就是挨个访问集合中所有的元素。那跟for有什么区别呢,引入它们有什么好处呢?

遍历数组时,我们可以通过索引和数组长度来遍历所有的元素。但是,如果使用Object时怎么办?在Object中,成员只可以通过成员的名字字符串(即键值对中的“键”)访问,并不拥有数组索引递增的规律。那么为了访问像Object这样的非数字索引的集合,必须引入另外一种内建机制,在不知道成员的名字时,仍然可以访问到每个成员。这就是for…infor each…in被设计的原因。

那么for…infor each…in之间有什么异同呢?for…in的枚举变量代表的是键,必须通过数组访问符([])加上这个键,才能访问到整个集合成员。而for each…in的枚举变量则直接代表集合中的成员。如:

for…infor each…in

                     var dict:Object = { a:1, b:2, c:3 };

                    

                     for (var k:* in dict)

                     {

                            trace("key:" + k

                            + "\tvalue:" + dict[k]);

                     }

                     for each(var j:* in dict)

                     {

                            trace(j);

                     }     

//输出:

key:a   value:1

key:b   value:2

key:c   value:3

1

2

3

由此可以得出:当程序需要使用键的信息时,用for…in;只需要访问集合成员时,那么使用for each…in更方便。

breakcontinue

breakcontinue用来控制循环流程,在循环体内使用。break用来直接跳出循环,continue用来结束当前循环进入下次循环。

在嵌套循环中,breakcontinue只能控制当前循环流程,如果想最里层循环直接跳出等,在别的语言中使用breakcontinue是没有用的。因此,在ActionScript3中它们还有更强大的流程控制功能:标签用法。这跟c语言goto语句中的标签用法类似。给每层循环命名,然后使用break 标签名和continue 标签名指定对哪层循环进行控制。

相关文章
|
6天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
17天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1318 7
|
4天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
291 128
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
3天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
16天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1383 87
|
3天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
5天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
272 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
5天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
223 82
2025年阿里云域名备案流程(新手图文详细流程)