h5基于canvas的凹凸拼图碎片生成


前言

最近接到了一个web的拼图游戏需求,要求在前端生成凹凸碎片样式。在github逛了逛,发现基本都是切割成方块,不满足需求;要么是用pixi.js或者cocos这种有学习成本,于是先研究一下怎么简单一点的实现。


一、如何将图片切割成凹凸形状

这里用到了canvas的一个属性

imgContext.globalCompositeOperation = 'destination-in'

详细的大家可以去查看文档,简单来说的话就是将canvas两次绘制的图形进行一个保留重合部分的操作
,所以我们先绘制出完整的图片,再绘制凹凸碎片,就能得到想要的有图案的碎片,然后修改绘制凹凸碎片的位置重复多次操作就能得到想要的全部碎片。

二、完整代码

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8" />
    <title>凹凸拼图</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no" />
  </head>

  <body>
    <canvas id="canvas" class="puzzle_game" id="puzzleGame" width="300" height="450"></canvas>
  </body>
  <script type="text/javascript">
    var shade = document.getElementById('canvas')
    var imgContext = shade.getContext('2d')
    var img = new Image()
    img.src = './a.jpg'
    img.onload = function () {
      imgContext.drawImage(img, 0, 0)
      imgContext.globalCompositeOperation = 'destination-in'
      var img2 = new Image()
      img2.src = './clipart.png'
      img2.onload = function () {
        imgContext.drawImage(img2, 100, 100, 50, 50)
      }
    }
  </script>
  <style>
    .puzzle_game {
      width: 300px;
      height: 450px;
      background: blue;
    }
  </style>
</html>

绘制图片:
绘制图片
绘制凹凸拼图碎片:
绘制凹凸拼图碎片
可以看到我们得到了其中一块碎片,之后我们修改第二次绘制的坐标,就能得到全部的碎片。

总结

这种办法生成,优点是代码简单,微信小程序也能用;缺点是生成时间较长,计算拼图碎片放置位置有点麻烦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值