手指缩放时,怎么根据两手指的中心点进行缩放?

官方案例的缩放只能从图片的中心进行缩放,这是我根据案例来改的,可是效果并不好

var self = this, parent = this.node.parent;
self.canvas.on(cc.Node.EventType.TOUCH_MOVE, function (event) {
var touches = event.getTouches();
if (touches.length >= 2) {
var touch1 = touches[0], touch2 = touches[1];
var delta1 = touch1.getDelta(), delta2 = touch2.getDelta();

            var touchPoint1 = self.node.convertTouchToNodeSpaceAR(touch1);
            var touchPoint2 = self.node.convertTouchToNodeSpaceAR(touch2);

            //缩放
            var distance = cc.pSub(touchPoint1, touchPoint2);
            var delta = cc.pSub(delta1, delta2);
            var scale = 1;

            let width = self.target.width;

            let height = self.target.height;




            let midPointX = touchPoint1.x > touchPoint2.x ? ((touchPoint1.x + touchPoint2.x) / 2) : ((touchPoint2.x + touchPoint1.x) / 2);
            let midPointY = touchPoint1.y > touchPoint2.y ? ((touchPoint1.y + touchPoint2.y) / 2) : ((touchPoint2.y + touchPoint1.y) / 2);


            let newAnchorX = midPointX / width;
            let newAnchorY = midPointY / height;



            self.target.setAnchorPoint(cc.v2(Math.fround(newAnchorX), Math.fround(newAnchorY)));



            if (Math.abs(distance.x) > Math.abs(distance.y)) {
                scale = (distance.x + delta.x) / distance.x * self.target.scale;
            }
            else {
                scale = (distance.y + delta.y) / distance.y * self.target.scale;
            }
            self.target.scale = scale < 0.1 ? 0.1 : (scale > 2 ? 2 : scale);

setAnchorPoint()了解一下

我上面的代码用了,但是不行,是我的计算方法有问题吗

自顶。。。。

贴我的代码给你参考,自已参透…

ns.CalculateNewScaleWithTouchesBy = function( canvas, world, touches, scaleMin, scaleMax )
{
    let nowScale = world.scale;

    //------------------------------------------------------------------------------------------
    // 以兩指移動的距離, 計算出縮放Size
    //------------------------------------------------------------------------------------------
    let delta1 = touches[0].getDelta(), delta2 = touches[1].getDelta();
    let touchPoint1 = canvas.convertToNodeSpaceAR( touches[0].getLocation() );
    let touchPoint2 = canvas.convertToNodeSpaceAR( touches[1].getLocation() );

    let distance = cc.pSub( touchPoint1, touchPoint2 );
    let delta = cc.pSub( delta1, delta2 );
    let scale = 1;
    if ( Math.abs( distance.x ) > Math.abs( distance.y )  )
    { scale = ( distance.x + delta.x ) / distance.x * canvas.scale; }
    else
    { scale = ( distance.y + delta.y ) / distance.y * canvas.scale; }

    let newScale = ( nowScale * scale );
    if( newScale < scaleMin ) newScale = scaleMin;
    if( newScale > scaleMax ) newScale = scaleMax;

    return newScale;
};
2赞

你好 请问你解决了么