9

我想使用 Sprite Kit 制作一个基于文本的游戏(类似于那些 Learn to Type 游戏)。

我以为我会使用 SKLabelNode 作为字符串,但是当我尝试设置 anchorPoint 以旋转它时,我收到一个错误,即 SKLabelNode 没有 anchorPoint 属性:

 SKLabelNode *hello = [SKLabelNode labelNodeWithFontNamed:@"Courier-Bold"];
 hello.text = @"Hello,";
//this throws an error:
 hello.anchorPoint = CGPointMake(0.5,1.0);

什么是好的解决方法?如何垂直定位我的文本字符串,同时使用physicsBody 将它们视为物理对象?

4

4 回答 4

15

SKLabelNode 没有锚点。

使用verticalAlignmentMode属性垂直对齐 SKLabelNode。

SKLabelVerticalAlignmentModeBaseline

定位文本,使字体的基线位于节点的原点。

SKLabelVerticalAlignmentModeCenter

将文本垂直居中于节点的原点。

SKLabelVerticalAlignmentModeTop

定位文本,使文本的顶部位于节点的原点。

SKLabelVerticalAlignmentModeBottom

定位文本,使文本的底部位于节点的原点。

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKLabelNode_Ref/Reference/Reference.html#//apple_ref/doc/uid/TP40013022-CH1-SW15

于 2013-10-02T11:36:12.947 回答
2

您可以将 SKLabelNode 添加为 SKSpriteNode 的子节点。然后将锚点(和旋转等)应用于父节点:

- (SKSpriteNode *)testNode {
SKSpriteNode *testNode = [[SKSpriteNode alloc] init];//parent
SKLabelNode *hello = [SKLabelNode labelNodeWithFontNamed:@"Courier-Bold"];//child
hello.text = @"Hello,";
[testNode addChild:hello];
testNode.anchorPoint = CGPointMake(0.5,1.0);
testNode.position=CGPointMake(self.frame.size.width/2,self.frame.size.height/2);
return testNode;
}
于 2013-09-30T21:31:11.530 回答
2

这就是我将如何解决你的问题

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

    SKTexture *texture;
    SKView *textureView = [SKView new];
    texture = [textureView textureFromNode:labNode];
    texture.filteringMode = SKTextureFilteringNearest;

    SKSpriteNode *spriteText = [SKSpriteNode spriteNodeWithTexture:texture];
    //spriteText.position = put me someplace good;

    [self addChild:spriteText];
于 2013-10-03T12:35:09.577 回答
1

最后,我意识到我根本不需要 anchorPoint 来实现我想要实现的目标——相反,我使用了

hello.zRotation = M_PI/2;

这适用于 SKLabelNode。

于 2013-10-03T15:28:30.217 回答