2

SKAction colorizeWithColor:ドキュメントによると、 は でのみ機能しSKSpriteNodeますSKLabelNode。SKLabelNodeには、静的に設定できるcolorとプロパティの両方があります。colorBlendFactorこれを SKAction でアニメーション化する方法はありますか?

私の現在のアプローチは、SKView のインスタンス メソッド textureFromNode を使用して SKLabelNode をテクスチャにレンダリングすることですが、その atm から nil テクスチャを取得するだけです :-(

更新:あなたは何を知っていますか。テクスチャ レンダリングの問題を発見したと思います。その時点で self.view が nil であるため、SKScene の init メソッドでテクスチャを赤くすることはできません。だから私はdidMoveToViewで試してみて、出来上がり、テクスチャをレンダリングしました。とにかくありがとう :-)

4

4 に答える 4

3

SKLabelNode には、設定可能な fontColor プロパティもあります。ただし、colorizeWithColor メソッドには応答しません。

それでも、別の SKSpriteNode の色と同期することで、テキストの色を動的に変更することができます。スプライトで colorizeWithColor を呼び出すと、フォントの色が変化します。これには、指定された期間にわたる色の変化が含まれます。例:

    [_tileCountLabel runAction:[SKAction repeatActionForever:
                            [SKAction customActionWithDuration:COLOR_TRANSITION_SPEED actionBlock:^(SKNode *node, CGFloat elapsedTime) {
    _tileCountLabel.fontColor = _tileLayer0.color;
}]]];

また、SKCropNode マスクを使用して、親 SKSpriteNode を介してフォントの色を設定しようとしました。SKSpriteNode の colorizeWithColor メソッドは機能しましたが、フォントがひどく壊れていて分厚いものでした。だから、役に立たない。

于 2014-10-05T02:43:39.217 に答える
2

SKTexture/SKSpriteNode の回避策は次のとおりです。使いやすくするために、独自のクラスにラップすることもできます。覚えておくべきことは、self.view が nil でない場所でこれをレンダリングすることです...

SKLabelNode *labNode = [SKLabelNode labelNodeWithFontNamed:FONT_GAME];
labNode.fontSize = 30.0f;
labNode.fontColor = [SKColor whiteColor];
labNode.text = @"TEST";

SKTexture *texture;

NSAssert(self.view != nil, @"Can't access self.view so sorry.");
texture = [self.view textureFromNode:labNode];
DLog(@"texture: %@", texture);
if (texture != nil) {
    texture.filteringMode = SKTextureFilteringNearest;

    SKSpriteNode *spriteText = [SKSpriteNode spriteNodeWithTexture:texture];
    DLog(@"spriteText.size: %@", NSStringFromSize(spriteText.size));
    spriteText.anchorPoint = ccp(0, 0.5);
    spriteText.position = ccp(0, 25);

    [self addChild:spriteText];

    [spriteText runAction:[SKAction repeatActionForever:[SKAction sequence:@[
                                                                             [SKAction colorizeWithColor:SKColor.yellowColor colorBlendFactor:1 duration:1],
                                                                             [SKAction colorizeWithColor:SKColor.yellowColor colorBlendFactor:0 duration:1],
                                                                             ]]]];
}
else {
    DLog(@"Texture is nil!");
}
于 2013-11-01T02:55:38.417 に答える