使用坐标系转换来预先定位节点

时间:2014-09-28 08:07:42

标签: objective-c xcode sprite-kit coordinates coordinate-systems

好的,所以我一直在尝试在将sprite节点添加到场景之前预先定位它。唯一的问题是我需要知道节点的(0,0.5)或(左,中)位置,在场景坐标中才能正确定位。

我知道convertPoint:(CGPoint)toNode / fromNode:(SKSpriteNode *)方法,目前我已经在Scene&#39> 代码中找到了以下

[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

如果有一种更简单的方法可以根据一个节点的宽度建立两个节点之间的距离,考虑到旋转,请随意发布,我很想知道,虽然我仍然需要为其他节点转换方法

提前感谢您的所有帮助。

1 个答案:

答案 0 :(得分: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];

其中sprite是您已旋转的节点,sprite2是您想要添加的第一个节点的节点。距离应该是两个节点的锚点之间的距离(借口)。

如果您正在寻找,请告诉我。如果没有,截图将有助于:)