编程经验总结(-2013.9.6)
2016-02-24 11:36
309 查看
编程经验总结( -13.9.6)
---by:Kiddy 拙见,写错的地方还请见谅,欢迎提意见...1.静态类、静态函数、静态变量
静态类,不能滥用静态,应该尽可能的少用,虽然静态类,可以很轻松和简单的获取和修改相关的值,但是这样也存在许多弊端,对象过于公开,基本上任何一个类都可以访问,而且常驻内存,无法销毁等
使用范围:1.需要经常访问和修改的数据....
优化建议:1.将所有的静态类,封装在一个静态类管理器中,然后静态类之间,通过层级关系进行封装,如
public class AppManager {
public function AppManager() {
}
public static function get layerManager():LayerManager{
return LayerManager.instence;
}
}
静态函数、静态变量,和静态类一样,不能滥用,除了静态类中,其他普通类,接近于静止使用,能使用普通函数,普通变量的,就得使用普通函数和普通变量;并且静态函数,不能访问普通的全局变量,如果需要访问该变量,得把普通变量也变成静态变量,不可为之...
2.单一责任原则,虽然说过无数遍,但是还是得提一提
单一责任,如其名,只能拥有一个职责,说的是,在平时编写代码时,一个类,一个函数,一个变量,只能拥有一种职责,不要让其担当过多的责任,当然也不能把责任过于细化。
一个类的责任:借鉴与MVC设计模式,一个类,要么只负责数据,要么只负责UI界面,要么只负责控制....
一个函数的责任:一个函数只负责一个模块的处理,比如说更新数据,重新渲染等,通常一个模块也可以分成若干个子模块,等于一个函数的功能可以分成由多个函数完成......
一个变量的责任:相信大家也有过和我一样的想法,为了避免再去重新定义一个变量,直接拿取已有的变量来使用。这样看似也说的过去,但是回过头来想一想,这个变量已经“越界了”,做了不该做的事情,还是做自己该做的事情,更好点。
3.键盘事件,关于键盘事件,键盘事件可以单独的进行封装,写成一个静态类,然后对于那些所需要键盘事件,在该静态方法中进行注册。当然文本除外。-----肯定有利也有弊,取决于自己..
public class KeyboardManger {
private static var _instence:KeyboardManger = null;
private var _observes:Vector.<Function> = new Vector.<Function>();
private var _keys:Vector.<uint> = new Vector.<uint>();
public function KeyboardManger() {
}
public static function get instence():KeyboardManger {
if(_instence == null) {
_instence = new KeyboardManger();
}
return _instence;
}
public function init(stage:Stage):void{
stage.addEventListener(KeyboardEvent.KEY_DOWN , onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP , onKeyUp);
}
public function register(fun:Function):void{
if(_observes.indexOf(fun) > -1){
return;
}else{
_observes.push(fun);
}
}
public function remove(fun:Function):void{
if (_observes.indexOf(fun) > -1){
_observes.splice(_observes.indexOf(fun) , 1);
}
}
private function notifyObservers():void {
for (var i:int = 0; i < _observes.length; i++) {
_observes[i](_keys);
}
}
private function onKeyDown(event:KeyboardEvent):void {
if (_keys.indexOf(event.keyCode) == -1) {
_keys.push(event.keyCode);
}
notifyObservers();
}
private function onKeyUp(event:KeyboardEvent):void {
if (_keys.indexOf(event.keyCode) > -1) {
_keys.splice(_keys.indexOf(event.keyCode) , 1);
}
}
}
4.粒子池”,本来不应该写在这里,但是还是写一写,为了让自己更加深刻,“粒子池”。---代码也许设计的并不是很好,请见谅..
粒子池,首先是一个池,其容量有限,每次只用到了其中一部分空间,粒子的存活时间有限,到达一定添加便死亡。需要创建新的粒子时,有两种方法,
第一种:用完后回收,首先判断,粒子池的空间是否已经已经全部使用完毕,如果使用完毕,回收死亡的粒子用于穿件新的粒子
第二种,边用边回收,如果需要创建新的粒子,则,直接进行回收,然后使用回收的粒子,创建新的粒子
适用范围:设计到需要许多该对象的实例时,比如说,粒子效果,大量加载素材的素材池等等...
public class ParticlesFac {
public static const MAX_PARTICLE:int = 200;
private var particles:Vector.<Particle> = new Vector.<Particle>(MAX_PARTICLE,true);
public function creatParticle(num:int):Vector.<Particle>{
if(num <= 0) {
return new Vector.<Particle>();
}
//回收已经死亡的粒子
this.recovery();
var pars:Vector.<Particle> = new Vector.<Particle>();
for (var i:int = 0; i < particles.length; i++) {
//当粒子为空时,进行创建
if (particles[i] == null){
particles[i] = new Particle();
particles[i].init();
pars.push(particles[i]);
} else if (particles[i].isUsed == false){
//粒子未必使用时
particles[i].init();
pars.push(particles[i]);
}
if (pars.length >= num){
break;
}
}
return pars;
}
public function recovery():void{
for (var i:int = 0; i < particles.length; i++) {
if((particles[i])&&(particles[i].isDead == true)){//粒子已经死亡时
particles[i].clear();
}
}
}
}
5.PureMVC设计模式,说说最近学习到的设计模式,主要通过研究PureMVC框架,其中设计到学到设计模式,比如说,单例模式,观察者模式,中介者模式..当然还有其他的设计模式,目前只理解者三个.单例模式也就没什么好说的了,只能创建一个对象,可以通过类名直接获取对象。
观察者模式,指的是,类与类、实例与实例之间的联系方式,通过观察的方法进行联系,当一个实例发生变化时,需要修改另一个实例的相关属性,另一个实例可以通过注册对另一个实例的监听,是不是很复杂?具体的还请查看设计模式相关资料
中介者模式,个人觉得,和观察者模式有点相似,但是也有区别,当一个实例发生变化时,需要修改另一个实例的相关属性,这个时候,并不是通过注册来进行,而是通过一个“第三方”(中介者)来进行修改.
6.碰撞检测的优化,在碰撞检测中,我们可以进行分区进行碰撞检测,而不是直接对整个场景对象进行碰撞检测。
检测分割的方法可以有许多在,比如说四叉树,多叉树等等形式。可以将一个庞大的循环分割成多个后代循环系统中。
相关文章推荐
- [备忘] 查看浏览器中flash swf的trace调试输出
- maven使用经验集
- flash 系统字体显示问题
- 比较完整简洁的Flash处理XML文档数据教程 上篇第1/3页
- Flash ActionScript 中按钮和电影剪辑的事件和方法
- flash 编程习惯 小结
- flash as2.0组件样式修改方法(直接改元件就行喽)
- FLASH自动判断域名然后转向等操作
- Flash简单加密 限制 Flash 在指定域名/网址中播放的方法
- 在网页中怎样给已发布的Flash添加链接的方法
- FLASH 多参数的URL地址(带&符号)
- Flex Flash的关系分析
- Flash 与 html 的一些实用技巧
- 帮助你学习 Flash / ActionScript的12个网站
- 样式表CSS布局经验
- 路由器之基本维护经验
- div flash firefox div层总是被flash层遮盖
- 解决div被flash挡住的设置方法
- 解决鼠标在 flash 链接上不停闪动的问题(web页面中)
- flash 打开本地文件代码