【JavaScript】canvas实现一个小游戏
参考:
1、image onload事件:http://www.runoob.com/jsref/event-img-onload.html(赞)
2、canvas的drawImage无法显示图像:https://segmentfault.com/q/1010000002877796
(尝试setInterval(render, 10);就会发现图片显示出来了。)
3、addeventlistener的捕获与冒泡:https://my.oschina.net/u/867090/blog/387380

4、取整方案:http://www.cnblogs.com/pigtail/archive/2012/03/28/2421614.html
5、二维数组:http://www.cnblogs.com/ymwangel/p/5875081.html
5、发现网上已经有很多人写了:http://www.qdfuns.com/notes/13275/a66ea9c091c5cc4d0007abaf83d223ca:storey-21
6、随机迷宫算法:随机迷宫算法、http://bbs.9ria.com/thread-156150-1-1.html
mytest.js
// Create the canvas
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
canvas.width = 800;
canvas.height = 550; canvas.style.position = "absolute";
canvas.style.left = "calc(50% - 350px)";
canvas.style.top = "calc(50% - 275px)"; document.body.appendChild(canvas); // load images
var bgImage = new Image();
bgImage.src = "images/background.png"; var heroImage = new Image();
heroImage.src = "images/hero.png"; var wallImage = new Image();
wallImage.src = "images/wall.png"; // Game data
var hero = {
x: 0,
y: 0
}; var aa = new Array(); //定义一维数组
for(i = -1; i <= 14; i++) {
aa[i] = new Array(); //将每一个子元素又定义为数组
for(j = -1; j <= 13; j++) {
aa[i][j] = false;
}
} var x2 = 0;
var y2 = 0;
var notWall = function(x , y) {
return !aa[x][y];
} // random labyrinth // Game data init
var reset = function() {
// hero init
hero.x = 100;
hero.y = 100; // wall init
for(i = 0; i <= 13; i++) {
for(j = 0; j <= 12; j++) {
aa[i][j] = Math.random() > 0.5 ? true : false;
}
}
} // Game expression
var render = function() {
// draw background
ctx.drawImage(bgImage, 0, 0, 800, 550); // draw hero
ctx.drawImage(heroImage, hero.x, hero.y); // draw wall
for (m = 0; m <= 13; ++m)
for (n = 0; n <= 12; ++n)
if (aa[m][n]) ctx.drawImage(wallImage, 50*m+60, 36.5*n+40);
ctx.fillText("hero positon: x=" + hero.x + ",y=" + hero.y, 100, 100);
} var speed = 4;
addEventListener("keydown", function (e) {
x2 = Math.floor((hero.x-44)/50);
y2 = Math.floor((hero.y-32)/34.9);
if (e.key == "ArrowUp" && hero.y > 32 && notWall(x2 , y2-1)) {
hero.y -= speed;
}
if (e.key == "ArrowDown" && hero.y < canvas.height - 73 && notWall(x2 , y2+1)) {
hero.y += speed;
}
if (e.key == "ArrowLeft" && hero.x > 44 && notWall(x2-1 , y2)) {
hero.x -= speed;
}
if (e.key == "ArrowRight" && hero.x < canvas.width - 73 && notWall(x2+1 , y2)) {
hero.x += speed;
}
}, false); var testGame = function() {
reset();
setInterval(render, 13);
} testGame();
【JavaScript】canvas实现一个小游戏的更多相关文章
- 使用PixiJS做一个小游戏
PixiJS PixiJS使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库. 官方 ...
- 用javascript实现2048的小游戏
前段时间,看了一个视频,用javascript实现的2048小游戏,发现不难,都是一些基出的语法和简单逻辑. 整个2048游戏没有很多的数据,所有,实现起来还是很有成就感的. 先上图,简直就和原版游戏 ...
- js实现一个小游戏(飞翔的jj)
js实现一个小游戏(飞翔的jj) 源代码+素材图片在我的仓库 <!DOCTYPE html> <html lang="en"> <head> & ...
- 10分钟,利用canvas画一个小的loading界面
首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...
- Pygame:编写一个小游戏 标签: pythonpygame游戏 2017-06-20 15:06 103人阅读 评论(0)
大学最后的考试终于结束了,迎来了暑假和大四的漫长的"自由"假期.当然要自己好好"玩玩"了. 我最近在学习Python,本意是在机器学习深度学习上使用Python ...
- DirectX游戏开发——从一个小游戏開始
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/26364129 写在前面:自 ...
- 从零开始手把手教你使用javascript+canvas开发一个塔防游戏01地图创建
项目演示 项目演示地址: 体验一下 项目源码: 项目源码 代码结构 本节做完效果 游戏主页面 index.html <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- JavaScript+HTML5 实现打地鼠小游戏
一.游戏简介 打地鼠这个游戏相信大家都不陌生,也是童年时候一款经典的游戏.本次游戏的编写是以html文件形式完成的,并且使用HBulider软件进行编写,使用谷歌浏览器展示效果,游戏将会采用JavaS ...
- 使用JavaScript实现简单的小游戏-贪吃蛇
最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...
随机推荐
- js创建form添加input项目并提交表单
var generateHideElement = function (name, value) { var tempInput = document.createElement("inpu ...
- 【Ubuntu 16.04.3 LTS】apt-get 安装MariaDB
一.Mysql背景信息 Mysql在互联网早期就流行了,追求速度.简单.坚持开源.几乎支持所有操作系统.完全支持多用户.多线程,支持海量数据存储,采用MyISAM.InnoDB两大存储引擎优势互补.但 ...
- NATS源代码分析之auth目录
NATS是一个轻量的消息发布-订阅系统.NATS的核心是Event machine. 项目Server端源代码地址: github.com/nats-io/gnatsd 在auth目录中, multi ...
- linux jdk 6 版本下载
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-41940 ...
- python中的json和pickle
author:headsen chen date::2018-04-10 09:56:54 json模块和pickle模块: 这是用于序列化的两个模块: 概念介绍:json和pickle模块是将数据 ...
- 160622、详解JavaScript变量提升
变量在程序中随处可见.它们是一些始终在相互影响,相互作用的的数据和逻辑.正是这些互动使应用程序活了起来. 在JavaScript中使用变量很重要的一方面就是变量的提升 —— 它决定了一个变量何时可以被 ...
- 初识Flutter
什么是Flutter 官网的定义如下: Flutter is a new project to help developers build high-performance, high-fidelit ...
- ASP.Net请求处理机制初步探索之旅 - Part 2 核心(转)
开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):Ht ...
- 使用synergyc共享键鼠
通常情况下我们经常同时操作两台或者多台电脑, 这样就会存在多个键盘鼠标来回切换的问题. 那么我们主要的目标就是怎么在多个电脑上共享一套键盘鼠标,而且可以轻松的来回切换呢. 网上有很多的解决方案,这里我 ...
- c# WinForm软件启动拦截(通过更改文件关联实现)
前几天想做一个软件启动之前拦截的程序,找了下网上的资料没有找到合适的,突然看到电脑软件某看图软件,找到个思路就是跟他一样的,通过修改文件关联进行启动拦截. 原理是这样的,更改.exe默认的启动方式为我 ...