1.Numeric Calculations: Number vs. int Speed
比较Number类型和新出现的int类型速度
*只有在用到 bitwise operations (<<, >>, &, ^, and |) 的时候 int 类型比较快,例如
var valueN:Number = 10;
result = valueN << 2; // not so fast
var valueI:int = 10;
reesult = valueI << 2; // Fast!
*其他情况下声明为Number比较快
2.Class member enumeration
as3中只有dynamic class 中的dynamic definitions才可以被枚举(就是for in ),例如下边的class就没有可枚举的成员
package {
public class EnumerateClass {
public var variable:String = "value";
public function method():void {}
}
}
var example:EnumerateClass = new EnumerateClass();
for (var key:String in example) {
trace(key + ": " + example[key]); // 没有输出
}
即使上边的class改成dynamic的,也是没有输出,为什么呢?
因为里边的变量和方法是他们自己的,而并不是动态(dynamic)填加的,只有动态填加的属性可以被for in
Object类有个 setPropertyIsEnumerable方法,可以控制某个属性是否可枚举,但它只对dynamic属性有效
package {
public dynamic class EnumerateClass {
public var variable:String = "value";
public function method():void {}
public function EnumerateClass(){
this.dynamicVar = 1;
this.dynamicVar2 = 2;
this.setPropertyIsEnumerable("dynamicVar2", false);
}
}
}
上边的dynamic类有两个dynamic属性, dynamicVar 和 dynamicVar2 ,满足条件,都应该是可枚举的
但调用 setPropertyIsEnumerable("dynamicVar2", false);阻止了枚举 dynamicVar2
var example:EnumerateClass = new EnumerateClass();
for (var key:String in example) {
trace(key + ": " + example[key]); // dynamicVar: 1
}
propertyIsEnumerable方法可以测试某一属性是否可枚举
trace(example.propertyIsEnumerable("variable")); // false
trace(example.propertyIsEnumerable("dynamicVar")); // true
trace(example.propertyIsEnumerable("dynamicVar2")); // false
3.System.totalMemory
System 类 (flash.system.System) 有一个新属性叫做 totalMemory,返回当前flash player占用的内存
var o:Object = new Object();
trace(System.totalMemory); // 4960256
var o:MovieClip = new MovieClip();
trace(System.totalMemory); // 4964352
4.Weak References
使用弱引用来引用对象,不会被垃圾回收器视为有效的引用数。这样可以帮助垃圾回收器的工作
所以使用弱引用这是一种比较好的编程习惯,使你不会在不经意间错误的引用到了某个object导致这个object不能被从内存中卸载~~~
但不是哪里都可以使用弱引用的,as3中有两处可以使用:
(1)在Directionary类的构造函数中传入true
var dict:Dictionary = new Dictionary(true); // use weak references as keys
var obj:Object = new Object();
dict[obj] = true;
delete obj; // 虽然dict中有引用到obj,但并不是一个有效引用,所以obj仍然会被垃圾回收
(2)在EventDispatcher的addEventListener 的第5个参数指定true
// addEventListener(type:String, listener:Function, useCapture:Boolean
= false, priority:int = 0, useWeakReference:Boolean = false):void
addEventListener(MouseEvent.CLICK, clickHandler, false, 0 true); // use weak references
5.Garbage Collection: Reference Counting & Mark and Sweep垃圾回收机制包含两个关键:
(1)Reference Counting (引用数) :引用数就是在内存中引用同一个object的变量多少,每增加一个变量引用该object,引用数就+1
var a:Object = new Object(); // new Object in memory given reference count of 1
var b:Object = a; // Object now has reference count of 2
无论什么时候,当没有变量引用该object的时候,垃圾回收就会把他们回收了
delete a; // Object has reference count of 1
delete b; // Object has reference count of 0, removed from memory
注意delete只能删除非成员变量,而且删除的是引用该object的变量而不是将object从内存中删除,那是垃圾回收器要做的事
看下边这种情况:
var a:Object = new Object(); // reference(a) count 1
var b:Object = new Object(); // reference(b) count 1
a.b = b; // reference(b) count 2
b.a = a; // reference(a) count 2
delete a; // reference(a) count 1
delete b; // reference(b) count 1
虽然a和b变量被删除了,而且我们再也不能用程序访问到他们了,但他们仍然存留在内存中~这种情况下垃圾回首器就没有办法了吗?错!这是记号清理要做的!
(2)Mark and Sweep (记号清理): Mark and Sweep简单来说就是一种扫描机制,如下图,从root开始,扫到对象就mark一下,并扫描这个对象,等待全扫描完了,没有mark的自然是没有用的了,就会被从内存中删掉了.
[root] <- scan...
[objectRef (marked)] <- scan...
[objectRef (marked)] <- scan...
[objectRef (marked)] <- scan...
[objectRef (marked)] <- scan...
[objectRef (marked)] <- scan...
...
[delete all objects not marked]
当然这种扫描是昂贵的,需要很长时间才能发生一次,所以不要指望他了,编程的时候多注意引用数就可以了
6.Determine Instance Class or Superclass
as3中可以很容易的获取某个实例所属的类和父类的类名,使用这两个方法
getQualifiedClassName (flash.utils.getQualifiedClassName).
getQualifiedSuperclassName (flash.utils.getQualifiedSuperclassName)
var sprite:Sprite = new Sprite();
trace(getQualifiedClassName(sprite)); // "flash.display::Sprite
trace(getQualifiedSuperclassName(sprite)); // "flash.display::DisplayObjectContainer"
你甚至可以由字符串获得类的引用,使用这个方法
getDefinitionByName (flash.utils.getDefinitionByName).
getDefinitionByName("flash.display::Sprite")); // [class Sprite]
7.Deep Object Copies with ByteArray
as3中很容易使用(flash.utils.ByteArray)类来进行对象的深拷贝,深拷贝不只拷贝引用,而是拷贝整个相关对象,
例如一个array里包含一个object引用,这个object也将被拷贝
注意:这个方法通常用来拷贝一般的object
拷贝函数:
function clone(source:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(source);
copier.position = 0;
return(copier.readObject());
}
使用方法:
newObjectCopy = clone(originalObject);
8.动态改变帧频:
// change frame rate to 12 fps:
stage.frameRate = 12;//这个在导入外部swf文件时很有用
9.Abstract Classes
as3不支持抽象类,但有几个内置的抽象类
DisplayObject
InteractiveObject
DisplayObjectContainer
Graphics
as3中这意味着不能实例化这些类,也不能继承他们 ,以下为错误操作:
// 错误1
var myObj:InteractiveObject = new InteractiveObject(); // ERROR
// 错误2
package {
import flash.display.DisplayObject;
public class MyDisplay extends DisplayObject{
public function MyDisplay (){
// ERROR
}
}
}
//希望以后的版本可以尽快支持abstract class
分享到:
相关推荐
在IT行业中,汉字转拼音是一项常见的需求,尤其是...通过深入研究博客内容,我们可以学习到AS3环境下如何实现汉字转拼音的具体步骤和技巧,这对于需要在Flash或Flex项目中处理中文字符的开发者来说是非常有价值的知识。
综上所述,这个"flash as2仿3D旋转"项目展示了如何在Flash AS2环境中通过编程技巧实现看似复杂的3D效果,结合XML进行数据交互,使用椭圆轨迹分布增强视觉动态性,并利用模糊滤镜提升视觉品质。通过理解和实践这些...
总之,"flash as2.0 3d 旋转文字源文件"是一个很好的学习资源,可以帮助你掌握AS2.0中的3D动画技巧,为你的Flash项目增添更多维度的创意。通过分析源文件和实践相关代码,你将能够更好地理解和运用这些知识,从而在...
标题中的“3D立体展示图片-附as3源码”表明这是一个使用ActionScript 3.0(AS3)编程语言创建的项目,旨在实现3D立体图像的展示。ActionScript是Adobe Flash Platform的一部分,主要用于开发富互联网应用程序(RIA)...
在Flash AS3中,3D立体墙是一种交互式的可视化技术,它允许用户以三维的方式浏览和操作元素,比如图片、视频或图标。这种技术在网页设计、游戏开发以及数据展示等领域有着广泛的应用。以下是关于“Flash AS3 3D立体...
"AS3_Sorcerer" 提供了一种途径,使开发者和研究者能够对AS3编译后的二进制代码进行反编译,从而探索游戏的工作原理,学习编程技巧,甚至进行游戏修改或复用代码。 首先,我们要理解什么是AS3反编译。AS3是一种面向...
AS3,全称为ActionScript 3.0,是Adobe公司开发的一种编程语言,主要用于创建交互式内容、网页动画以及富互联网应用(RIA...通过学习和分析提供的代码示例,开发者能够提升自己的AS3编程技巧,并将其应用于实际项目中。
在IT行业中,Flash AS3是一种广泛用于创建交互式应用程序、游戏和富互联网应用(RIA)的编程语言。Socket通信是网络编程的一个重要组成部分,它允许客户端和服务器之间进行双向通信。在AS3中,我们可以使用Socket类...
在优化ActionScript(AS)代码时,无论是AS2还是AS3,提高性能是开发者的关键目标。以下是一些有助于提升代码效率的技巧: 1. **计算代码执行时间**:使用`getTimer()`函数来测量代码块的运行时间,这对分析性能...
在本文中,我们将深入探讨Flash 3D效果及其在AS3(ActionScript 3)中的实现。Flash 3D是一种技术,它允许开发者在Adobe Flash环境中创建引人入胜的三维图形和动画,为Web应用、游戏和互动设计提供丰富的用户体验。 ...
通过学习和实践这些AS3绘制多边形的技巧,开发者可以创建出丰富多彩的图形界面,应用于游戏、动画、数据可视化等多个领域。同时,由于标签中有"源码"和"工具",这表明该资源可能包含了一个简单的示例或者工具,帮助...
9. **性能优化**:为了确保应用的性能,AS3CBLibrary可能会提供一些优化策略,例如内存管理、缓存机制或者高效的算法实现。 10. **文档和示例**:为了便于学习和使用,AS3CBLibrary可能附带了详细的API文档和示例...
【AS3对对碰游戏】是一款基于Adobe Flash ...总的来说,学习和分析【AS3对对碰游戏】的源代码和素材,开发者不仅可以了解对对碰游戏的实现原理,还能深入掌握AS3的编程技巧和游戏开发流程,为今后的项目提供宝贵经验。
通过深入研究AS3NUI-airkinect-2-examples-f77401a这个压缩包内的代码,开发者不仅可以学习到AS3编程技巧,还能掌握如何利用Kinect 2.0的特性和功能,创造出创新的体感应用。这是一份宝贵的资源,对于想要在AS3环境...
本教程将带你一步步走进AS3的世界,通过基础常见的类的使用、编程技巧以及实例解析,帮助你提升编程能力。 【描述】: 1. **基础类的使用**:AS3中的基础类提供了许多操作数据和控制程序的基本功能。例如,你可以...
这些应用可能涉及更高级的技巧,如粒子碰撞检测、粒子群组行为或者与其他AS3组件的交互。 在AS3粒子系统中,关键概念包括: 1. **发射器(Emitter)**:负责创建和管理粒子,设置其初始属性,如位置、速度、角度、...
AS3(ActionScript 3.0)是Adobe Flash平台的核心编程语言,用于创建交互式网页内容、游戏以及动画。在页游开发中,算法扮演着至关重要的角色,它们是解决问题和优化性能的关键工具。"AS3算法大全"这个资源包含了AS3...
总结,AS3拼图游戏解析涉及了图片处理、自定义类、事件处理、碰撞检测、游戏逻辑和性能优化等多个方面,通过深入研究,开发者不仅可以掌握AS3的基本语法和编程技巧,还能提升游戏开发能力。如果你对AS3感兴趣,这个...
通过研究这些源代码,开发者不仅可以了解AS3的游戏开发技巧,还可以进一步探索如何优化搜索算法、实现更丰富的动画效果、增加多人在线对战等功能。这对于提升AS3编程技能,以及对游戏开发的理解都大有裨益。 总结,...
AS3(ActionScript 3)是Adobe Flash Platform的主要编程语言,用于创建互动式的网页内容、游戏和动画。在这个“连连看”源码中,我们可以深入理解AS3的基础语法、对象模型以及游戏逻辑。 1. **AS3基础语法**:AS3...