您好,登錄后才能下訂單哦!
這篇文章主要介紹了原生js如何實現Flappy Bird小游戲,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
JS是JavaScript的簡稱,它是一種直譯式的腳本語言,其解釋器被稱為JavaScript引擎,是瀏覽器的一部分,主要用于web的開發,可以給網站添加各種各樣的動態效果,讓網頁更加美觀。
html結構
<div id="game"> <div id="bird"></div> </div>
css樣式
#game { width: 800px; height: 600px; border: 1px solid #000; background: url(images/sky.png); overflow: hidden; position: relative; } #game .pipeD { background: url(images/pipe1.png) top center; position: absolute; } #game .pipeU { background: url(images/pipe2.png) bottom center; position: absolute; } #bird { width: 34px; height: 25px; /*border-radius: 10px;*/ /*background-color: red;*/ position: absolute; top: 100px; left: 100px; background: url(images/birds.png) -8px -10px no-repeat; }
下面就是原生js代碼了,這個小案例還運用了自己前期封裝的一個小的動畫方法
function animate(obj, json, fn) { clearInterval(obj.timer); obj.timer = setInterval(function () { var flag = true; for (var k in json) { if (k === "opacity") { var leader = getStyle(obj, k) * 100; var target = json[k] * 100; var step = (target - leader) / 10; step = step > 0 ? Math.ceil(step) : Math.floor(step); leader = leader + step; obj.style[k] = leader / 100; } else if (k === "zIndex") { obj.style.zIndex = json[k]; } else { var leader = parseInt(getStyle(obj, k)) || 0; var target = json[k]; var step = (target - leader) / 10; step = step > 0 ? Math.ceil(step) : Math.floor(step); leader = leader + step; obj.style[k] = leader + "px"; } if (leader !== target) { flag = false; } } if (flag) { clearInterval(obj.timer); if (fn) { fn(); } } }, 15); } function getStyle(obj, attr) { if (window.getComputedStyle) { return window.getComputedStyle(obj)[attr]; } else { return obj.currentStyle[attr]; } }
下面就是控制游戲的js代碼了
var birdElement = document.getElementById("bird"); var game = document.getElementById("game"); var gameover = false; var g = 1; var i = 0; var timer=null; var bird = { x: birdElement.offsetLeft, y: birdElement.offsetTop, speedX: 5, speedY: 0, entity: birdElement }; var sky = { x: 0 }; //var timer=setInterval(function(){ // birdElement.style.backgroundPositionX=-52*i+"px"; // i++; // if(i===3){ // i=0; // } //},100); setInterval(function () { //游戲沒有結束的時候運行代碼 if (!gameover) { //整個游戲背景x軸移動的距離 sky.x = sky.x - bird.speedX; game.style.backgroundPositionX = sky.x + "px"; //小鳥下落時y軸的坐標 bird.speedY = bird.speedY + g; //設置一個變量用來接收小鳥下落時y軸的坐標,用來設置小鳥下降時的速度 var step = bird.speedY; bird.y = bird.y + step; //用一個變量來設定小鳥下落的最低高度,用來 判斷游戲是否結束 var overY = game.offsetHeight - birdElement.offsetHeight; //小鳥的y軸坐標大于最低高度,所以游戲停止 if (bird.y > overY) { bird.y = overY; stop(); } //小鳥的y軸坐標小于0,說明碰到頂部邊框,所以游戲結束 if (bird.y < 0) { bird.y = 0; stop(); } //設置游戲開始時小鳥出現的位置 bird.entity.style.top = bird.y + "px"; } }, 25); //添加鍵盤事件,實現鍵盤上下鍵控制小鳥 document.onkeyup = function (e) { if (e.keyCode === 38) { bird.speedY = -10; } } function Pipe(positonX) { //管子的坐標 this.x = positonX; this.upPipeY = 0; this.width = 52; this.upPipeH = parseInt(Math.random() * 175 + 100); this.downPipeY = this.upPipeH + 200; this.downPipeH = game.offsetHeight - this.downPipeY; // 動態添加管子 var divUp = document.createElement("div"); divUp.className = "pipeU"; divUp.style.width = this.width + "px"; divUp.style.height = this.upPipeH + "px"; divUp.style.left = this.x + "px"; divUp.style.top = this.upPipeY + "px"; game.appendChild(divUp); var divDown = document.createElement("div"); divDown.className = "pipeD"; divDown.style.width = this.width + "px"; divDown.style.height = this.downPipeH + "px"; divDown.style.left = this.x + "px"; divDown.style.top = this.downPipeY + "px"; game.appendChild(divDown); //因為定時器會混亂this的指向問題,所以提前保存this的指向,這里的this指向調用該方法的實例 var that = this; // 設置定時器讓管子向后移動 this.timer=setInterval(function () { that.x = that.x - 1; //簡單實現管子無縫滾動 if (that.x < -52) { that.x = 800; } if (!gameover) { divUp.style.left = that.x + "px"; divDown.style.left = that.x + "px"; } // 設置變量,進行游戲碰撞檢測,并停止游戲 var downCrash = (bird.x + 34 > that.x) && (bird.x < that.x + 52) && (bird.y + 25 > that.downPipeY); var upCrash = (bird.x + 34 > that.x) && (bird.x < that.x + 52) && (bird.y < that.upPipeH); if (downCrash || upCrash) { //gameover = true; stop(); } }, 10); } //執行上面的函數方法 var arr=[]; for (var i = 0; i < 4; i++) { arr[i]=new Pipe(i * 200 + 400); } //封裝一個用來停止游戲的方法, function stop(){ gameover=true; clearInterval(timer); for(var i=0;i<arr.length;i++){ clearInterval(arr[i].timer); } }
注釋都寫在了了代碼里,一個簡單小游戲就完成了。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“原生js如何實現Flappy Bird小游戲”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。