【问题标题】:Converting between coordinate spaces SpriteKit坐标空间之间的转换 SpriteKit
【发布时间】:2014-05-30 08:27:48
【问题描述】:

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

如您所见,它根本没有转换积分,但我不知道我做错了什么。

我想要实现的视觉插图:

【问题讨论】:

  • self 是这里的蓝框,还是蓝框的子项?
  • self 是蓝色框,它是一个位置 = 200,200 的 SKSpriteNode。它是场景的孩子

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


【解决方案1】:

我认为问题在于您正在从 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 传递给方法,而不是创建相同的点。结构是按值复制的,因此该方法不能改变您的变量。)

【讨论】:

  • 然后我得到:节点中的开始位置:(0.000000,20.000000)节点中的结束位置:(0.000000,120.000000)场景中的开始位置:(200.000000,220.000000)场景中的结束位置:(200.000000, 320.000000) 哪个也不对?
  • 好像转换方法没有考虑轮换。
  • 可能节点在旋转时坐标空间没有旋转?
【解决方案2】:

我在场景中使用以下代码来旋转节点:

SKAction *rotation = [SKAction rotateByAngle: M_PI/4.0 duration:0];
[MYNODE runAction: rotation];

当我在节点类中将其更改为 this 时,它按预期工作:

self.zRotation = M_PI/4;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2011-09-02
    • 2019-10-08
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多