0

好吧,所以我一直试图在将它添加到场景之前介绍一个sprite节点。唯一的问题是我需要知道节点的(0,0.5)或(左,中)位置,然后才能正确定位。使用坐标系转换故障前置节点

我知道的convertPoint:(CGPoint)toNode/FROMNODE:(SKSpriteNode *)方法,目前我已经做了以下场景的代码中

[node convertPoint:CGPointMake(0,0.5) toNode: self] 

我还不能肯定如果混淆了自我(现场)自(节点),所以我试图

SKScene *scene = self; 
[node convertPoint:CGPointMake(0,0.5) toNode: scene] 

我敢肯定,我没有做出区别,但我想任何办法。

两次尝试的记录结果都是(0,0.5)

node.position是(50,100)

在上述情况不明确的情况下,我试图找到帧边缘上的位置,它应该等于节点宽度。我不使用宽度的原因是因为我将它放在另一个节点上,并且两个节点可能会旋转。

我想引用的理论是从Apples Spritekit Programming Guide

如果没有建立基于一个节点的宽度,两个节点之间的距离更简单的方法,同时考虑到旋转,随意张贴它我很想知道,尽管我仍然需要其他方法的节点转换。

非常感谢您的帮助。

+0

我不确定我明白你想要什么,但convertPoint:toNode:获取绝对位置,而不是相对像0,0.5。检查CGRectGetMinX和CGRectGetMidY是否有助于您寻找的内容。 – gzafra 2014-09-28 15:54:21

+0

我确实找到了一种使用CGRectGetMinX和CGRectGtMidY的方法,但它看起来非常笨重。我知道当你设置一个锚点时,你使用(0.5,0.5)作为默认中心,(0,0)为左下角。知道这一点,我发现通过将锚点设置为(0,0.5),然后检查节点的位置会给我正是我需要的。唯一的问题是每次我将锚点设置到该位置时,我都遇到了物理机构的问题。 – Ryoku 2014-09-29 00:49:35

+0

由于我添加了代码,因此回复了答案。 – gzafra 2014-09-29 10:13:49

回答

1

一旦添加了节点,您就不应该更改锚点,因为它本身会改变其位置。如果你正在使用锚点0.5,0.5来旋转节点,就像这样。如果你想从一个旋转节点maxX的点,你可以做这样的事情:

SKSpriteNode *sprite2 = [SKSpriteNode spriteNodeWithColor:[UIColor blackColor] size:CGSizeMake(50, 50)]; 
    float angle = - sprite.zRotation; 
    CGPoint dirVect = CGPointMake(cosf(angle), sinf(angle)); 
    CGFloat distance = sprite.frame.size.width/2 + sprite2.frame.size.width/2; 
    CGPoint destPoint = CGPointMake(sprite.position.x + (dirVect.x * distance), 
            sprite.position.y + (dirVect.y * distance)); 


    sprite2.position = destPoint; 
    [self addChild:sprite2]; 

哪里精灵为你转动你要添加对于第一个节点的节点和sprite2节点。距离应该是两个节点的锚点之间的距离(原谅双关语)。

让我知道这是你在找什么。如果没有,屏幕截图将帮助:)

+0

对不起,花了我很长的时间才回到你身边。我只想说,你提供的代码非常棒。如果你能向我解释一件很棒的事情。dirVect变量使用余弦和角度的正弦。它起作用,因为这会使新对象直接出现在第一个对象的旁边,我不明白如何或者如果cos对x是特定的,而sin对于y是特定的。还有一件事。当我旋转第一个精灵(90度或0.5 PI)他们完美对齐。如果我想让sprite2具有与sprite1相同的zRotation,我应该怎么做?谢谢。 – Ryoku 2014-09-30 03:55:30

+0

是的,考虑到角度为(1,0),这将给你带有该角度的方向矢量的X和Y弦。那么它取决于你想让它根据你的物体的旋转来指向哪里。 至于第二个问题:如果两个精灵都有一个锚(0.5,0.5),他们可以有相同的旋转。但请注意,如果您希望它们完美对齐,则如果“sprite1”不是圆形,则可能需要根据旋转改变距离。 – gzafra 2014-09-30 14:07:35

+0

另外,根据你试图达到的目标,如果你正在计划在移动sprite1的同时更新sprite2的位置,你可能会发现将sprite2添加为sprite1的子项更容易,这样sprite2将在移动sprite1时保持其相对位置。 。 – gzafra 2014-09-30 14:08:02