1

SKShapeNode のサブクラスである Tile クラスがあります

@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; を設定できる他の方法がありますか?

4

1 に答える 1

1

形をどこに描くかで問題が解決すると思います。ノードの中心となる 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 だけずれているはずです。この理論はテストしていませんが、配置とスケーリングの問題は修正されるはずです。

頑張ってください。

于 2015-03-02T23:14:24.783 に答える