论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

flash as3 copy数组

文章类别:Flash AS | 发表日期:2008-11-27 9:52:32

var arr:Array = [1,2,3,4];
var copyArr:Array = arr.concat();

for(var i:uint=0;i<copyArr.length;i++)
{
 trace("原数组:",arr[i]);
 copyArr[i] += 1;
 trace("复制数组",copyArr[i]);
 trace("复制数组修改后的原数组:",arr[i]);
}

(tip: 将concat改成slice也可以测试下....)

输出结果:

原数组: 1
复制数组 2
复制数组修改后的原数组: 1
原数组: 2
复制数组 3
复制数组修改后的原数组: 2
原数组: 3
复制数组 4
复制数组修改后的原数组: 3
原数组: 4
复制数组 5
复制数组修改后的原数组: 4

通过测试不难看出,用as3中Array封装的方法复制的简单数组,当复制的数组的值改变的时候,原数组的值并没有跟着改变。可能你觉得有点疑惑,到底要干什么呢?接下来再看个例子:

var arr:Array = [{n:1},{n:2},{n:3}];
var copyArr:Array = arr.concat();
for(var i:uint=0;i<copyArr.length;i++)
{
 trace("原数组:",arr[i].n);
 copyArr[i].n += 1;
 trace("复制数组",copyArr[i].n);
 trace("复制数组修改后的原数组:",arr[i].n);
}

输出结果:

原数组: 1
复制数组 2
复制数组修改后的原数组: 2
原数组: 2
复制数组 3
复制数组修改后的原数组: 3
原数组: 3
复制数组 4
复制数组修改后的原数组: 4

看看结果,这回该明白了吧...复制数组修改后的原数组的值奇妙的发生了改变.....

具体原因自己还不是很清楚,游戏中,当要复制一个数组而不影响原数组的时候问题就来了,那么如何深拷贝一个数组呢?很可以在as3中找不到像java中的copy方法,这里提供一个小技巧,还是先看代码吧:

var arr1:Array = [{n:1},{n:2},{n:3}];
var copier:ByteArray = new ByteArray();
copier.writeObject(arr1);
copier.position = 0;
var copyArr:Array = copier.readObject();

for(var i:uint=0;i<copyArr.length;i++)
{
 trace("原数组:",arr1[i].n);
 copyArr[i].n += 1;
 trace("复制数组",copyArr[i].n);
 trace("复制数组修改后的原数组:",arr1[i].n);
}

输出结果:

原数组: 1
复制数组 2
复制数组修改后的原数组: 1
原数组: 2
复制数组 3
复制数组修改后的原数组: 2
原数组: 3
复制数组 4
复制数组修改后的原数组: 3

结果一目了然,颜色改变部分的代码就是本帖的精华所在......实现原理:大家可以查看帮助文档中 ByteArray  类的说明,这样就完成了数组的深copy。

游戏中对数组的运用还是比较多的,这类应用也不在少数,虽然绕个弯路是问题解决了,但我也不大清楚,as3中数组的引用是如何处理的...有知道的朋友不妨留言...谢谢...也可直接告诉我一下哦。

视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058