as3总结(7)

还是那本游戏编程中的,总结出来

1、外部变量

     假如你有一个游戏是根据一些选项来改变的。例如,在 jigsaw puzzle 游戏运行时需要加
载不同的图片,或者一个 arcade 游戏以不同的速度运行。你可以从 flash 影片所在的 HTML
页面中获取一些参数。在这里有多种方法能够实现,如果你在发布设置中默认 HTML 为模板
的话,就可以通过 AC_FL_RunContent 函数中的 flashvars 属性来传递参数。
下面是一个简短的 AC_FL_RunContent 函数,在 flash cs3 导出影片后,你可以在 html 文件夹
中发现这些代码。在这里我增加了 flashvars 参数
<script language=”javascript”>
AC_FL_RunContent(
‘codebase’,
‘http://download.macromedia.com/p ... flash.cab#version=9,0,0,0’,

‘width’, ‘550’,
‘height’, ‘400’,
‘src’, ‘ExternalVariables’,
‘quality’, ‘high’,
‘flashvars’, ‘puzzleFile=myfilename.jpg&difficultyLevel=7’);
</script>
这个 flashvars 属性包括一对值,它们之间用&符号隔开。在这里,puzzleFile 设置为
myfilename.jpg, difficultyLevel 设置为 7.
当 flash  影片开始运行时,将通过 LoaderInfo 方法来调用这些信息。下面这行代码将检索所
有的参数并把它们赋值給声明的 paramObj 变量
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
若访问单个属性值,你需要用下面的代码:
var diffLevel:String=paramObj["difficultyLevel"]
另外,你还可以传递游戏的其它常量,例如图片的名字,开始等级,速度,位置等等。
 
读读源文件:
//加载外部参数信息
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
//读取外部 diffLevel 值,并赋值給 messageStrng 变量
var diffLevel:String = paramObj["difficultyLevel"];
var messageString = "difficultyLevel: "+paramObj["difficultyLevel"]; 
messageString += "/n";
//然后在读取 puzzleFile 的值,和 diffLevel 相加后赋值给文本
messageString += "puzzleFile: "+paramObj["puzzleFile"]; 
messageText.text = messageString;
当运行这个影片 ExternalVariables.fla,它就会加载 ExternalVariables.html 文件。

3、加载数据

  在 AS3.0 中,加载外部文本文件是相当容易的,尤其是 XML 格式的文件。例如,你想
加载一个琐碎的问题文件,那么,这个 XML 文件内容可以这样写:
<LoadingData>
<question>
<text>This is a test</text>
<answers>
<answer type=”correct”>Correct answer</answer>
<answer type=”wrong”>Incorrect answer</answer>
</answers>
</question>
</LoadingData>
     为了加载这些数据,你需要用到 URLRequest  和  URLLoader 两个函数,另外,当信息加
载完成后还需要添加一个侦听函数还调用相关的数据。代码如下:
var xmlURL:URLRequest = new URLRequest(“LoadingData.xml”);
var xmlLoader:URLLoader = new URLLoader(xmlURL); 
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);

xmlLoaded 函数里面是一些 trace 语句,在输出面板上显示传递进来的数据
function xmlLoaded(event:Event) {
var dataXML = XML(event.target.data);
trace(dataXML.question.text);
trace(dataXML.question.answers.answer[0]); 
trace(dataXML.question.answers.answer[0].@type);
}

4、保存本地数据

我们将用到本地共享对象,它类似于浏览器的 Cookie。我们需要调用
SharedObject.getLocal()以在应用程序中创建共享对象,如带记忆功能的计算器。

注意,该对象只能用于当前客户端,以下代码显示如何将返回
的共享对象引用赋值给变量:
var myLocalData:SharedObject = SharedObject.getLocal(“mygamedata”);
如果你存储了一些数据,你可以通过下面的代码来访问:
trace(“Found Data: “+myLocalData.data.gameinfo);
    下面,来设置一下这个 gameinfo 的属性值
myLocalData.data.gameinfo = “Store this.”;

5、自定义光标样式

  首先,现在舞台上拖放一个按钮,放置在第一层,另外再绘制一个方向键图形,转换为
影片剪辑,放置在第二层,实例名称为 arrow。
把鼠标光标设置为不可见,用 Mouse.hide()命令
Mouse.hide()
     然后,先确保把自定义影片放置在所有可显示对象的上面,如果你用脚本创建对象并添加到屏幕上的话,必须通过 setChildIndex 命令把自定义影片放置在所有显示对象的顶部。
为了让这个自定义影片跟随鼠标,还需要用到 ENTER_FRAME 侦听器
addEventListener(Event.ENTER_FRAME, moveCursor); 
function moveCursor(event:Event) {
arrow.x = mouseX; 
arrow.y = mouseY;
}
     另外,还需要把这个自定义光标的 mouseEnabled 属性设置为 false,表示该对象不接收
鼠标事件。默认值为 true,表示该对象接受鼠标事件。
arrow.mouseEnabled = false; 

6、加载影片

在第一帧把影片设置为 stop,
stop()
     然后,再添加一个 ENTER_FRAME 侦听,在每一帧调用 loadProgress 函数
addEventListener(Event.ENTER_FRAME, loadProgress);
这个函数用 this.root.loaderInfo 获取影片加载的状态,他有 bytesLoaded 和 bytesTotal 两个属
性,然后,我们再把这两个属性值除以 1024 转换成千字节。代码如下:
function loadProgress(event:Event) {
//  获取下载总字节和已下载字节
var movieBytesLoaded:int = this.root.loaderInfo.bytesLoaded; 
var movieBytesTotal:int = this.root.loaderInfo.bytesTotal;
//  转换成千字节
var movieKLoaded:int = movieBytesLoaded/1024; 
var movieKTotal:int = movieBytesTotal/1024; 
     为了让玩家能够看到下载进度,我们还需要在舞台上绘制一个文本域,显示格式为:
Loading:5K/32K
//显示下载进度
progressText.text = “Loading: “+movieKLoaded+”K/”+movieKTotal+”K”; 
     当已下载字节与影片总字节相等时,我们就移除这个帧频侦听,并把影片跳转到第二帧
//  加载完成移除侦听
if (movieBytesLoaded >= movieBytesTotal) {
removeEventListener(Event.ENTER_FRAME, loadProgress);
gotoAndStop(2); 
} }

7、随机数字

在 AS3.0 中,用 Math.random()函数创建随机数,返回值是一个大于等于 0 小于 1 的数。例
如:
var random1:Number=Math.random() 
     通常,我们用到明确的随机数范围,下面代码随机生成介于 0 和 10 之间的数
var random2:Number=Math.random()*10
     如果想得到一个随机整数,你可以用 Math.floor 方法来实现,floor 返回小于或等于指定
数字或表达式最接近的整数。下面代码生成 0~9 的随机整数
var random3:Number=Math.floor(Math.random()*10) 
     如果定义的范围不包含 0,可以在返回的结果上加上指定数即可。下面代码生成 1~10
的随机整数
var random4:Number=Math.floor(Math.random()*10)+1

8、洗牌阵列

    在游戏中,随机数最常用的地方就是在纸牌游戏的洗牌中了。例如,你手中有 52 张纸牌,
现在想随机地把它打乱,这需要怎样处理呢?
首先,你要创建一个新数组,简单地按顺序进行排列。下面的代码显示从 0 到 51 有序数字
//  创建有序数组
var startDeck:Array = new Array();
for(var cardNum:int=0;cardNum<52;cardNum++) { 
startDeck.push(cardNum);
}
trace(“Unshuffled:”,startDeck);
测试影片,输出结果如下:
Unshuffled: 
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51
 
     为了打乱这个数组元素的顺序,我们先选择这个数组随机位置上的一个元素,并把它存
放在一个新的数组里面,然后,在原数组中把该元素删除,直至把原数组元素清空为止。
// shuffle into new array
var shuffledDeck:Array = new Array();
while (startDeck.length > 0) {
var r:int = Math.floor(Math.random()*startDeck.length);
shuffledDeck.push(startDeck

­);
startDeck.splice(r,1);
}
trace(“Shuffled:”, shuffledDeck); 

9、系统数据

你可以用 Capabilities 对象获取 flash 影片所在电脑的多种信息。在这里列举出几种常用的属
性:
     Capabilities.playerType:指定播放器的类型。"StandAlone",用于独立的  Flash Player;
"External",用于外部的  Flash Player  或处于测试模式下;"PlugIn",用于  Flash Player  浏览
器插件;"ActiveX",用于  Microsoft Internet Explorer  使用的  Flash Player ActiveX  控件。
Capabilities.language:指定运行播放器的系统的语言代码。在英文系统上,该值返回双字母代
码  (en)。
     Capabilities.os:返回操作系统的类型和版本。例如:Windows XP
Capabilities.screenResolutionX, Capabilities.screenResolutionY:返回屏幕的分辨率 1280*800
Capabilities.version:flash  播放器的版本,例如 WIN 9,0,45,0。从这里你可以获取操作系统的
类型和 flash 播放器的版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值