我正在使用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)
谢谢, 克里斯
答案 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);
}
}