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++重写了一下. 编译运行无错,整体程序设计思路为:进入循环,初始化游戏,读入一个 ...
随机推荐
- 17款免费的Bootstrap后台管理模板集合
Bootstrap是Twitter推出的一个用于前端开发的开源工具包.是目前最受欢迎的前端框架之一.下面为大家推荐17个免费的Bootstrap后台管理界面模板. 1. Admin Lite ...
- C#查找子串在原串中出现次数
提供的是一种思路,和具体语言无关. string test = "good good study day day up"; string r = test.Replace(&quo ...
- 深入剖析Classloader(二)--根类加载器,扩展类加载器与系统类加载器
原文地址:http://yhjhappy234.blog.163.com/blog/static/31632832201152555245584/?suggestedreading&wumii ...
- java:I/O 根据用户输入反馈信息
import java.io.*; class userInputIO{ //Java中成员变量有默认初始化,也就是如果不显式设置初始值的话就会被初始化为其类型的默认值(0.false.null等). ...
- 配置SQL Server 2008服务器
怎么配置SQL Server 2008服务器_百度经验 http://jingyan.baidu.com/article/9faa7231a922c1473c28cb23.html 1.验证安装是否成 ...
- Linux下安装Wine运行windows程序
资料 首页 https://www.winehq.org/ 安装 https://www.winehq.org/download/ 教程 https://www.winehq.org/document ...
- WinAPI——Windows 消息
消息 值 注释 WM_NULL $0000 WM_CREATE $0001 WM_DESTROY $0002 WM_MOVE $0003 WM_SIZE $0005 WM_AC ...
- SQL Server R2 2008中的SQL Server Management Studio 阻止保存要求重新创建表的更改问题的设置方法
在2008中会加入阻止保存要求重新创建表的更改这个选项.症状表现为修改表结构的时候会"阻止"你. SQL Server 2008“阻止保存要求重新创建表的更改”的错误的解决方案是本 ...
- tcp断开的4次挥手
http://blog.csdn.net/fw0124/article/details/7452695 由于TCP连 接是全双工的,因此每个方向都必须单独进行关闭.这原则是当一方完成它的数据发送任务后 ...
- POI2001 Gold mine(二叉排序树 黑书经典)
采矿(KOP) 金矿的老师傅年底要退休了.经理为了奖赏他的尽职尽责的工作,决定送他一块长方形地.长度为S,宽度为W.老师傅可以自己选择这块地.显然其中包含的采金点越多越好.你的任务就是计算最多能得到多 ...