拼图碎片形状变化

阿尼班

我正在尝试制作一个像这样的拼图游戏。我尝试过的看起来像这样。https://jsfiddle.net/uccfb46z/

现在,如果要更改零件的形状,则需要修改此零件-

 outside: function(ctx, s, cx, cy) {
            ctx.lineTo(cx + s * .34, cy);
            ctx.bezierCurveTo(cx + s * .5, cy, cx + s * .4, cy + s * -.15, cx + s * .4, cy + s * -.15);
            ctx.bezierCurveTo(cx + s * .3, cy + s * -.3, cx + s * .5, cy + s * -.3, cx + s * .5, cy + s * -.3);
            ctx.bezierCurveTo(cx + s * .7, cy + s * -.3, cx + s * .6, cy + s * -.15, cx + s * .6, cy + s * -.15);
            ctx.bezierCurveTo(cx + s * .5, cy, cx + s * .65, cy, cx + s * .65, cy);
            ctx.lineTo(cx + s, cy)
        },
        inside: function(ctx, s, cx, cy) {
            ctx.lineTo(cx + s * .35, cy);
            ctx.bezierCurveTo(cx + s * .505, cy + .05, cx + s * .405, cy + s * .155, cx + s * .405, cy + s * .1505);
            ctx.bezierCurveTo(cx + s * .3, cy + s * .3, cx + s * .5, cy + s * .3, cx + s * .5, cy + s * .3);
            ctx.bezierCurveTo(cx + s * .7, cy + s * .29, cx + s * .6, cy + s * .15, cx + s * .6, cy + s * .15);
            ctx.bezierCurveTo(cx + s * .5, cy, cx + s * .65, cy, cx + s * .65, cy);
            ctx.lineTo(cx + s, cy)
        },

但是我对这个BezierCurve还是陌生的,所以任何人都可以指导我制作这种形状的价值是什么。

在此处输入图片说明

现在的形状是这样的..

在此处输入图片说明

我尝试了以下代码,但未达到所需的形状:

outside: function(ctx, s, cx, cy) {
    ctx.lineTo(cx + s * .34, cy);
    ctx.bezierCurveTo(cx + s * .86, cy, cx + s * .4, cy + s * -.15, cx + s * .4, cy + s * -.15);
    ctx.bezierCurveTo(cx + s * .3, cy + s * -.3, cx + s * .5, cy + s * -.3, cx + s * .5, cy + s * -.3);
    ctx.bezierCurveTo(cx + s * .7, cy + s * -.3, cx + s * .6, cy + s * -.15, cx + s * .6, cy + s * -.15);
    ctx.bezierCurveTo(cx + s * .5, cy, cx + s * .65, cy, cx + s * .65, cy);
    ctx.lineTo(cx + s, cy)
},
inside: function(ctx, s, cx, cy) {
    ctx.lineTo(cx + s * .35, cy);
    ctx.bezierCurveTo(cx + s * .505, cy + .05, cx + s * .405, cy + s * .155, cx + s * .405, cy + s * .1505);
    ctx.bezierCurveTo(cx + s * .80, cy + s * .80, cx + s * .5, cy + s * .3, cx + s * .5, cy + s * .3);
    ctx.bezierCurveTo(cx + s * .7, cy + s * .29, cx + s * .6, cy + s * .15, cx + s * .6, cy + s * .15);
    ctx.bezierCurveTo(cx + s * .5, cy, cx + s * .65, cy, cx + s * .65, cy);
    ctx.lineTo(cx + s, cy)
},
香蕉

bezierCurveTo创建贝塞尔曲线。对于您想要的形状,您不需要贝塞尔曲线,只需直线。

经过一些调整,我最终得到以下代码来创建您的形状:

outside: function (ctx, s, cx, cy) {
    ctx.lineTo(cx, cy)
    ctx.lineTo(cx+s*.3, cy+s*.1)
    ctx.lineTo(cx+s*.5, cy+s*-.2)
    ctx.lineTo(cx+s*.7, cy+s*.1)
    ctx.lineTo(cx+s, cy)
},
inside: function (ctx, s, cx, cy) {
    ctx.lineTo(cx, cy)
    ctx.lineTo(cx+s*.3, cy+s*-.1)
    ctx.lineTo(cx+s*.5, cy+s*+.2)
    ctx.lineTo(cx+s*.7, cy+s*-.1)
    ctx.lineTo(cx+s, cy)
},

Fixed Fiddle

解释:

您正在使用的拼图脚本,在x,y轴上绘制方形拼图碎片,其中左上角为(cx,cy),并且碎片的大小由s表示

在此处输入图片说明

每块都有4个面,每个面都由您使用的2个代码之一绘制:

  • 孔部分:
  • 在外面伸出的零件:

在此处输入图片说明

您所需要做的就是绘制直线以创建所需的形状。

对于外部:

在此处输入图片说明

对于内部零件:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在咖啡测试中确定碎片变化

来自分类Dev

两个鸡蛋掉落拼图变化:未知/无限楼层

来自分类Dev

如何在不使用面具的情况下制作拼图碎片?

来自分类Dev

如何在方向变化时保留来自堆栈的碎片?

来自分类Dev

pygame / pyopengl形状随显示尺寸的变化而变化

来自分类Dev

检测折线区域,位置或形状的变化

来自分类Dev

如何使用libvncclient显示光标形状的变化?

来自分类Dev

检测折线区域,位置或形状的变化

来自分类Dev

为什么我的tkinter对象保持形状变化?

来自分类Dev

更改ndarray的dtype,以使形状也发生变化

来自分类Dev

numpy.insert之后形状发生变化的问题

来自分类Dev

如何确定Mongo集合中文档形状变化的事件?

来自分类Dev

碎片重用

来自分类Dev

Android碎片

来自分类Dev

内存碎片

来自分类Dev

去除碎片

来自分类Dev

碎片消失

来自分类Dev

内存碎片

来自分类Dev

在ggplot2图上使用ggplotly不适用于boxplot变量宽度或异常形状变化

来自分类Dev

切片numpy arrayx时形状发生变化

来自分类Dev

对于检测到的OpenCV形状略有变化的Hu矩是否保持不变?

来自分类Dev

分配给变量时张量的输出形状会发生变化

来自分类Dev

如何在 Java Swing 中拥有不会不断变化/闪烁颜色的简单动画形状?

来自分类Dev

新的.htaccess拼图

来自分类Dev

有趣的拼图

来自分类Dev

拼图取自加德纳

来自分类Dev

Javascript记忆游戏拼图

来自分类Dev

Scala中缀类型拼图

来自分类Dev

算术拼图序言