HTML5技术

canvas 制作flappy bird(像素小鸟)全流程 - 熊猫呵呵哒(3)

字号+ 作者:H5之家 来源:博客园 2016-08-26 11:01 我要评论( )

var bird = new Bird(imgEls["birds"],150,100,0.0003,0.0006 ,ctx); var sky1 = new Sky(imgEls["sky"],0,-0.3 ,ctx); var sky2 = new Sky(imgEls["sky"],800,-0.3 ,ctx); preTime= Date.now(); function run(){ v

var bird = new Bird(imgEls["birds"],150,100,0.0003,0.0006,ctx); var sky1 = new Sky(imgEls["sky"],0,-0.3,ctx); var sky2 = new Sky(imgEls["sky"],800,-0.3,ctx); preTime= Date.now(); function run(){ var now = Date.now(); dt = now - preTime; preTime = now; ctx.clearRect(0,0,800,600); //--------图片绘制区域------- sky1.update(dt); sky1.draw() sky2.update(dt); sky2.draw() sky1.setCount(2); bird.update(dt) bird.draw(); //-------------------------

绘制天空

2.3 地面的绘制

  和天空的绘制完全一样,由于地面图片尺寸较小,所以我们要多画几个

var Land = function(img,x,speed,ctx){ this.img = img ; this.x = x; this.speed = speed; this.ctx = ctx ; } Land.prototype.draw = function(){ this.ctx.drawImage ( this.img , this.x ,488 ) } Land.prototype.setCount= function(count){ Land.count = count; } Land.prototype.update = function(dur){ this.x = this.x + this.speed * dur; if (this.x <- 336){ this.x = this.x + Land.count * 336; //无缝滚动的实现 } }

地面的构造函数及运动函数

land1 = new Land(imgEls["land"],0,-0.3,ctx); var land2 = new Land(imgEls["land"],336*1,-0.3,ctx); var land3 = new Land(imgEls["land"],336*2,-0.3,ctx); var land4 = new Land(imgEls["land"],336*3,-0.3,ctx); //绘制 ----放置在绘制区域 land1.update(dt); land1.draw(); land2.update(dt); land2.draw(); land3.update(dt); land3.draw(); land4.update(dt); land4.draw(); land1.setCount(4); //设置无缝滚动

绘制地面主要代码

2.4绘制管道

  管道的绘制有一个难点是管道高度的确定

  要点:

  

var Pipe = function(upImg,downImg,x,speed,ctx){ this.x = x; this.upImg = upImg ; this.downImg = downImg; this.speed = speed; this.ctx = ctx; this.r = Math.random() *200 + 100; //随机高度+固定高度 } Pipe.prototype.draw = function(){ this.ctx.drawImage( this.upImg, this.x , this.r - 420 //管道图片的长度是420 ) this.ctx.drawImage( this.downImg, this.x , this.r +150 //管道中建的留白是150px ) } Pipe.prototype.setCount = function( count,gap ){ Pipe.count = count; Pipe.gap = gap; //这里是这次绘制的特别之处,加入了间隔 } Pipe.prototype.update =function( dur ){ this.x = this.x + this.speed*dur; .x = .r = Math.random() *200 + 150; //切换后的管道必须重新设置一个高度,给用户一个新管道的错觉 } }

管道的构造函数及运动函数

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 正确制作一个iframe,认识iframe - 33xyx

    正确制作一个iframe,认识iframe - 33xyx

    2016-08-23 17:00

  • html5 canvas首屏自适应背景动画循环效果代码 - 上善如水211

    html5 canvas首屏自适应背景动画循环效果代码 - 上善如水211

    2016-08-23 16:00

  • CSS3制作动画的三个属性 - 木昜

    CSS3制作动画的三个属性 - 木昜

    2016-08-12 13:00

  • css3制作旋转立方体相册 - 不会飞的麻雀

    css3制作旋转立方体相册 - 不会飞的麻雀

    2016-08-11 14:00

网友点评