flappy pig小游戏源码分析(3)——解剖util
这一节我们继续高歌猛进,如果对源码中有无论无何都理解不通的问题,欢迎和我交流,让我也学习一下,我的qq是372402487。
还是按照惯例看看我们的目录结构。

我们在前两节中已经分析了game.js,和option.js文件,现在的你应该初步形成了模块化的设计思想。这一节的内容带领大家学习程序员装逼必备——工具类,也就是util.js文件。
那么什么是工具类呢?工具类实际上可以理解成一系列的通用方法。比如一个网站,有评论模块、博客模块、注册模块等等,虽然他们功能各不相同,但是他们都需要做一件事情,就是操作数据库,一个菜鸟程序员经常犯的错误就是,写评论模块的时候把数据库操作的代码也写在里面了,然后写发布博客模块的时候突然想起来:"嗯,我可以把评论模块里的数据库操作代码拷贝过来,改改就能用了",于是写了5个模块,复制粘贴了5次大致相同的代码。这还不是最可怕的,最可怕的是,你突然发现,好像数据库操作语句中好像写错了一个字符串,于是你一点一点的找到每个模块中相应的代码改正,要是你的老板看到你这个样子,估计你就得卷铺盖走人了。
真正潇洒的程序员们是这么做的,创建一个util工具类,其中实现具体的数据库操作细节,暴露接口供其它模块调用,一旦出错,改改util就是了。
说了这么多,我们来看看flappy bird中的util.js究竟实现了哪些通用操作呢?
var flappy = (function (self) {
'use strict';
//工具
self.util = {
preventDefaultEvent: function (event) {//阻止默认事件
event = window.event || event;//兼容IE
if (event) {
if (event.preventDefault) {//如果支持preventDefault实现阻止默认
event.preventDefault();//那么flappy.util.preventDefault()就用event.preventDefault()来实现
} else {
event.returnValue = false;//如果不支持,那么flappy.util.preventDefault()就用event.returnValue = false来实现
}
}
},
$: function (id) {//这相当于一个选择器
return document.getElementById(id);//简化通过id获取元素的方法,之前的document.getElementById()实在太长了
},
getChilds: function (obj) {//顾名思义,这是用于获取子节点的简化方法
var childs = obj.children || obj.childNodes,//这里不理解的朋友看搜一下children和childNodes的区别
childsArray = [];//定义一个子节点数组
for (var i = 0, len = childs.length; i < len; i++) {
if (childs[i].nodeType == 1) {//只获取nodeType为1的节点,也就是element节点
childsArray.push(childs[i]);//取出element元素
}
}
return childsArray;//返回element类型子节点
}
};
return self;//之前flappy = {options:{xxx},现在flappy = {options:{xxx},util:{xxx}}
})(flappy || {});
可以看到util.js很轻便,只实现了三个方法,分别是:阻止事件默认动作、通过id获取元素、获得元素的子节点。
阻止默认事件由于各家浏览器没有达成统一的标准,所以这个方法负责兼容不同的连浏览器,使用者只需要调用util.preventDefaultEvent就可以了而不需要考虑坑爹的兼容性。
由于document.getElementById()太长了用的很难受,于是包装一个util.$(),简单方便。
最后大家看到元素javascript获取子节点的过程多多少少还是有些麻烦的,所以我们实现并提供一个util.getChilds()接口方便调用。
可能有同学会说,这些方法jquery实现了啊,我直接用jquery不就行了?确实jquery实现了,但是首先这个游戏中只需要几个简单的工具方法,没有必要用一个大缸只装一个包子,其次我们应该学会的是将编程当作一中个人工具来解决遇到的问题,只会使用插件和库函数的程序员永远是被动的。
flappy pig小游戏源码分析(3)——解剖util的更多相关文章
- flappy pig小游戏源码分析(2)——解剖option
今天继续分析flappy bird的源码.重温一下源码的目录结构. 在本系列第一篇中我们分析了game.js文件,也就是整个程序的架构.这一篇我们来看看option.js文件,这个文件的内容很简单,主 ...
- flappy pig小游戏源码分析(1)——主程序初探
闲逛github发现一个javascript原生实现的小游戏,源码写的很清晰,适合想提高水平的同学观摩学习.读通源码后,我决定写一系列的博客来分析源码,从整体架构到具体实现细节来帮助一些想提高水平的朋 ...
- flappy pig小游戏源码分析(4)——核心pig模块(未完待续)
热身之后,我们要动点真格的了,游戏叫flappy pig,我们的pig终于要出场了. 老规矩,看看目录结构,读者对着目录结构好好回想我们已经讲解的几个模块: 其中game.js是游戏主程序,optio ...
- xss小游戏源码分析
配置 下载地址:https://files.cnblogs.com/files/Lmg66/xssgame-master.zip 使用:下载解压,放到www目录下(phpstudy),http服务下都 ...
- HTML5小游戏源码收藏
html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js ...
- Creator仿超级玛丽小游戏源码分享
Creator仿超级玛丽小游戏源码分享 之前用Cocos Creator 做的一款仿超级玛丽的游戏,使用的版本为14.2 ,可以直接打包为APK,现在毕设已经完成,游戏分享出来,大家一起学习进步.特别 ...
- HashMap的小总结 + 源码分析
一.HashMap的原理 所谓Map,就是关联数组,存的是键值对——key&value. 实现一个简单的Map,你也许会直接用两个LIst,一个存key,一个存value.然后做查询或者get ...
- h5小球走迷宫小游戏源码
无意中找到的一个挺有意思的小游戏,关键是用h5写的,下面就分享给大家源码 还是先来看小游戏的截图 可以用键盘的三个键去控制它,然后通关 下面是源代码 <!doctype html> < ...
- C\C++ 1A2B小游戏源码
学了一段时间,心血来潮写了一个1A2B小游戏,很多人应该玩过,是一个挺有意思的益智小游戏,之前用易语言写过,现在又用C++重写了一下. 编译运行无错,整体程序设计思路为:进入循环,初始化游戏,读入一个 ...
随机推荐
- PAT-乙级-1031. 查验身份证(15)
1031. 查验身份证(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 一个合法的身份证号码由17位地区. ...
- 深入了解nagios的各配置文件
转自http://wolfword.blog.51cto.com/4892126/1220209 对每个配置文件进行讲解,深入理解nagios,好好学习,天天向上~ (1)templates.cf ...
- pthread_create用法
linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread. #include <pthread.h> int pthread_create(pth ...
- SGU 101
SGU 101,郁闷,想出来算法,但是不知道是哪个地方的问题,wa在第四个test上. #include <iostream> #include <vector> #inclu ...
- android的休眠和唤醒流程
android休眠唤醒流程: power按键事件上报给android系统,最终由windownmanager接收到,当有按键事件时判断是否需要休眠后唤醒系统,然后调用powermanager系统服务去 ...
- 安装Hadoop系列 — 安装Hadoop
安装步骤如下: 1)下载hadoop:hadoop-1.0.3 http://archive.apache.org/dist/hadoop/core/hadoop-1.0.3/ 2)解压文 ...
- HDU4614【线段树。】
果然看了理解了一下大牛的代码然后自己敲结果果然有不少错误 回复说,线段树做为一种数据结构,最好以一种风格过一题裸的然后作为自己的模板.. 二分写的也很恶心哪 还有题目稍复杂一点的注定得推敲各种公式,不 ...
- FPGA中latency与delay概念的区别
2013-06-17 21:09:26 最近学习流水线以及状态机,总遇到注入加入寄存器可以分割组合逻辑,从而提高电路的运行频率的说法:还有流水线可以提高速度的说法,刚开始很是疑惑,觉得流水线的方法,输 ...
- Octave下载
发福利啦,今天下了半天Octave都没下载下来,最后让一个香港的同学帮忙下好传过来的....放到网盘里造福大家 GNU_Octave_3.8.0-6.dmg 链接: http://pan.baidu. ...
- allegro添加多个过孔
place--Via arrays matrix: [数] 矩阵:模型:[生物][地质] 基质:母体:子宫:[地质] 脉石 boundary:边界:范围:分界线 unplaced : adj. 未受到 ...