我有一个Tile类,它是SKShapeNode的子类
@interface Tile : SKShapeNode
我按如下方式实例化该类:
// Tile.h
-(instancetype) addHiddenTileToSpace:(NSString *)letter withIndex:(int)i withPositionInWord:(int)p;
在我的实施文件中,我有
// Tile.m
-(instancetype) addHiddenTileToSpace:(NSString *)letter withIndex:(int)i withPositionInWord:(int)p{
if(self == [super init] ){
self.name = @"Tile";
// self.hidden = YES;
if (p == 0) {
self.firstLetter = YES;
}
else{
self.firstLetter = NO;
}
self.positionInAnswer = i;
self.character = letter;
[self setPath:CGPathCreateWithRoundedRect(CGRectMake(0, 0, 60, 60), 4, 4, nil)];
self.strokeColor = self.fillColor = [UIColor colorWithRed:66.0f/255.0f
green:74.0f/255.0f
blue:84.0f/255.0f
alpha:1];
SKLabelNode *characterNode = [[SKLabelNode alloc] initWithFontNamed:@"Avenir-Medium"];
characterNode.text = [letter uppercaseString];
characterNode.fontSize = 40;
characterNode.fontColor = [UIColor colorWithRed:216.0f/255.0f
green:216.0f/255.0f
blue:216.0f/255.0f
alpha:1];
characterNode.position = CGPointMake(30, 15);
[self addChild:characterNode];
}
return self;
}
问题在于我想要动画/缩放该节点,但它从节点的坐标(0,0)缩放而不是从它的中心缩放。我在别处读过我应该使用+ (instancetype)shapeNodeWithPath:(CGPathRef)path
centered:(BOOL)centered
方法并将中心设置为YES
然而,在我上面的方法实例化中,我不知道如何使用shapeNodeWithPath方法初始化SKSHapeNode。或者是否有其他方法可以设置Tile.center = YES;
答案 0 :(得分:0)
我认为你画出你的形状会解决你的问题。您是从0,0绘制的,它将是节点的中心,看起来您正在定位标签以补偿这一点。这样的事情可能有所帮助。
...
[self setPath:CGPathCreateWithRoundedRect(CGRectMake(-30, -30, 60, 60), 4, 4, nil)];
//or it could be [self setPath:CGPathCreateWithRoundedRect(CGRectMake(-30, 30, 60, 60), 4, 4, nil)];
...
characterNode.position = CGPointMake(0, 15);
...
现在当你缩放时,一切都应该在节点的中心而不是偏移30点。我还没有测试过这个理论,但是它应该解决定位和缩放问题。
祝你好运,希望有所帮助。