在spritekit中旋转子节点

时间:2017-03-25 23:31:21

标签: ios swift sprite-kit

我有一个我需要旋转的节点,但是因为它是一个子节点,每当我旋转它时会改变大小。这是因为它的y比例值为0.7693。我已经尝试创建一个算法来根据z旋转操纵x和y比例,但没有任何效果。他们无论如何要这样做?

编辑:我发现静态更改x和y刻度不起作用是我的代码:

var ScaleDir: CGFloat = 1
override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered
        let turnAngle:Double = 1
        startWheel.zRotation = startWheel.zRotation + CGFloat(turnAngle / (180/Double.pi))
        if startWheel.zRotation*(180/CGFloat.pi) >= 360{
            startWheel.zRotation = startWheel.zRotation - (360/(180/CGFloat.pi))
        }
        startWheel.yScale = startWheel.yScale + (CGFloat((1 - 0.7693) / Double(90/turnAngle)) * ScaleDir)
        startWheel.xScale = startWheel.xScale - (CGFloat((1 - 0.7693) / Double(90/turnAngle)) * ScaleDir)
        if startWheel.yScale >= 1 || startWheel.xScale >= 1{
            ScaleDir = ScaleDir * -1
        }
}

我意识到了这个问题。自动分配的Yscale随旋转节点移动,但spriteKit缩放系统创建的卵形不会保持垂直。

以下是我的问题:

As you can see it is not a circle.

3 个答案:

答案 0 :(得分:0)

如果在旋转后应用了比例,那么您希望在角度上使用sin来计算Y分量,并使用cos来计算X.

但是,我会尝试给这个节点一个虚拟的父节点并旋转它。

答案 1 :(得分:0)

这是我在游乐场中使用的一些简单代码,试图复制您在问题中描述的内容。我尝试在设置中操纵各种元素的yScale和旋转,但似乎没有任何东西重现不希望的行为。我是否合理地复制了您的设置,或者我错过了什么?

  0  long long int ll1 = strlen(s1),ll2=strlen(str); 
  1     for(j=1;j<=ll2;j++) 
  2     { 
  3         printf("p1 and p2 are %d nd %d\n",p1,p2); 
  4         if ( p2 == p1) 
  5         { 
  6             r1 = 1; 
  7             break; 
  8         } 
  9         long int w1 = *(str+j-1); 
 10         p2 -= w1;      
 11         p2 = p2/31; 
 12         long int lp = *(str+j+l1-1); 
 13         p2 += ((lp *vp)); 
 14  } 
 15     if ( r1 == 0) 
 16     { 
 17         printf("n\n"); 
 18     } 
 19     else
 20      {
 21           printf("y\n");
 22      }
 23    }

答案 2 :(得分:0)

问题是父节点有y尺度,这导致了所有问题,一旦我删除了y尺度并将其改回1,一切都开始重新工作。