在坐标空间SpriteKit之间转换

时间:2014-05-29 20:45:16

标签: ios iphone sprite-kit floating-point-conversion

我在场景中有一个盒子形状的节点。形状节点应该有自己的坐标空间,因此如果我在节点坐标空间中声明一个点(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)

正如你所看到的那样,它根本没有转换点数,但我不知道我做错了什么。

我希望实现的视觉插图:

Conversion

2 个答案:

答案 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;