js学习之地图生成

首先,上地图图片

接着,js,我们可以把图片看成一块块32*32像素的

var i;
var j;

window.onload = function () {
    gamemap(15, 10, 10, "map.jpg");
}

var mapimg = new Image();
var map = [
    [18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 55, 55, 18],
    [18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 55, 55, 18],
    [18, 18, 17, 17, 17, 17, 18, 18, 17, 17, 17, 17, 55, 55, 18],
    [18, 17, 17, 17, 18, 18, 18, 18, 18, 17, 17, 55, 55, 17, 18],
    [18, 17, 17, 18, 22, 23, 23, 23, 24, 18, 17, 55, 55, 17, 18],
    [18, 17, 17, 18, 25, 28, 26, 79, 27, 18, 55, 55, 17, 17, 18],
    [18, 17, 17, 17, 17, 10, 11, 12, 18, 18, 55, 55, 17, 17, 18],
    [18, 18, 17, 17, 10, 16, 16, 16, 11, 55, 55, 17, 17, 17, 18],
    [18, 18, 17, 17, 77, 16, 16, 16, 16, 21, 21, 17, 17, 17, 18],
    [18, 18, 18, 18, 18, 18, 18, 18, 18, 55, 55, 18, 18, 18, 18]
];
//创建构成地图的二维数组  

function gamemap(x, y, num, url) {  //长个数,宽个数,一行个数,图片路径
    var canvas = document.getElementById("map");
    var context = canvas.getContext("2d");

    mapimg.src = url;

    mapimg.onload = function () {
        context.fillRect(0, 0, x * 32, y * 32);
        //画一个长480,宽320的矩形  

        for (i = 0; i < x; i++) {
            for (j = 0; j < y; j++) {
                drawTile(i * 32, j * 32, map[j][i], num);
            }
        }
        //循环调用绘制地图的函数,直到画完为止
    }
}

function drawTile(x, y, type, num) {
    var canvas = document.getElementById("map");
    var context = canvas.getContext("2d");
    context.drawImage(mapimg, type % num * 32, parseInt(type / num) * 32, 32, 32, x, y, 32, 32);
} 

最后,页面调用

<!DOCTYPE html>
<html>
<head>
    <title>地图生成</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" />
    <script type="text/javascript" src="map.js"></script>
</head>
<body>
    <canvas id="map" width="480px" height="320px" style="border: 1px solid gray;"></canvas>
</body>
</html>

效果图:

时间: 2024-11-10 13:51:07

js学习之地图生成的相关文章

【转】Backbone.js学习笔记(二)细说MVC

文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Backbone源码结构 1: (function() { 2: Backbone.Events // 自定义事件 3: Backbone.Model // 模型构造函数和原型扩展 4: Backbone.Collection // 集合构造函数和原型扩展 5: Backbone.Router // 路由

js学习笔记知识点

AJAX用法安全限制JSONPCORS面向对象编程创建对象构造函数原型继承class继承 AJAX 用法 AJAX不是JavaScript的规范,它只是一个哥们"发明"的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: 'use strict'; function success(text) { var textarea = document.getE

JS学习笔记-JSON

JSON(JavaScriptObject Notation)-JS对象表示法,是JavaScript的一个严格子集,它是一种开发式和基于文本的数据交换格式,因此JSON并不是JS独有,其他很多语言也可以对JSON进行解析和序列化. 特点: 1.轻量级-易于阅读和编写,同时易于及其解析和生成 2.可表示类型: (1)简单值:字符串.数值.布尔值.null,不支持特殊值JS中的undefined (2)对象 { "user" : "Admin", "age&

Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)

笔记来自<Node入门>@2011 Manuel Kiessling JavaScript与Node.js Node.js事实上既是一个运行时环境,同时又是一个库. 使用Node.js时,我们不仅仅在实现一个应用,同时还实现了整个HTTP服务器. 一个基础的HTTP服务器 server.js:一个可以工作的HTTP服务器 var http = require("http"); http.createServer(function(request, response) { r

video.js学习笔记

在开发的项目中,有视频播放这个功能,找了好多前端的插件,最后决定时用video.js . 什么是video.js? video.js是一个开源的HTML5  jquery 视频插件,这个插件可以用来处理Flash 视频,也可以很好的支持H5,它还是一个多平台支持的产品. video.js的优点 它是开源免费的,可以在github很容易的获取到最新的源码. 使用起来非常容易,只要花几秒中就可以夹起一个视频播放页面. 它几乎兼容所有的浏览器,并且优先使用HTML5,在不支持的浏览器中,会自动生成Fa

QRCode.js:使用 JavaScript 生成二维码

Javascript 二维码生成库: QRCode.js 学习地址:http://www.runoob.com/w3cnote/javascript-qrcodejs-library.html 在线链接:http://www.runoob.com/try/try.php?filename=tryhtml5_QRCode

JS学习:JavaScript的核心

分享到 分类 JS学习   发布 ourjs  2013-12-02 注意 转载须保留原文链接,译文链接,作者译者等信息. 作者: JeremyWei  原文: JavaScript The Core 对象 原型链 构造函数 执行上下文栈 执行上下文 变量对象 活动对象 作用域链 闭包 This 总结 这篇文章是「深入ECMA-262-3」系列的一个概览和摘要.每个部分都包含了对应章节的链接,所以你可以阅读它们以便对其有更深的理解. 面向读者:经验丰富的程序员,专家. 我们以思考对象的概念做为开

GIS(四)——为js版搜狗地图添加边界+Marker和Brand的最终美化版

在<GIS(三)--优化js版搜狗地图的brand标牌样式>中,分享了一下Brand样式的修改.现在把这几次Marker和Brand的修改统一再美化一下,算作一个终极优化版吧. 这次优化的主要内容是: 为整个操作的区域,添加边界 为Marker更换动态图片 为Brand更换半透明红色图片 只显示一个Brand,每3秒切换一次 1.绘制边界 首先做第一个吧,在搜狗地图上添加边界,是一个很简单的.很基本的,但是又很人性化的一个功能.在官网的实例代码中,覆盖层的第21个示例代码<画多边形区域.

在js版搜狗地图上添加brand标牌

在上一篇博文中,我在搜狗地图上添加了Marker标记,但是在用户体验度上还是不够的,如果想了解某些信息,你得把鼠标指向marker,才能看到title里的值.有没有一种可以直接显示在marker上的东东呢? 其实有很多方法可以做到.搜狗地图提供了叠加层类,但是可以直接在页面上显示信息的,貌似只有InfoWindow.Label和Brand.一般InfoWindow是用来显示大量信息的.所以我们显示少量信息一般选用Label和Brand.但是Label显示的效果比较一般,四棱四角的,而Brand则