课程笔记
课程/HTML/CSS/前端开发
HTML5小游戏---爱心鱼(上)
介绍
章节
问答
笔记
慕设计6567535
2017-12-05
2017-12-5完成果实上浮
0赞 · 0采集
java家洼
2016-06-23
8,在born方法中降低蓝色果实生成几率 好,我们这时候看到有蓝色的果实出来了,而且蓝色的果实非常多,我们来调整一下数值, 不让它那么多,否则在写score的时候会非常的大: fruitObj.prototype.born=function(i){ var aneId=Math.floor(Math.random()*ane.num); this.x[i]=ane.x[aneId]; this.y[i]=canHeight-ane.len[aneId]; this.l[i]=0; this.alive[i]=true; var ran=Math.random(); if(ran<0.2){ this.fruitType[i]="blue"; //orange,blue }else{ this.fruitType[i]="orange"; } } 这个部分,至于数值(分数)是多少,我们程序其实不用管,这个是策划做的事情, 好,这样子蓝色果实和黄色果实就有了。 那我们再回来看一下,绘制果实,黄色果实和蓝色果实这一部分我们就完成了。
0赞 · 0采集
java家洼
2016-06-23
7,修改draw方法:根据fruitType的值来绘制不同颜色的果实: 好,相应的在绘制它的图片的时候,我们需要根据它的果实类型来绘制相应的图片, 我们在外面定义一下: fruitObj.prototype.draw=function(){ for(var i=0;i<this.num;i++){ if(this.alive[i]){ if(this.fruitType[i]=="blue"){ var pic=this.blue; }else{ var pic=this.orange; } if(this.l[i]<=14){ //果实生长时果实长度的变化情况 this.l[i] += this.spd[i]*deltaTime; }else{ //果实往上漂的速度的变化情况 this.y[i] -= this.spd[i]*7*deltaTime; } ctx2.drawImage(pic,this.x[i]-this.l[i]*0.5, this.y[i]-this.l[i]*0.5,this.l[i],this.l[i]); if(this.y[i]<10){ this.alive[i]=false; } } } }
0赞 · 0采集
java家洼
2016-06-23
6,在born方法中随机给fruitType赋值: 我们该如何区别果实的类型呢?我们需要给果实类增加一个属性: //果实类型 this.fruitType=[]; 这个变量是个character类型,我们在初始化的时候,给它一个空的字符串:this.fruitType[i]=""; 当它出生的时候呢,我们再具体给它一个类型。用两个字符串,一个是orange,一个是blue,用颜色 这两个字符串来区别它的属性fruitType: fruitObj.prototype.born=function(i){ var aneId=Math.floor(Math.random()*ane.num); this.x[i]=ane.x[aneId]; this.y[i]=canHeight-ane.len[aneId]; this.l[i]=0; this.alive[i]=true; this.fruitType[i]= //orange,blue } 我们做一个随机: fruitObj.prototype.born=function(i){ var aneId=Math.floor(Math.random()*ane.num); this.x[i]=ane.x[aneId]; this.y[i]=canHeight-ane.len[aneId]; this.l[i]=0; this.alive[i]=true; var ran=Math.random(); if(ran<0.3){ this.fruitType[i]="blue"; //orange,blue }else{ this.fruitType[i]="orange"; } }
0赞 · 0采集
java家洼
2016-06-23
5,chrome浏览器特性使得果实变大 好的,另一个细节是果实分黄色的果实和蓝色的果实。两种不同的果实,这两种果实的 区别呢,就是它的图片资源不一样,同时在功能上是这样子的,假设大鱼吃到了一个黄色的 果实,假设它得10分,那么蓝色的果实呢,可以使它当前吃到的黄色果实的数量加倍,ok,关于 这个功能这方面我们先不管,到后面我们去计算的它的score的时候再说,现在我们需要把黄色 果实和蓝色果实让它能够有所区别,刚才为什么会出现一个特别大的果实呢?这是chrome浏览器的 特性,当你不再当前标签下面的时候,它就会有时间间隔啊,它会有一个不执行的状态,当我切过来 的时候,这个标签页下的东西实际上是不执行的,所以会导致那个deltaTime会特别的大,那这个问题 大家可以不用管它,
0赞 · 0采集
java家洼
2016-06-23
4,修改speed,让它的范围更大,使得果实快慢差距变大 好,我们到浏览器中看一下:可以看到有果实出来了,一开始的时候还是会产生一大片 然后后面就看起来比较自然了,那我们再修改一下数值吧。让它的speed状态随机的范围 更大一点: fruitObj.prototype.init=function(){ for(var i=0;i<this.num;i++){ this.alive[i]=false; this.x[i]=0; this.y[i]=0; this.l[i]=0; this.spd[i]=Math.random()*0.017+0.003;//[0.003,0.02) } this.orange.src="./src/fruit.png"; this.blue.src="./src/blue.png"; } 好,再看一下,好的,现在快慢差距会非常的大
1赞 · 0采集
java家洼
2016-06-23
3.修改init方法,将fruitMonitor放在gameloop中。 好,ok,那我们初始化的时候,这里把所有的状态设置为false:this.alive[i]=false; fruitObj.prototype.init=function(){ for(var i=0;i<this.num;i++){ this.alive[i]=false; this.x[i]=0; this.y[i]=0; this.l[i]=0; this.spd[i]=Math.random()*0.01+0.005;//[0.005,0.015) /* 这个意思就是说:在初始化的时候,让所有的果实都出生,出生的过程呢,就是 找到一个位置让它出生, this.born(i);*/ } this.orange.src="./src/fruit.png"; this.blue.src="./src/blue.png"; } 同时我们需要把这个函数fruitMonitor放在主循环里面,每一帧都要进行判断: function gameloop(){ window.requestAnimFrame(gameloop); var now=Date.now(); deltaTime=now-lastTime; lastTime=now; drawBackground(); ane.draw(); fruitMonitor(); fruit.draw(); }
0赞 · 0采集
java家洼
2016-06-23
2.修改born方法,增加发出果实方法:sendFruit。 但是在这里还有一个细节,在整个30个果实池里面,哪一个是处于 闲置状态,哪一个是活着的,需要去判断一下,这里还是做一个循环: 如果当前果实的状态是false,就要让这个果实出生,这里需要传一个参数进来,这个i值对应的 果实出生,它要随机一个海葵的位置,而后它的尺寸归零,同时它的alive状态要设置为true。 fruitObj.prototype.born=function(i){ var aneId=Math.floor(Math.random()*ane.num); this.x[i]=ane.x[aneId]; this.y[i]=canHeight-ane.len[aneId]; this.l[i]=0; this.alive[i]=true; } 当它出生之后呢,本次循环结束。每次sendFruit()只要send一个fruit。然后下一次再进入循环。 function sendFruit(){ for(var i=0;i<fruit.num;i++){ if(!fruit.alive[i]){ fruit.born(i); return; } } }
1赞 · 0采集
java家洼
2016-06-23
那我们再来看一下游戏机制: 1,给果实添加监视功能:fruitMonitor方法。 我们所有的果实并不是一切全部出生,漂上去,然后就完了,而是持续不断的产生果实, 保持屏幕上有一定数量的果实,所以给它加一个规则:这个规则是这样的: 保持屏幕上有一定数量的果实,比如15个,所以我们一开始初始化的时候,不应该让所有的果实 都出生,而是要有一个机制去判断,我们来给果实添加一个监视功能吧。 我们要判断一下当前屏幕上有多少个果实是活着的,如果它的状态是true,我们要做一个数据统计。 num++如果数量少于15个,发出一个果实,让果实出生,并且当前的功能执行完毕,怎么让它发出一个 果实呢,就是让它执行一下born方法。 function fruitMonitor(){ var num=0; for(var i=0;i<fruit.num;i++){ if(fruit.alive[i]) num++; } if(num<15){ //send fruit sendFruit(); return; } }
0赞 · 0采集
mmotiy
2016-03-08
pic 是局部变量 为什么在函数体外还是使用?
截图
0赞 · 0采集
qqwww
2016-02-23
果实4
截图
0赞 · 0采集
qqwww
2016-02-23
果实3
截图
0赞 · 0采集
数据加载中...