网页闯关游戏(riddle webgame)--H5刮刮卡的原理和实践

前言:    之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识.    对于刮刮卡, 想必大家都很熟悉, 也很喜欢这种方式. 你可能会很好奇, 它是如何实现的呢?    本文将阐述其原理, 并结合具体实例来演示如何借助H5的canvas来实现类刮刮卡的效果.
展示效果:    网页闯关游戏入口(请狠狠地点击我, ^_^) http://magic.mmxfgame.com.    H5刮刮卡的实例源自第六关--拜访东方不败的故居.

  

    这一关的技术点是围绕刮刮卡而展开的, 下文将详细介绍.
刮刮卡原理:    刮刮卡的技术说开了无非就是遮盖, 擦拭的地方就是去遮盖, 并还原出遮盖底下的原始图片.    先来谈谈H5支持的绘图模式, 再来介绍下按键处理和绘图API.    • 绘图模式    Canvas的Context句柄有一个属性:globalCompositeOperation, 该属性表示的是图形的组合方式.    当我们把它设置为destination-out,它表示只绘制原图形与新图形不重叠的部分. 其实这句话有些晦涩, 很难让人看明白, 甚至误解. 不如直接上代码, 简洁明了, ^_^, 不上代码就是耍流氓.    结合简单的刮刮卡案列来强化下概念吧.

  

    原图形 等价于 刮刮卡的银灰色部分.    新图形 等价于 用户/玩家刮的时候, 新绘制的区域/路径.    被遮挡图片 等价于 银灰色部分覆盖的抽奖信息.    当原图形和新图形重叠时, 就是刮到的部分是两者交集变成透明. 那么原图形遮挡的底层图片显示出来了, 也就是抽奖部分.    所以说, 原图形就是遮盖图片, 新图形是用户刮的区域/路径.    明白这些概念之后, 那么刮刮卡的实现就非常简单的, 几乎可以说是非常的navie.

游戏具体分析:    游戏其实用了两张完全一样的图片, 一张为原图片(xyz1.jpg), 另一张则添加了解关秘钥答案(xyz2.jpg).    • 底层图片的设定    div元素中, 添加canvas元素.
    <div id="id_dongfangbubai_canvas">
        <canvas id="game_canvas" width="480px" height="333px"></canvas>
    </div>
    再来看看css样式设置.
    #id_dongfangbubai_canvas {
        background-image: url(‘http://www.xxx.com/img/xyz2.jpg‘);
        width: 480px;
        height: 333px;
    }
    答案的背景图片和canvas等同大小, 并设置于底层.    • html5中的图片加载    js中图片加载时个异步过程, 需要时间, 因此切记在图片未加载完前操作.
    var maskedImage = new Image();
    // 设置图片链接
    maskedImage.src = "http://www.xxx.com/img/xyz1.jpg";
    // 设置图片加载完的回调函数
    maskedImage.onload = function() {
        gray.drawImage(maskedImage, 0, 0);
        gray.globalCompositeOperation = "destination-out";
    }
    这样就实现了遮盖图片的绘制, 并成功设置了绘制模式.    • 事件监听    在移动端, 我们需要关注touchmove的事件操作. 再次之前, 我们先关注下坐标的定位上.

  

    蓝色区域表示的是手机设备的显示区域,而绿色区域为canvas画布的父级,已经超出了屏幕。而浅紫色部分为canvas画布。假设我们手指轻触了蓝色点的位置,红色线即为“e.targetTouches[0].clientX”的值,黑色线为“document.body.scrollLeft”或“e.pageX”的值,而黄色的线表示myCanvas.offsetLeft。    因此最终的横坐标x转换公式:
var x = e.targetTouches[0].clientX + document.body.scrollLeft - myCanvas.offsetLeft.
    纵坐标y转换公式类似:
var y = e.targetTouches[0].clientY + document.body.scrollTop - myCanvas.offsetTop;
    具体的事件处理如下所示:
    var myCanvas = document.getElementById(‘game_canvas‘);
    var ctx = myCanvas.getContext(‘2d‘);

    var offsetx = myCanvas.offsetLeft;
    var offsety = myCanvas.offsetTop;

    myCanvas.addEventListener(‘touchmove‘, function (e) {
        e.preventDefault();

        ctx.beginPath();
        ctx.fillStyle = "#f00";

        if( e.changedTouches ){
            e=e.changedTouches[e.changedTouches.length-1];
        }

        var x = e.clientX + document.body.scrollLeft - myCanvas.offsetLeft;
        var y = e.clientY + document.body.scrollTop - myCanvas.offsetTop;

        // 绘制小圆形来模拟手指的刮动效果
        ctx.arc(x, y, 20, 0, Math.PI * 2);

        ctx.fill();
        ctx.closePath();
    });
    注: 绘制的区域/路径, 和遮盖层覆盖而变成透明, 最底层的答案部分就自然而然显露出来了.

总结:    刮刮卡的实现原理和技术点, 其实很简单明了. 代码也就区区的几十行吧, 很清晰, 但涉及的知识点还不少. 对于我而言, 出题设计以及原理实现都是提高.    最后, 希望游戏, 大家能喜欢.

公众号&游戏站点:  个人微信公众号: 木目的H5游戏世界

  

  个人游戏作品集站点(尚在建设中...): www.mmxfgame.com,  也可直接ip访问http://120.26.221.54/.
				
时间: 2024-08-04 16:06:39

网页闯关游戏(riddle webgame)--H5刮刮卡的原理和实践的相关文章

网页闯关游戏(riddle webgame)--游戏玩法和整体介绍

前言: 记得上大学那会, 有位传说中的大牛, 写了一个网页闯关类的游戏. 当时我们玩得不亦乐乎, 也是第一次接触到这种形式的游戏. 不过当时纯玩家心态, 并没有想过去创造一个. 最近想起这事, 突然想复制实现一个类似的网页闯关游戏. 说干就干, 抄起家伙, 就是一顿猛打, ^_^. 期间的坎坷曲折暂且不表, 甚至中途自觉江郎才尽差点放弃, 所幸最后终于完工, 愿意和大家一起分享该游戏. 展示: 网页闯关游戏, 更多的被称为riddle, 是一种考验搜索, 推理, 分析能力的闯关模式游戏. 用户群

网页闯关游戏(riddle webgame)--SQL注入的潘多拉魔盒

前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. web开发初学者往往会忽视一些常见的漏洞, 比如SQL注入攻击, XSS攻击. 本文将简述SQL注入攻击的原理, 并分享下关卡设计, 其在打开潘多拉魔盒的情况下, 又能很好地限制危害. 效果展示: 先打下广告: 网页闯关游戏入口(请狠狠地点击我, ^_^). 本文的想法实施于第十一关--健忘的教授. 很直接的呈现一个登陆对话框, 考验玩家

网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点

前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. 本文讲描述, 如何在网页端实现一个仿微信的聊天窗口界面, 以及其中涉及到的一些技术点. 作者前端是初学者, 请大拿们轻拍. 效果展示: 先打下广告: 网页闯关游戏入口(请狠狠地点击我, ^_^) . 仿微信窗口的设计源于第四关--倾听女神的故事. 这种聊天对话的布局模式, 比PC端QQ的那种聊天方式更贴近移动端, 我个人感觉. 需求设定:

网页闯关小游戏闯关记录(一)ISA TEST

在知乎上找到一个关于CTF入门的回答,答主很专业的给出了建议和一些对应的训练平台,这里我试了试几个,自己半吊子水平,只能玩一些简单的,这里把自己做的过程记录下来,这几个基本都能查到通关秘籍(我是怎么知道的?没错我太渣没法通关去查秘籍了),我写下来只当是自己的备忘,大牛请无视.... ISA TEST看起来貌似是深圳职业技术学院计算机学院信息安全协会做的一个闯关小游戏,一共7关,难度较低,我这种渣渣都能做,不过最后一关还是查了writeup. 第一关: 和类似闯关游戏的套路相同,第一关都很简单,密

射击闯关游戏,旧王已死、新王当立?

射击类游戏的最佳形态是电子竞技?比如<穿越火线> 街机.单机时代的<魂斗罗>.<合金装备>等闯关型射击游戏体验,不再适合移动手游时代? 射击类游戏需要更真实.更热血,最好如昆丁塔伦蒂洛的电影一样,拳拳到肉.血浆横飞?比如<使命召唤>? 曾经占据游戏机.单机和联机游戏极大份额的射击游戏们,在移动时代只能扮演有益补充? 射击类游戏混的似乎不太好?不是没有缘故的,根本原因就是长期自由搏击,而忘记了,其实关卡才是最能吸引用户的所在? 关卡.关卡.关卡!你还在自由搏击

《报任安书》文言文化常识闯关游戏

<报任安书>文言文化常识闯关游戏 原文地址:https://www.cnblogs.com/arbo/p/11192228.html

《报任安书》文言文化常识闯关游戏&#183;网络版

<报任安书>文言文化常识闯关游戏 暂时还是不行 原文地址:https://www.cnblogs.com/arbo/p/11192471.html

XSS闯关游戏准备阶段及XSS构造方法

请下载好XSS闯关文件后,解压后放在服务器的对应文件夹即可 在该闯关中,会在网页提示一个payload数值 payload,翻译过来是有效载荷 通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如数据量的大小.校验位等,这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失,一批数据加上"外套"就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是payload payload指

宝来雍拓客新零售闯关游戏系统开发

宝来雍拓客闯关新零售系统开发app,找庄经理:185651879719微/电 宝来雍拓客新零售卖货引流系统开发.宝来雍拓客三三复制新零售系统开发.宝来雍拓客新零售吸粉工具系统开发.宝来雍拓客新零售消费198闯关系统开发.特别提示:本公司是软件开发公司,非平台方,玩家勿扰宝来雍系统介绍:1.宝来雍拓客体系:消费+任务闯关就能获得客户拓客游戏一共13关.2.完成3个任务,找系统自动匹配的13位商家消费16次就可以完13关.3.第一个任务就是,把卖货不求人的方法分享给3个卖货的商家才可以闯第二关.第二