这一节我们继续高歌猛进,如果对源码中有无论无何都理解不通的问题,欢迎和我交流,让我也学习一下,我的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的更多相关文章

  1. flappy pig小游戏源码分析(2)——解剖option

    今天继续分析flappy bird的源码.重温一下源码的目录结构. 在本系列第一篇中我们分析了game.js文件,也就是整个程序的架构.这一篇我们来看看option.js文件,这个文件的内容很简单,主 ...

  2. flappy pig小游戏源码分析(1)——主程序初探

    闲逛github发现一个javascript原生实现的小游戏,源码写的很清晰,适合想提高水平的同学观摩学习.读通源码后,我决定写一系列的博客来分析源码,从整体架构到具体实现细节来帮助一些想提高水平的朋 ...

  3. flappy pig小游戏源码分析(4)——核心pig模块(未完待续)

    热身之后,我们要动点真格的了,游戏叫flappy pig,我们的pig终于要出场了. 老规矩,看看目录结构,读者对着目录结构好好回想我们已经讲解的几个模块: 其中game.js是游戏主程序,optio ...

  4. xss小游戏源码分析

    配置 下载地址:https://files.cnblogs.com/files/Lmg66/xssgame-master.zip 使用:下载解压,放到www目录下(phpstudy),http服务下都 ...

  5. HTML5小游戏源码收藏

    html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js ...

  6. Creator仿超级玛丽小游戏源码分享

    Creator仿超级玛丽小游戏源码分享 之前用Cocos Creator 做的一款仿超级玛丽的游戏,使用的版本为14.2 ,可以直接打包为APK,现在毕设已经完成,游戏分享出来,大家一起学习进步.特别 ...

  7. HashMap的小总结 + 源码分析

    一.HashMap的原理 所谓Map,就是关联数组,存的是键值对——key&value. 实现一个简单的Map,你也许会直接用两个LIst,一个存key,一个存value.然后做查询或者get ...

  8. h5小球走迷宫小游戏源码

    无意中找到的一个挺有意思的小游戏,关键是用h5写的,下面就分享给大家源码 还是先来看小游戏的截图 可以用键盘的三个键去控制它,然后通关 下面是源代码 <!doctype html> < ...

  9. C\C++ 1A2B小游戏源码

    学了一段时间,心血来潮写了一个1A2B小游戏,很多人应该玩过,是一个挺有意思的益智小游戏,之前用易语言写过,现在又用C++重写了一下. 编译运行无错,整体程序设计思路为:进入循环,初始化游戏,读入一个 ...

随机推荐

  1. CrackMe_001

    本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如 ...

  2. 浏览器对象模型(BOM)

    BOM结构 用户浏览网页的时候,浏览器会自动创建一些对象,这些对象存放着浏览器窗口的属性和相关信息,也就是大家熟称的BOM.浏览器对象模型是一个层次化的对象集,我们可以通过window对象访问所有对象 ...

  3. HDU 1494 跑跑卡丁车 (DP)

    题目链接 题意 : 中文题不详述. 思路 : sum = L*N 段,每走过一段如果不用加速卡的话,能量会增20%,将20%看作1,也就是说每涨到15就要变为10,所以最多是14才不浪费. dp[i] ...

  4. HDU4611+数学

    /* 找规律 题意:abs(i%A - i%B) 对i从0~N-1求和 从0~N-1一个一个算必TLE,着A,B两者差相同的部分合并起来算 */ #include<stdio.h> #in ...

  5. java thread类和runable

    java thread 类其实和其他类是一样的.有自己的属性和方法.以及有一个重写的run方法 不同的是:必须重写run()方法. run()方法是线程thread启动后cpu调用运行的程序代码. r ...

  6. 【mysql的设计与优化专题(5)】慢查询详解

    查询mysql的操作信息 show status -- 显示全部mysql操作信息 show status like "com_insert%"; -- 获得mysql的插入次数; ...

  7. 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)

    解放方法 右键打开这个项目引用System.Web.Mvc,如图: 将复制本地的值改为True,英文的话应该是Copy Local,这样就解决了上面的报错问题.

  8. QTreeView只显示指定驱动器及其目录,隐藏所有兄弟节点

    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setup ...

  9. TSharding:用于蘑菇街交易平台的分库分表组件

    tsharding TSharding is the simple sharding component used in mogujie trade platform. 分库分表业界方案 分库分表TS ...

  10. jquery ui autoComplete自动完成

    官网:http://jqueryui.com/autocomplete 最简单的形式: var availableTags = [ "ActionScript", "Ap ...