之前在石川县烟花大会的那篇文章中提到过使用js制作出烟花效果,那篇文章中是使用图片的切换来实现的。网速不够快的话效果会非常不给力。而在html5中,可以使用canvas可以进行绘图,所有的效果都不用下载,在客户端就可以实现,所以就不会受到网速的影响了。 那么,如何使用js制作动画呢?以前的话,可以使用setInterval这个函数去实现,现在又出现一个requestAnimationFrame,据说流畅性比setInterval好一些。 canvas的几个绘图的方法可以从这里查看。而requestAnimationFrame这个函数,因为不同的浏览器对象名称不一样,需要考虑一下浏览器兼容性的问题。下面的这段代码就可以保证大部分的浏览器的兼容,可以如果不兼容requestAnimationFrame的话就会选择setTimeout来实现同样的功能。 requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame || function(callback) { setTimeout(callback, 1000 / 60); };
Month: December 2011
前面一篇文章用jquery制作了一个拼图游戏,这篇文章介绍如何使用广度优先搜索算法来计算完成拼图的方法。 广度优先搜索是图论中最基本的一种遍历方法。以前学数据结构的时候接触过,但是没有真正理解,也从来没有用过,现在遇到这个拼图游戏路径计算问题,才真正知道了什么是广度优先搜索。 首先拿一个2行2列的作为例子,把每个小方格赋上号码,1230是我们的初始状态,目标状态是2013(0代表空白方格)。 由1230找到2013的具体算法如下: 第一步、取到根节点1230的两个子节点1032,1203。 第二步、取出子节点1032,跟目标节点对比,不相同,于是继续向下寻找到节点1032的子节点0132。 第三步、当找到子节点0132以后,有两种选择:1.查看节点1032的子节点0132。2.查看节点1032的兄弟节点1203.如果是第一种选择的话就是深度优先搜索,第二种选择的话就是广度优先搜索。两种搜索的时间复杂度都是相同的,但是我想要得到最短的路径,所以,这里采取广度优先搜索。即选择2。 第四步、取出节点1032的兄弟节点1203。跟目标节点对比,不相同,于是继续向下寻找到节点1203的子节点0213。 第五步、循环第二步。