组团学

ES5项目-flybird

阅读 (402)

一、流程分析

项目展示与分析

流程:

  • 背景滚动
  • 开始界面
  • 点击开始按钮进入游戏界面
  • 壁垒移动
  • 小鸟飞翔
  • 分数累计
  • 死亡检测

二、背景滚动

index.html

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Flybird</title> <link rel="stylesheet" type="text/css" href="css/style.css"/> <script src="js/sunck.js" type="text/javascript" charset="utf-8"></script> </head> <body> <div id="mainScreen"> <!-- 滚动界面 --> <div id="sliderMenu"> <img src="img/banner.jpg" id="sliderPic1"> <img src="img/banner.jpg" id="sliderPic2"> </div> </div> </body> </html>

style.css

*{ margin: 0;padding: 0; } /*主屏幕*/ #mainScreen{ width: 343px; height: 480px; position: relative; margin: 0 auto; background-image: url(../img/bg.jpg); } /*滚动界面*/ #sliderMenu{ width: 343px; height: 14px; position: absolute; top: 422px; overflow: hidden; } #sliderPic1{ left: 0px; position: absolute; } #sliderPic2{ left: 343px; position: absolute; }

sunck.js

window.onload = function() { // 背景滚动 var sliderPic1 = document.getElementById("sliderPic1"); var sliderPic2 = document.getElementById("sliderPic2"); var sliderTimer = setInterval(function() { sliderPic1.style.left = sliderPic1.offsetLeft - 1 + "px"; sliderPic2.style.left = sliderPic2.offsetLeft - 1 + "px"; if (sliderPic1.offsetLeft <= -343) { sliderPic1.style.left = "343px"; } if (sliderPic2.offsetLeft <= -343) { sliderPic2.style.left = "343px"; } }, 50); }

三、开始界面

index.html

<div id="mainScreen"> …… <!-- 开始界面 --> <div id="startMenu"> <div id="headLogo"><img src="img/bird0.png" id="startBird"></div> <div id="startBtn"></div> </div> </div>

style.css

/*开始界面相关*/ #startMenu{ width: 343px; height: 422px; position: absolute; } #headLogo{ width: 236px; height: 77px; position: absolute; left: 54px; top: 110px; background-image: url(../img/head.jpg); } #startBird{ left: 200px; top: 15px; position: absolute; } #startBtn{ width: 85px; height: 29px; left: 129px; top: 300px; background-image: url(../img/start.jpg); position: absolute; }

sunck.js

window.onload = function() { …… //开始界面 var headLogo = document.getElementById("headLogo"); var startBird = document.getElementById("startBird"); var speed = 1; var birdArr = ["img/bird0.png", "img/bird1.png"]; var index = 1; var headTimer = setInterval(function() { //上下浮动 if (headLogo.offsetTop >= 160) { speed = -1; } if (headLogo.offsetTop <= 110) { speed = 1; } headLogo.style.top = headLogo.offsetTop + speed + "px"; //鸟动 startBird.src = birdArr[index++]; if (index == birdArr.length) { index = 0; } }, 50); }

四、点击开始按钮进入游戏界面

index.html

<div id="mainScreen"> …… <!-- 游戏界面 --> <div id="gameMenu"> </div> </div>

style.css

/*游戏界面*/ #gameMenu{ width: 343px; height: 422px; position: absolute; display: none; overflow: hidden; }

sunck.js

window.onload = function() { …… // 点击开始按钮进入游戏界面 var startBtn = document.getElementById("startBtn"); var startMenu = document.getElementById("startMenu"); var gameMenu = document.getElementById("gameMenu"); //对于开始界面的操作 startBtn.addEventListener("click", function() { // 删除开始界面 startMenu.parentNode.removeChild(startMenu); // 关闭上下移动定时器 clearInterval(headTimer); // 显示游戏界面 gameMenu.style.display = "block"; }, false); }

五、壁垒移动

index.html

<script src="js/column.js" type="text/javascript" charset="utf-8"></script>

c.png

column.js

function Column(name, width, height, left, speed){ this.element = null; this.upElement = null; this.img1 = null; this.img2 = null; this.downElement = null; this.img3 = null; this.img4 = null; this.name = name; this.width = width; this.height = height; this.left = left; this.speed = speed; this.picUp1 = "img/up_mod.png"; this.picUp2 = "img/up_pipe.png"; this.picDown1 = "img/down_mod.png"; this.picDown2 = "img/down_pipe.png"; this.randomNum = function(min, max){ return parseInt(Math.random()*(max-min+1)+min); } this.createColumn = function(){ this.element = document.createElement("div"); this.element.style.position = "absolute"; this.element.style.width = this.width + "px"; this.element.style.height = this.height + "px"; this.element.style.left = this.left + "px"; this.element.style.top = 0; // this.element.style.backgroundColor = "red"; h1 = this.randomNum(100, 150); this.upElement = document.createElement("div"); this.upElement.style.width = this.width + "px"; this.upElement.style.height = h1 + "px"; this.upElement.style.position = "absolute"; this.upElement.style.left = 0; this.upElement.style.top = 0; // this.upElement.style.backgroundColor = "green"; this.element.appendChild(this.upElement); this.img1 = document.createElement("img"); this.img1.src = this.picUp1; this.img1.style.height = h1 - 60 + "px"; this.img1.style.width = this.width + "px"; this.img1.style.position = "absolute"; this.img1.style.left = 0; this.img1.style.top = 0; this.upElement.appendChild(this.img1); this.img2 = document.createElement("img"); this.img2.src = this.picUp2; this.img2.style.height = "60px"; this.img2.style.width = this.width + "px"; this.img2.style.position = "absolute"; this.img2.style.left = 0; this.img2.style.top = h1 - 60 + "px"; this.upElement.appendChild(this.img2); h2 = this.randomNum(100, 150); this.downElement = document.createElement("div"); this.downElement.style.width = this.width + "px"; this.downElement.style.height = h2 + "px"; this.downElement.style.position = "absolute"; this.downElement.style.left = 0; this.downElement.style.bottom = 0; // this.downElement.style.backgroundColor = "yellow"; this.element.appendChild(this.downElement); this.img3 = document.createElement("img"); this.img3.src = this.picDown1; this.img3.style.height = h2 - 60 + "px"; this.img3.style.width = this.width + "px"; this.img3.style.position = "absolute"; this.img3.style.left = 0; this.img3.style.top = "60px"; this.downElement.appendChild(this.img3); this.img4 = document.createElement("img"); this.img4.src = this.picDown2; this.img4.style.height = "60px"; this.img4.style.width = this.width + "px"; this.img4.style.position = "absolute"; this.img4.style.left = 0; this.img4.style.top = 0; this.downElement.appendChild(this.img4); } this.show = function(parent){ this.createColumn(); parent.appendChild(this.element); } this.move = function(){ var _this = this; setInterval(function(){ _this.element.style.left = _this.element.offsetLeft - _this.speed + "px"; if (_this.element.offsetLeft < -45){ _this.element.style.left = "490px"; _this.changeStyle(); } }, 20); } this.changeStyle = function(){ h1 = this.randomNum(100, 150); this.upElement.style.height = h1 + "px"; this.img1.style.height = h1 - 60 + "px"; this.img2.style.top = h1 - 60 + "px"; h2 = this.randomNum(100, 150); this.downElement.style.height = h2 + "px"; this.img3.style.height = h2 - 60 + "px"; } }

sunck.js

window.onload = function() { …… // 壁垒移动 startBtn.addEventListener("click", function() { setTimeout(function(){ var column = new Column("c1", 62, 422, 343, 2); column.show(gameMenu); column.move(); setTimeout(function(){ var column = new Column("c2", 62, 422, 343, 2); column.show(gameMenu); column.move(); setTimeout(function(){ var column = new Column("c3", 62, 422, 343, 2); column.show(gameMenu); column.move(); }, 1800); }, 1800); }, 1800); }, false); }

六、小鸟飞翔

index.html

<script src="js/bird.js" type="text/javascript" charset="utf-8"></script>

bird.js

var bird = { element: null, speed: 0, maxSpeed: 10, downImgArr: ["img/down_bird0.png", "img/down_bird1.png"], upImgArr: ["img/up_bird0.png", "img/up_bird1.png"], imgArr: null, flyTimer: null, wingTimer: null, createBird: function(){ this.element = document.createElement("div"); this.element.style.position = "absolute"; this.element.style.left = "50px"; this.element.style.top = "200px"; this.element.style.backgroundImage = "url(img/bird0.png)"; this.element.style.width = "40px" this.element.style.height = "26px"; }, show: function(parent){ this.createBird(); parent.appendChild(this.element); }, fly:function(){ var index = 0; this.wingTimer = setInterval(function(){ if (bird.speed >= 0){ //下 bird.imgArr = bird.downImgArr; }else{ //上 bird.imgArr = bird.upImgArr; } bird.element.style.backgroundImage = "url(" + bird.imgArr[index++] + ")"; if (index == 2){ index = 0; } }, 30); this.flyTimer = setInterval(function(){ bird.speed += 0.5; if (bird.speed >= bird.maxSpeed){ bird.speed = bird.maxSpeed; } bird.element.style.top = bird.element.offsetTop + bird.speed + "px"; if (bird.element.offsetTop >= 422-26 || bird.element.offsetTop <= 0){ //游戏结束 } }, 50); } }

sunck.js

window.onload = function() { …… // 小鸟飞翔 startBtn.addEventListener("click", function(){ bird.show(gameMenu); setTimeout(function(){ bird.fly(); function play(event){ if (event.keyCode == 32){ bird.speed = -10; } } document.addEventListener("keydown", play, false); }, 1000); }); }

七、分数累计

index.html

<script src="js/judge.js" type="text/javascript" charset="utf-8"></script>
<div id="mainScreen"> …… <!-- 分数计数器 --> <ul id="score"> <li><img class="scoreImg" src="img/0.jpg"></li> <li><img class="scoreImg" src="img/0.jpg"></li> <li><img class="scoreImg" src="img/0.jpg"></li> <li><img class="scoreImg" src="img/0.jpg"></li> </ul> </div>

style.css

/* 分数计数器 */ #score{ list-style: none; position: absolute; bottom: -2px; left: 115.5px; display: none; } #score li{ float: left; }

sunck.js

// 分数累计 startBtn.addEventListener("click", function(){ document.getElementById("score").style.display = "block"; judge.imgs = document.getElementsByClassName("scoreImg"); });

column.js

this.move = function() { var _this = this; setInterval(function() { _this.element.style.left = _this.element.offsetLeft - _this.speed + "px"; if (_this.element.offsetLeft < -45) { _this.element.style.left = "490px"; _this.changeStyle(); judge.score += 1; judge.scoreDetection(); } }, 20); }

judge.js

var judge = { score: 0, imgs: null, scoreDetection: function(){ var g = judge.score % 10; var s = parseInt(judge.score / 10) % 10; var b = parseInt(judge.score / 100) % 10; var q = parseInt(judge.score / 1000); var nums = [q, b, s, g]; for(var i = 0; i < nums.length; i++){ var img = judge.imgs[i]; var path = "img/"+nums[i]+".jpg"; img.src = path; } }, }

八、死亡检测

sunck.js

startBtn.addEventListener("click", function(){ setTimeout(function(){ var column = new Column("c1", 62, 422, 343, 2); column.show(gameMenu); column.move(); judge.columns.push(column.element); setTimeout(function(){ var column = new Column("c1", 62, 422, 343, 2); column.show(gameMenu); column.move(); judge.columns.push(column.element); setTimeout(function(){ var column = new Column("c1", 62, 422, 343, 2); column.show(gameMenu); column.move(); judge.columns.push(column.element); }, 1800); }, 1800); }, 1800); }, false);

judge.js

var judge = { score: 0, imgs: null, columns: null, …… dieDetection: function() { setInterval(function(){ for (var i = 0; i < judge.columns.length; i++){ var column = judge.columns[i]; if (column.offsetLeft < bird.element.offsetLeft+bird.element.offsetWidth && column.offsetLeft>bird.element.offsetLeft-column.offsetWidth){ var walls = column.getElementsByClassName("wall"); //进行碰撞检测 if (judge.pzjcFunc(walls[0], bird.element) || judge.pzjcFunc(walls[1], bird.element)){ judge.gameOver(); } } } }, 20); }, pzjcFunc: function(obj1, obj2) { var obj1Left = obj1.offsetLeft; var obj1Width = obj1Left + obj1.offsetWidth; var obj1Top = obj1.offsetTop; var obj1Height = obj1Top + obj1.offsetHeight; var obj2Left = obj2.offsetLeft; var obj2Width = obj2Left + obj2.offsetWidth; var obj2Top = obj2.offsetTop; var obj2Height = obj2Top + obj2.offsetHeight; if (!(obj1Left > obj2Width || obj1Width < obj2Left || obj1Top > obj2Height || obj1Height < obj2Top)) { return true; } return false; }, gameOver: function(){ for (var i = 0; i < 100; i++){ clearInterval(i); } } }

sunck.js

//死亡检测 startBtn.addEventListener("click", function(){ judge.dieDetection(); });

bird.js

var bird = { …… fly:function(){ …… this.flyTimer = setInterval(function(){ …… if (bird.element.offsetTop >= 422-26 || bird.element.offsetTop <= 0){ //游戏结束 judge.gameOver(); } }, 50); } }
需要 登录 才可以提问哦