prototype在开发中的妙处 by EOS.
上一篇文章我们介绍了,prototype的功能做了一些讲解,没有看到的朋友,
可以去回顾一下上一篇文章《【步兵 cocos-js】逆向思维 对 js对象和函数进行分析》。
那么知道了prototype的功能,下面我介绍一下开发中它的妙处。
完蛋~不知道标题起什么名字好了
上篇介绍到 new function
创建的对象,可以通过 function.prototype.xxx
的形式,
在function外部拓展功能,这个功能简直赞到爆啊~
我们知道cocos创建精灵的形式是 new Sprite;
的形式。
这也就是说,Sprite就是一个function,那也就是意味着,我们可以在Sprite外部拓展它的
功能,这样我就可以在不修改源码的情况下,不断的拓展Sprite的功能,既保留了底层的规范
又可以*的发挥,更重要的是,妈妈再也不用担心cocos更新,我每次都把代码搬来搬去了。
(ps:当然除了cocos把某些接口给干掉了。不吐不快啊~ cocos之“我们优化了渲染”,
我们之“卧槽xxx变量怎么不见了,我之前用这个变量做了好多功能啊”,其他程序员:“噗~”)
比方说:步兵,我觉得Sprite不够方便啊,要是播放帧动画能想Armature那样直接play多好啊。
那还不简单,你直接:(这样,这样,再这样~ 不就好了)
/**
* 播放骨骼动画
* @param {String} bsStr - 动画编号的前缀
*/
cc.Sprite.prototype.play = function (bsStr) {
//首先,要规定一个命名格式 比如 bs_001.png
//这样我们写处理起来就会方便很多
var idx = 1;
while(true){
var numStr = "000".substr(0,idx.toString().length) + idx;
var fName = bsStr + "_" + numStr + ".png";
//在然后就根据 fName 创建帧,放入到一个数组里
//如果帧不存在,就跳出循环
}
//到这的时候就拿到了一组序列帧,然后就可以可以创建帧动画了
//然后设置一下帧间隔,循环什么的就可以了,如果常用可以再存一下
//最后 一个this.runAction, 走你~
}
//然后使用就是这样
var kof = new cc.Sprite;
//添加设置坐标什么的
kof.play("8God");
//卧槽,看到没有,八神在放大招了,卧槽好酷炫~好叼~
什么?感觉不太对?还不够酷炫?(总觉得这台词在哪听过)
最好再来个加残影、闪屏、加特效。你确定你是程序不是个策划?
(ps:噫~好像没有哪里不对,日常黑~)
cc.Sprite.prototype.CanYing_Shanping_DaiTeXiao = function (on_off) {
//...
}
总之就是可以各种姿势,拓展(玩坏)Sprite。
当别人看见的代码,各种亮瞎眼,我擦,你的Sprite为什么这么好用,
你就可以说:“low逼,来来来,让我来教你做人~”。
然后当他看到cc.Sprite.prototype.CanYing_Shanping_DaiTeXiao。
总感觉他的内心中会有一万只*奔腾而过,打着发蜡,闪着光,还回眸微笑~
题外话
上面我每一直接把代码贴出来,不是我不想方便大家,主要的还是
希望大家自己去实现一下,我提供给思路然后说不定,你写着写着
灵光乍现,突然想到一个比我的思路叼256倍的方法,总比把我已经写好的,
一个方法考走,然后一点印象没用,只是觉得“哎,能用,挺好”要强的多。
毕竟经验是需要不断的积累的,可能我今天封装了个烂1方法,几天后我想到了
渣2方法,半个月后我想到了帅3方法,突然某天想到了叼4方法(绝不是屌丝)。
最后一句,不要做搬运工,少抄多想,脑子是越用越灵光的,可能暂时的你会比
别人慢一点,但你走的扎实,我相信这样会走的更长远~
最最后一句:我也正在这条路上,程序员就要对自己狠一点,就要不断的
重构,重写!重构,重写!重构,重写!
啊~对了,我建了个Q群,群号:453920459
目前已经有2个人左右了,希望能早点热闹起来,
大家多多交流,多多指教~(真·最后一句)
See Again~
之前
真爱无价,欢迎打赏~