穷人版迷宫游戏 发表于 2017-04-27 | 分类于 demo | 运行效果这几天在看canvas,这是用canvas写的”穷人版”迷宫游戏…html1234567891011121314151617181920212223242526272829<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>maze</title> <link href="css/maze.css" rel="stylesheet"></head><body> <div class = wrapper> <canvas id = "canvas" width = "482px" height = "482px"></canvas> <div class = "btn"> <p>PS: 控制方向键移动笑脸走出迷宫,如果键盘失效请点击右边按钮移动!</p> <span>请选择游戏模式:</span> <button id = "easy">简单</button> <button id = "normal">普通</button> <button id = "difficult">困难</button> </div> <img src = "img/face.png" id = "face"> <img src = "img/maze1.png" id = "maze1"> <img src = "img/maze2.png" id = "maze2"> <img src = "img/maze3.png" id = "maze3"> <button id = "up">上</button> <button id = "down">下</button> <button id = "left">左</button> <button id = "right">右</button> </div> <script src="js/maze.js"></script></body></html> css12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455body { /*background: url("../img/bg1.jpg") fixed;*/ background-color: #000000;}.wrapper { font-family: "Microsoft Yahei", Arial, Helvetica, sans-serif; width: 100%; text-align: center;}#canvas { border: 1px solid #000000;}img { display: none;}p { font-size: 1.1em; color: white;}span { font-size: 1.2em; color: white; margin: 0;}button { border-radius: 5px; padding: 3px 8px; margin: 0 5px; border: none; background-color: #ffb33b; color: #000000; font-size: 1em; letter-spacing: 2px; box-shadow: 1px 1px white;}#up { position: fixed; top: 235px; right: 200px;}#down { position: fixed; top: 315px; right: 200px;}#left { position: fixed; top: 275px; right: 240px;}#right { position: fixed; top: 275px; right: 160px;} js123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103var canvas,context;var x = 0,y = 0,addx = 0,addy = 0;var t;window.onload = function() { canvas = document.getElementById("canvas"); context = canvas.getContext("2d"); var mazeImg1 = document.getElementById("maze1"); drawMaze(mazeImg1,228,2); window.onkeydown = move; window.onkeyup = stop;};//绘画迷宫图片function drawMaze(newImg,newX,newY) { clearTimeout(t); canvas.width = newImg.width; canvas.height = newImg.height; context.drawImage(newImg,0,0); x = newX, y = newY; var faceImg = document.getElementById("face"); context.drawImage(faceImg,x,y); t = setTimeout(drawFrame,10);};//判断方向键改变方向function move(e) { addx = 0; addy = 0; if(e.keyCode == 37) { addx = -1; } else if(e.keyCode == 38) { addy = -1; } else if(e.keyCode == 39) { addx = 1; } else if(e.keyCode == 40) { addy = 1; }};//停止移动function stop() { addx = 0; addy = 0;};//绘画笑脸函数,通过不断调用函数运动function drawFrame() { x += addx; y += addy; if (check()) { x -= addx; y -= addy; addx = 0; addy = 0; } var faceImg = document.getElementById("face"); context.drawImage(faceImg, x, y); if (y > (canvas.height - 12)) { alert("恭喜过关了!"); return; } t = setTimeout(drawFrame,20);};//检查是否碰墙了function check() { var imgData = context.getImageData(x,y,10,10); var pixels = imgData.data; for(var i = 0; i < pixels.length; i += 4) { var red = pixels[i]; var green = pixels[i+1]; var blue = pixels[i+2]; if(red == 0 && green == 0 && blue == 0) { return true; } } return false;};//按钮控制运动,起到方向键的作用document.getElementById("up").onclick = function(){ addy = -1;};document.getElementById("down").onclick = function(){ addy = 1;};document.getElementById("left").onclick = function(){ addx = -1;};document.getElementById("right").onclick = function(){ addx = 1;};var mazeImg1 = document.getElementById("maze1");var mazeImg2 = document.getElementById("maze2");var mazeImg3 = document.getElementById("maze3");var easyBtn = document.getElementById("easy");var normalBtn = document.getElementById("normal");var difficultBtn = document.getElementById("difficult");//改变迷宫难度easyBtn.onclick = function() { drawMaze(mazeImg1,228,2);};normalBtn.onclick = function() { drawMaze(mazeImg2,308,2);}difficultBtn.onclick = function() { drawMaze(mazeImg3,436,2);}; 运行链接:http://codepen.io/wzc/full/zZdody(因为放在codepen上,所以键盘和按钮可能失效了,因为canvas是“tainted”(被污染的,脏的),会报Uncaught DOMException: Failed to execute ‘getImageData’ on ‘CanvasRenderingContext2D’: The canvas has been tainted by cross-origin data.我的解决办法是把文件夹放在服务器上,可以本地搭建服务器,我的解决办法是搭建了appserv,把整个迷宫文件夹放在www文件夹里,然后在浏览器输入http://localhost/maze/maze.html 就可以打开网页然后canvas就可以正常运行了…