这是一个特别简单的用原生js实现的一个小鸟游戏,比较简单,适合新手练习。
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实现贪吃蛇游戏,包括了原生js实现贪吃蛇游戏的使用技巧和注意事项,需要的朋友参考一下 原生JavaScript实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 代码: 代码仅有js部分,完整代码可以上我的github免费下载 更多有趣的经典小游戏实现专题,分享给大家: C++经典小游戏汇总 python经典小游戏汇总 python俄罗斯方块游戏集合 JavaScript经典
本文向大家介绍原生js实现五子棋游戏,包括了原生js实现五子棋游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现五子棋游戏的具体代码,供大家参考,具体内容如下 html: css: script: 更多有趣的经典小游戏实现专题,分享给大家: C++经典小游戏汇总 python经典小游戏汇总 python俄罗斯方块游戏集合 JavaScript经典游戏 玩不停 javascr
本文向大家介绍原生JS实现的跳一跳小游戏完整实例,包括了原生JS实现的跳一跳小游戏完整实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了原生JS实现的跳一跳小游戏。分享给大家供大家参考,具体如下: 以下说的是闲暇编写的一个小游戏--跳一跳,类似于微信的跳一跳,大体实现功能有: 1.先随机生成地图; 2.按住按钮释放后完成动作并进行判断; 首先po一下代码; 代码如下: 代码主要分为用来绘
本文向大家介绍纯原生js实现贪吃蛇游戏,包括了纯原生js实现贪吃蛇游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 更多有趣的经典小游戏实现专题,分享给大家: C++经典小游戏汇总 python经典小游戏汇总 python俄罗斯方块游戏集合 JavaScript经典游戏 玩不停 java经典小游戏汇总 javascript经典
本文向大家介绍原生js实现自定义难度的扫雷游戏,包括了原生js实现自定义难度的扫雷游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现扫雷游戏的具体代码,供大家参考,具体内容如下 游戏功能: 1、有四个难度 2、可以自定难度 1、html相关代码 2、css样式 3、js代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍js实现超级玛丽小游戏,包括了js实现超级玛丽小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js超级玛丽小游戏的具体代码,供大家参考,具体内容如下 怎么用通过按键,来控制图片的位置 这个小游戏,用面向对象会很方便,不用面向对象会很麻烦很麻烦,比如以后要讲解的坦克大战的游戏,要是用纯的面向过程或函数式的方式写,那维护起来会非常的麻烦。 游戏分析: 看看如何通过按