获取精灵部分的位置

时间:2014-03-16 01:50:29

标签: ios sprite-kit cgpoint

我正在使用IOS7的sprite工具包并使用 NSSpriteNode ,默认锚点为(.5,.5)[center]。精灵会旋转很多,有没有办法获得相对于锚点的位置?就像,如果我正在寻找(.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)

谢谢, 克里斯

1 个答案:

答案 0 :(得分:0)

此代码返回节点内的坐标/触摸点,而不管节点的旋转情况如何。 (它基于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);
    }
}