js实现跑酷小游戏
代码语言:html
所属分类:游戏
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Kandi Runner</title> <style> body { font-family: arial,sans-serif; font-size: 16px } .wrapper { width: 600px; height: 360px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; position: absolute; left: 20px; margin-left: auto; margin-right: auto } canvas { position: absolute; top: 0; left: 0; border: 1px solid #000; z-index: 1; width: 600px; height: 360px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box } #game-over { display: none; text-align: center; padding-top: 92px; z-index: 7; width: 600px; height: 360px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; overflow: auto; margin: auto; position: absolute } </style> </head> <body> <h3>按空格键跳跃</h3> <div class="wrapper"> <canvas id="canvas" width="800" height="480"> <p> You're browser does not support the required functionality to play this game. </p> <p> Please update to a modern browser such as <a href="www.google.com/chrome/">Google Chrome</a> to play. </p> </canvas> <div id="game-over"> <a href="javascript:void(0);" class="restart" id="restart">再试一次?</a> </div> </div> <script> (function() { var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var player, score, stop, ticker; var ground = [], water = [], enemies = [], environment = []; var platformHeight, platformLength, gapLength; var platformWidth = 32; var platformBase = canvas.height-platformWidth; var platformSpacer = 64; function rand(low, high) { return Math.floor(Math.random()*(high-low+1)+low); } function bound(num, low, high) { return Math.max(Math.min(num, high), low); } var assetLoader = (function() { this.imgs = { 'bg': '/bfwrepo/image/paoku/bg.png', 'sky': '/bfwrepo/image/paoku/sky.png', 'backdrop': '/bfwrepo/image/paoku/backdrop.png', 'backdrop2': '/bfwrepo/image/paoku/backdrop_ground.png', 'grass': '/bfwrepo/image/paoku/grass.png', 'avatar_normal': '/bfwrepo/image/paoku/normal_walk.png', 'water': '/bfwrepo/image/paoku/water.png', 'grass1': '/bfwrepo/image/paoku/grassMid1.png', 'grass2': '/bfwrepo/image/paoku/grassMid2.png', 'bridge': '/bfwrepo/image/paoku/bridge.png', 'plant': '/bfwrepo/image/paoku/plant.png', 'bush1': '/bfwrepo/image/paoku/bush1.png', 'bush2': '/bfwrepo/image/paoku/bush2.png', 'cliff': '/bfwrepo/image/paoku/grassCliffRight.png', 'spikes': '/bfwrepo/image/paoku/spikes.png', 'box': '/bfwrepo/image/paoku/boxCoin.png', 'slime': '/bfwrepo/image/paoku/slime.png' }; var assetsLoaded = 0; var numImgs = Object.keys(this.imgs).length; this.totalAssest = numImgs; function assetLoaded(dic, name) { if (this[dic][name].status !== 'loading') { return; } this[dic][name].status = 'loaded'; assetsLoaded++; if (assetsLoaded === this.totalAssest && typeof this.finished === 'function') { this.finished(); }} this.downloadAll = function() { var _this = this; var src; for (var img in this.imgs) { if (this.imgs.hasOwnProperty(img)) { src = this.imgs[img]; (function(_this, img) { _this.imgs[img] = new Image(); _this.imgs[img].status = 'loading'; _this.imgs[img].name = img; _this.imgs[img].onload = function() { assetLoaded.call(_this, 'imgs', img)}; _this.imgs[img].src = src; })(_this, img); }}} return { imgs: this.imgs, totalAssest: this.totalAssest, downloadAll: this.downloadAll }; })(); assetLoader.finished = function() { startGame(); } function SpriteSheet(path, frameWidth, frameHeight) { this.image = new Image(); this.frameWidth = frameWidth; this.frameHeight = frameHeight; var self = this; this.image.onload = function() { self.framesPerRow = Math.floor(self.image.width/self.frameWidth); }; this.image.src = path; } function Animation(spritesheet, frameSpeed, startFrame, endFrame) { var animationSequence = []; var currentFrame = 0; var counter = 0; for (var frameNumber = startFrame; frameNumber <= endFrame; frameNumber++) animationSequence.push(frameNumber); this.update = function() { if (counter == (frameSpeed-1)) currentFrame = (currentFrame+1)%animationSequence.length; counter = (counter+1)%frameSpeed; }; this.draw = function(x, y) { var row = Math.floor(animationSequence[currentFrame]/spritesheet.framesPerRow); var col = Math.floor(animationSequence[currentFrame]%spritesheet.fram.........完整代码请登录后点击上方下载按钮下载查看
网友评论0