重温了一下AS3,写了一个flash版“推箱子”游戏
首先上传送门:http://tuijs.com/Sokoban/
11年时就看过AS3,但工作中JS为主,几乎快忘了。最近工作中又要用到,重温了一下,上周末花了两天写了一个flash版的推箱子,算是交作业吧!
PS:以前用JS写过,传送门:http://www.2fz1.com/demo/
/assets/upload/20140318161507.png
【游戏素材来源于网络,仅用于学习编程用途。】
首先上传送门:http://tuijs.com/Sokoban/
11年时就看过AS3,但工作中JS为主,几乎快忘了。最近工作中又要用到,重温了一下,上周末花了两天写了一个flash版的推箱子,算是交作业吧!
PS:以前用JS写过,传送门:http://www.2fz1.com/demo/
/assets/upload/20140318161507.png
【游戏素材来源于网络,仅用于学习编程用途。】
一睹为快,Stats运行时的效果如上。这个Stats类可以帮你统计出(由上至下):
当前帧频/预期帧频
一帧运行所需时间(毫秒)
当前内存占用
历史最高内存占用
之前一直用CPU版本的,刚才找到一个可运行在Starling框架上的版本,也就是运行在GPU下的Stats类。
Starling版本:http://www.kouma.fr/files/stats.zip (出处:http://forum.starling-framework.org/topic/starling-port-of-mrdoobs-stats-class)
我们知道:和JS一样,ActionScript3.0中的Array数组可以存放多种类型,甚至在同一个Array数组中,可以同时存入String,Object,Number…,但其实我们在实际开发中,通常一个数组中所保存的元素类型都是一致的,为了改进这种情况下的效率,AS3.0新增了一个Vector类。
它强制要求数组中的每个元素都必须是同样的类型,从而提高了数组的运行效率。
//方法一
var list:Vector.<int> = new Vector.<int>();
list2.push(1, 2, 3);
//方法二
var list:Vector.<int> = Vector.<int>([1, 2, 3]);
//方法三
var list:Vector.<int> = new <int>[1, 2, 3];
相关测试表明,Vector比Array在运行效率上能快一倍左右,所以,对于同类型的数组,建议使用Vector.
在JS中,定义函数有两种方式,函数语句和函数表达式;
函数语句定义:
function testB(){
console.log("B");
}
函数表达式定义:
var testA = function(){
console.log("A");
}
1、作用域提升
在定义位置上,函数语句的方式定义,会将其作用域名提升至顶端,而函数表达式定义不会,必须先定义后执行。看下面的例子:
testB();
testA();
var testA = function(){
console.log("A");
}
function testB(){
console.log("B");
}
testA无法执行,因为找不到定义的函数,要想testA执行,必须将它的函数表达式定义放到执行时的前面。
2、this关键词的指向
在JS中,函数语句定义和函数表达式定义,this
关键词都会指向其运行时的引用,两者没有区别。
而在AS3中,函数语句定义中的this始终指向当前函数定义的域,而函数表达式定义中的this
会随着附加对象的变化而变化,且可以使用call()
和apply()
改变其this的指向。
这一点区别非常重要,特别对于js和as同时使用的前端开发来讲,掌握两者的其础知识,能避免你犯错!