var v2 = this.scratchNode.convertToWorldSpace(cc.v2(-this.scratchWidth / 2, this.scrathHeight / 2));
v2 = this.scratchNode.convertToWorldSpace(cc.v2(0, 0));
//需要被擦除部分
this.drawMask.drawRect(cc.p(0, 0), cc.p(this.scratchWidth, this.scrathHeight), cc.color(0, 255, 255, 255), 1, cc.color(128, 128, 0, 255));
//建立缓冲材质对象
var rt = new cc.RenderTexture(this.scratchWidth, this.scrathHeight);
this.scratchNode._sgNode.addChild(rt);
//绘制需要被擦除部分
rt.begin();
this.drawMask.visit();
rt.end();
var e1 = new cc.DrawNode();
var self = this;
//touch事件中进行擦除
this.touchListener = cc.eventManager.addListener({
event: cc.EventListener.TOUCH_ONE_BY_ONE,
onTouchBegan: function (touch, event) {
return true;
},
onTouchMoved: function (touch, event) {
var pos = touch.getLocation();
var target = event.getCurrentTarget();
var pos1 = target.convertToNodeSpaceAR(pos);
e1.drawDot(cc.p(pos1.x + (self.scratchWidth / 2),pos1.y + (self.scrathHeight / 2)), 40, cc.color(255, 255, 255, 255));
//e1.drawRect(cc.p(0, 0), cc.p(self.scratchWidth / 2, self.scrathHeight / 2), cc.color(0, 255, 255, 0), 1, cc.color(128, 128, 0, 0));
//e1.setBlendFunc(cc.BlendFunc.ADDITIVE);
//e1.setBlendFunc(cc.ONE_MINUS_DST_ALPHA, cc.ONE);
//e1.setBlendFunc(new cc.BlendFunc(771, 0));
//e1.setBlendFunc(new cc.BlendFunc(cc.ONE, cc.SRC_ALPHA));
//e1.setBlendFunc(cc.SRC_ALPHA, cc.ZERO);
//e1.setBlendFunc(cc.ZERO, cc.ONE_MINUS_SRC_ALPHA);
//巨坑。这里参数怎么填都不对,只有这条,能正常擦除,但是擦除部分是矩形
e1.setBlendFunc(new cc.BlendFunc(771, 0));
rt.begin();
e1.visit();
rt.end();
}
}, rt);
如上方代码所示,1.6.1版本,根据混合公式,参数怎么填都无法正常擦除,只有hardcode值时才能擦除,但是被擦除的部分是矩形。官方解答一下?