求教,图片的切割如何实现

把一张完整的图片切割随意切割

1赞

可以使用mask去裁切;

但是你这个比较简单,你其实可以让美术给你做6张 不同角度的60度的图片 没切的位置连在一起放,切了的 移动位置就行

这个是可以触摸随意切的,mask怎么做?有例子可以参考下吗?

同问 - -

楼主解决了吗?

自己写的一个截取不规则图片的mask,有需要的可参考下
/**

  • 遮罩组件
  • 根据顶点生成mask,处理需要的图形
  • 2018-11-12
    */
    const {
    ccclass,
    property
    } = cc._decorator;

@ccclass
export default class CutMask extends FLBehavior {
//mask组件
mask: cc.Mask = null;
//重新注册mask事件
onEvent() {
this.mask.node.on(cc.Node.EventType.POSITION_CHANGED, this.mask._updateGraphics, this.mask);
this.mask.node.on(cc.Node.EventType.ROTATION_CHANGED, this.mask._updateGraphics, this.mask);
this.mask.node.on(cc.Node.EventType.SCALE_CHANGED, this.mask._updateGraphics, this.mask);
this.mask.node.on(cc.Node.EventType.SIZE_CHANGED, this.mask._updateGraphics, this.mask);
this.mask.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.mask._updateGraphics, this.mask);
}

//取消mask事件
offEvent() {
    this.mask.node.on(cc.Node.EventType.POSITION_CHANGED, this.mask._updateGraphics, this.mask);
    this.mask.node.on(cc.Node.EventType.ROTATION_CHANGED, this.mask._updateGraphics, this.mask);
    this.mask.node.on(cc.Node.EventType.SCALE_CHANGED, this.mask._updateGraphics, this.mask);
    this.mask.node.on(cc.Node.EventType.SIZE_CHANGED, this.mask._updateGraphics, this.mask);
    this.mask.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.mask._updateGraphics, this.mask);
}

/** onLoad结束的回调 */
onLoaded() {
    this.mask = this.node.getComponent(cc.Mask);
    this.initMask();
}

initMask() {
    if (!this.mask._graphics) {
        this.mask._createGraphics();
    }
}

/**进行切割 */
cutFn(localVertexs) {
    //_updateGraphics 每次重写这个函数需要将绑定的事件取消掉并重新注册
    this.offEvent();
    let potArr = localVertexs;
    // let potArr = GameDatas.vertexs;
    this.mask._updateGraphics = () => {
        var graphics: cc.Graphics = this.mask._graphics;
        graphics.clear(false);
        graphics.lineWidth = 10;
        graphics.fillColor.fromHEX('#ff0000');
        graphics.moveTo(potArr[0].x, potArr[0].y);
        for (let i = 1; i < potArr.length; i++) {
            const p = potArr[i];
            graphics.lineTo(p.x, p.y);
        }
        graphics.close();
        graphics.stroke();
        graphics.fill();
    }
    this.onEvent();
    this.mask._updateGraphics();
}

}

4赞

大佬,这段代码真心不明白,能讲述一下吗?

1赞

这个应该是和之前有个刮刮卡的类似,图片作为遮罩,这里的线等于画笔