我在场景中有一个盒子形状的节点。形状节点应该有自己的坐标空间,因此如果我在节点坐标空间中声明一个点(100,100)并旋转方框pi / 4 rad,则该点应该在场景坐标空间中改变。
我的问题是我无法使其工作,我使用以下代码将节点坐标空间中的一个点转换为场景坐标空间,节点中的节点位置为200,200:
startPointInNodeSpace = CGPointMake(0, size.height/2);
CGPoint start = [self.scene convertPoint:CGPointMake(startPointInNodeSpace.x, startPointInNodeSpace.y) fromNode:self.parent];
CGPoint end = [self.scene convertPoint:CGPointMake(startPointInNodeSpace.x, startPointInNodeSpace.y + 100) fromNode:self.parent];
NSLog(@"start position in node: (%f,%f)\nend position in node: (%f,%f)",startPointInNodeSpace.x,startPointInNodeSpace.y,startPointInNodeSpace.x,startPointInNodeSpace.y + 100);
NSLog(@"start position in scene: (%f,%f)\nend position in scene: (%f,%f)",start.x,start.y,end.x,end.y);
代码位于SKSpriteNode
。
我的日志:
start position in node: (0.000000,20.000000)
end position in node: (0.000000,120.000000)
start position in scene: (0.000000,20.000000)
end position in scene: (0.000000,120.000000)
正如你所看到的那样,它根本没有转换点数,但我不知道我做错了什么。
我希望实现的视觉插图:
答案 0 :(得分:2)
我认为问题在于您是从self.parent
转换而不是self
- 节点的父是场景,因此无法进行转换。尝试转换self
代替:
startPointInNodeSpace = CGPointMake(0, size.height/2);
endPointInNodeSpace = CGPointMake(startPointInNodeSpace.x, startPointInNodeSpace.y + 100);
CGPoint start = [self.scene convertPoint:startPointInNodeSpace fromNode:self];
CGPoint end = [self.scene convertPoint:endPointInNodeSpace fromNode:self];
(注意,你可以将startPointInNodeSpace
传递给方法,而不是创建一个相同的点。结构是按值复制的,因此方法不能改变你的变量。)
答案 1 :(得分:0)
我在场景中使用以下代码来旋转节点:
SKAction *rotation = [SKAction rotateByAngle: M_PI/4.0 duration:0];
[MYNODE runAction: rotation];
当我在nodeclass中将其更改为此内容时,它按预期工作:
self.zRotation = M_PI/4;