Ios 获取sprite部分的位置

Ios 获取sprite部分的位置,ios,sprite-kit,cgpoint,Ios,Sprite Kit,Cgpoint,我正在使用IOS7的sprite工具包,并使用默认锚点为(.5、.5)[center]的NSSpriteNode。精灵会绕着很多圈旋转,有没有办法得到相对于锚定点的位置?比如,如果我在寻找精灵的上中锚点(.5,1)或下中锚点(.5,0)?这样我就可以得到一个精灵的一部分的相同位置,不管它是如何旋转的 self.player = [SKSpriteNode spriteNodeWithImageNamed:@"ship.png"]; self.player.anchorPoint = CGPoin

我正在使用IOS7的sprite工具包,并使用默认锚点为(.5、.5)[center]的NSSpriteNode。精灵会绕着很多圈旋转,有没有办法得到相对于锚定点的位置?比如,如果我在寻找精灵的上中锚点(.5,1)或下中锚点(.5,0)?这样我就可以得到一个精灵的一部分的相同位置,不管它是如何旋转的

self.player = [SKSpriteNode spriteNodeWithImageNamed:@"ship.png"];
self.player.anchorPoint = CGPointMake(.5, 1);
CGPoint p = [self.player convertPoint:self.player.position toNode:self]];
NSLog(@"x=%f,y=%f", p.x, p.y);
self.player.anchorPoint = CGPointMake(.5, 0);
CGPoint p = [self.player convertPoint:self.player.position toNode:self]];
NSLog(@"x=%f,y=%f", p.x, p.y);
即使我将锚点更改为不同的部分,这最终也会产生相同的点。我知道改变锚点是个坏主意,但是我试着给出一个我想要做的想法

我想要一种类似以下的方法:

CGPoint imageTopLoc = [self.player getLocationUsingAnchorPoint:CGPointMake(.5, 1)];
CGPoint imageBottomLoc = [self.player getLocationUsingAnchorPoint:CGPointMake(.5, 0)];
// calculate vector of direction between of two points... (next)
谢谢,
Chris

此代码返回节点内的坐标/接触点,而不考虑节点的旋转。(它基于SpriteKit游戏模板。)

这就是你要找的吗

-(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {

        SKSpriteNode *ship = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
        ship.name = @"ship";
        ship.position = CGPointMake(100, 100);
        ship.zRotation = M_PI * 0.5;
        [self addChild:ship];
    }
    return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {    
    for (UITouch *touch in touches) {

        CGPoint location = [touch locationInNode:self];
        SKNode *ship = [self childNodeWithName:@"ship"];

        CGPoint p = [self convertPoint:location toNode:ship];
        NSLog(@"x=%f,y=%f", p.x, p.y);
    }
}

看起来我甚至不需要处理锚定点,我应该能够从一个坐标系(即节点的坐标系)中的“点”转换到场景的坐标系,类似这样:CGPoint positionInScene=[node convertPoint:CGPointMake(0,10)toNode:node.scene];但我没有得到预期的结果…:(谢谢你,convertPoint绝对是个把戏……我的代码最终变成了[self.player convertPoint:CGPointMake(1,self.player.size.height/2)。有很多东西把我甩了(新手的东西)。首先,在我将播放器添加到场景之前,我调用了这个函数,因此它没有父坐标系可供参考。其次,即使我调用了它,我也有一些代码可以在我期望它位于Spritode中的点处画一条线(因为我正在测试以验证事情),但它总是不是我所期望的那样。这最终与球员有关。物理身体会移动我的线,因为两个质量占据相同的空间…无论如何,看起来我现在可以克服这个问题了,非常感谢你的建议!谢谢。克里斯