优化之后小球只会出来几个是什么原因有时候也不会出来
var WINDOW_WIDTH=1024;
var WINDOW_HEIGHT=768;
var R=8;
TOP=60;
LEFT=30;
const endTime=new Date(2018 ,5,20,18,47,52);
var curShowTimeSeconds=0;
var balls=[];
const colors=["#33B5E5","#0099CC","#AA66CC","#9933CC","#99CC00","#669900","#FFBB33","#FF8800","#FF4444","CC0000"];
window.onload=function () {
var convas=document.getElementById("canvas");
var context=canvas.getContext("2d");
canvas.width=WINDOW_WIDTH;
canvas.height=WINDOW_HEIGHT;
curShowTimeSeconds= getCurShowTimeSeconds();
setInterval(
function () {
render(context);
update();
},50
)
}
function getCurShowTimeSeconds() {
var curTime=new Date();
var ret=endTime.getTime()-curTime.getTime(); //取得毫秒数
ret=Math.round(ret/1000); //转化为秒同时转化为整数
return ret >=0?ret:0;
}
function update() {//时间的变化
var nextShowTimeSeconds=getCurShowTimeSeconds();
var nexthours=parseInt(nextShowTimeSeconds/3600);
var nextminutes=parseInt((nextShowTimeSeconds-nexthours*3600)/60);
var nextseconds=nextShowTimeSeconds%60;
var curhours=parseInt(curShowTimeSeconds/3600);
var curminutes=parseInt((curShowTimeSeconds-curhours*3600)/60);
var curseconds=curShowTimeSeconds%60;
if (curseconds != nextseconds) {
if(parseInt(curhours/10)!=parseInt(nexthours/10)){
addBalls(LEFT,TOP,parseInt(curhours/10));
}
if(parseInt(curhours%10)!=parseInt(nexthours%10)){
addBalls(LEFT+15*(R+1),TOP,parseInt(curhours%10));
}
if(parseInt(curminutes/10)!=parseInt(nextminutes/10)){
addBalls(LEFT+39*(R+1),TOP,parseInt(curminutes/10));
}
if(parseInt(curminutes%10)!=parseInt(nextminutes%10)){
addBalls(LEFT+54*(R+1),TOP,parseInt(curminutes%10));
}
if(parseInt(curseconds/10)!=parseInt(nextseconds/10)){
addBalls(LEFT+78*(R+1),TOP,parseInt(curseconds/10));
}
if(parseInt(curseconds%10)!=parseInt(nextseconds%10)){
addBalls(LEFT+93*(R+1),TOP,parseInt(curseconds%10));
}
curShowTimeSeconds = nextShowTimeSeconds;
}
updateBalls()
console.log(balls.length)
}
function updateBalls(){
for(var i=0;i<balls.length;i++){
balls[i].x+=balls[i].vx;
balls[i].y+=balls[i].vy;
balls[i].vy+=balls[i].g;
if(balls[i].y>=WINDOW_HEIGHT-R){
balls[i].y=WINDOW_HEIGHT-R;
balls[i].vy=-balls[i].vy*0.75;
}
}
// 优化性能解决占内存问题
var cnt=0;
for(var i=0;i<balls.length;i++)
if(balls[i].x+R>0&&balls[i].x-R<WINDOW_HEIGHT)
balls[cnt++]=balls[i];
while(balls.length>cnt){
balls.pop();
}
}
function addBalls(x,y,num) {
for(var i=0;i<digit[num].length;i++)
for(var j = 0; j < digit[num][i].length; j++)
if(digit[num][i][j]==1){
var aBall={
x:x+j*2*(R+1)+(R+1),
y:y+i*2*(R+1)+(R+1),
g:1.5+Math.random(),
vx:Math.pow(-1,Math.ceil(Math.random()*1000))*4,//pow 平方
vy:-5,
color:colors[Math.floor(Math.random()*colors.length)]
}
balls.push(aBall)
}
}
function render(cxt) {
cxt.clearRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT)
var hours=parseInt(curShowTimeSeconds/3600);
var minutes=parseInt((curShowTimeSeconds-hours*3600)/60);
var seconds=curShowTimeSeconds%60;
rederDigit(LEFT,TOP,parseInt(hours/10),cxt);
rederDigit(LEFT+15*(R+1),TOP,parseInt(hours%10),cxt);
rederDigit(LEFT+30*(R+1),TOP,10,cxt);
rederDigit(LEFT+39*(R+1),TOP,parseInt(minutes/10),cxt);
rederDigit(LEFT+54*(R+1),TOP,parseInt(minutes%10),cxt);
rederDigit(LEFT+69*(R+1),TOP,10,cxt);
rederDigit(LEFT+78*(R+1),TOP,parseInt(seconds/10),cxt);
rederDigit(LEFT+93*(R+1),TOP,parseInt(seconds%10),cxt);
for(var i=0;i<balls.length;i++){
cxt.fillStyle=balls[i].color;
cxt.beginPath();
cxt.arc(balls[i].x,balls[i].y,R,0,2*Math.PI,true);
cxt.closePath();
cxt.fill();
}
}
function rederDigit(x,y,num,cxt) {
cxt.fillStyle="rgb(0,102,153)";
for(var i=0;i<digit[num].length;i++)
for(var j = 0; j < digit[num][i].length; j++)
if(digit[num][i][j]==1){
cxt.beginPath();
cxt.arc(x + (R + 1) * 2 * j + (R + 1), y + (R + 1) * 2 * i + (R + 1), R, 0, 2 * Math.PI);
cxt.closePath();
cxt.fill();
}
}不知道为啥~~~代码跟老师的一样呀~~~