横向卷轴(side-scrolling)地图的canvas实现

标题有点小题大作了,实际上是实现一张看起来连续的运动背景图片。 效果如下:

实现原理:

图片1与图片2是两张首尾衔接的图片,图片1以一定速度移出canvas,图片2慢慢移进canvas,当图片1完全移出canvas范围后,立即将图片1位置重置,由于两张图片是首尾衔接的,所以看起来就像是一张无限滚动的地图。

关键代码:

 1 var c = document.getElementById(‘c‘),    //canvas
 2         ctx = canvas.getContext(‘2d‘),
 3         img = new Image(),
 4         offset = 0,
 5         fps = 60,
 6         speed = 80 / fps; //每帧的速度
 7
 8     img.src = "test.jpg";
 9
10     function draw(ctx) {
11         ctx.save();
12         //offset < c.width ? (offset + speed) : 0
13         //后者不能简单重置为0,由于速度过快offset可能超过canvas的大小
14         //故需要计算两者的差值
15         offset = offset < c.width ? (offset + speed) : (offset - c.width);
16         //通过translate来实现图片的滚动
17         ctx.translate(-offset, 0);
18
19         //只需将图片正常地绘制在画面上即可,不需要操作其位置
20         ctx.drawImage(img, 0, 0);
21         ctx.drawImage(img,img.width,0);
22         ctx.restore();
23     }
24     window.onload = function() {
25         (function() {
26             ctx.clearRect(0, 0, c.width, c.height);
27             draw(ctx);
28             requestAnimationFrame(arguments.callee,c);
29         })();
30     };

时间: 2024-10-13 16:08:41

横向卷轴(side-scrolling)地图的canvas实现的相关文章

高德地图和canvas画图结合应用的一些感想(一)

之前朋友委托有个创业项目,想让我帮忙,正好那段时间有点闲,半推半就中就答应下来了. 入了团队才发现,该项目前后端分离,后端工程师已就位主要实现接口,IOS端工程师也已就位,还差一个web前端工程师.背脊一凉,我之前虽然写过一些js和css,虽有点功底但是离前端工程师还是有距离的啊.在和朋友说明情况后,朋友也是胆大,让我试试,主要他实在找不到人了(也有可能目前前端工程师报价都太贵了,创业嘛,能节约就节约,能理解...),没办法,走一步算一步吧. 其他管理页面都还好,主要Dashboard需要在地图

中国地图 xaml Canvas

<Canvas x:Name="LayoutRoot"  Height="560" Width="700" Background="Transparent">       <Canvas  x:Name="CanvasPolygon">         <Polygon Fill="#FFE9800B" IsHitTestVisible="True

赠书:HTML5 Canvas 2d 编程必读的两本经典

赠书:HTML5 Canvas 2d 编程必读的两本经典 这两年多一直在和HTML5 Canvas 打交道,也带领团队开发了世界首款基于HTML5 Canvas 的演示文档工具---AxeSlide(斧子演示,www.axeslide.com).在这个领域也积累了一些 经验,希望有机会和大家分享.今天是要给大家推荐两本这方面的书,同时会送一本书给大家. 要介绍的第一本书是我学习Canvas开发的入门书——<HTML5 Canvas核心技术:图形.动画与游戏开发>. 此书作者David Gear

canvas模拟中国铁路运行图

原理说明 1.在知道canvas画布尺寸的情况下,需要将地理经纬度信息转换为canvas画布x,y坐标,因为中国地图地理经纬度坐标取值范围为73.33-135.05(经度)37-50(维度),所以第一步需要确认的就是画布的中心位置,这里命名为centerX和centerY,同样的确认中国地图经纬度对应的中心位置,这里命名为positionX,positionY. 2.人为定义一个放大值range,这个值主要作用就是等比例的将中国地图在canvas画布中放大,range的数值需要根据画布横向尺寸跨

MapBox GL 地图页面保存为图片的方法

MapBox GL没有自带的截图api,在github上有人写了一个控件 https://github.com/geolonia/mbgl-export-control. 但控件只能以固定的方式使用,本人做了一下改动: 核心代码如下: 1 import 'canvas-toBlob' 2 import FileSaver from 'file-saver' 3 import mapboxgl from 'mapbox-gl' 4 5 function setStyles (element, st

2016.3.5 开放世界游戏进化史

基本上我们所说的开放世界游戏需要具备,一个足够大的世界,不引导你去某个特定区域,也不限制你的行动范围,你不需要非得完成故事主线才能穿越游戏世界,事实上有没有故事主线都无所谓,而玩家必须存在于这个游戏世界中,不会控制世界的走向,而是控制游戏中的角色自己,我们不想把<文明>系列归为开放世界游戏,因为坦诚点说那不是开放世界游戏. 所以第一个开放世界游戏是什么,我们认为<创世纪:第一黑暗纪元>是第一款开放世界游戏,但其与许多开放世界游戏有点区别,因为游戏的机制并不是无缝连接的,首先地牢探索

100个精彩的开源游戏

街机游戏 1.Andy's Super Great Park 骑在过山车上,躲避障碍的同时收集气球.游戏有25关,另外还有18关需要得到高分才能解锁.支持的操作系统:Windows,Linux,Android. 2.Armagetron Advanced 这是Tron的3D克隆版.在游戏中,你需要控制你的光圈来使你的竞争对手比你早撞上墙.支持单人游戏和最多16人联网游戏.支持的操作系统Windows, Linux, OS X, Android. 3.BZFlag 全称是"Battle Zone

Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc

Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc 1. #-------常用 游戏类型 1 2. 街机的历史 2 3. #=====================常用街机系统 3 4. NEO GEO,SNK之系统 3 5. SNK新日本企划 3 6. CPS2和CPS1,,CAPCOM早期街机的机版系统 4 7. MAME系统 4 8. SFC/SMC (这个是使用 手柄的,不是 摇杆) 4 9. 游戏)三大组成部分 Arcade, C

(官网)虚幻3--相机技术指南

相机技术指南 相机技术指南 概述 相机 后期特效 镜头特效 相机动画 相机修改器 Player Controller(玩家控制器) Pawn 定制相机行为 示例 - CalcCamera 第一人称相机示例 第三人称相机示例 自上而下相机示例 等角相机示例 横向卷轴相机示例 一体化相机示例 示例 - 自定义相机 基础相机模块 自定义相机 基础控制模块 Engine 类重载 PlayerController Pawn 类 GameInfo 类 示例相机模块 示例控制模块 配置文件 概述 虚幻引擎 3