我有一个我需要旋转的节点,但是因为它是一个子节点,每当我旋转它时会改变大小。这是因为它的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缩放系统创建的卵形不会保持垂直。
以下是我的问题:
答案 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,一切都开始重新工作。