在 Xcode 中的 SKSpriteNode 中设置 LabelNode 的文本

Posted

技术标签:

【中文标题】在 Xcode 中的 SKSpriteNode 中设置 LabelNode 的文本【英文标题】:Setting text of LabelNode within an SKSpriteNode in Xcode 【发布时间】:2014-03-17 20:13:23 【问题描述】:

我在另一个 SKSpriteNode 中的 SKSpiteNode 中有一个 SKLabelNode。目的是创建一个带有空白按钮的图形,然后为该按钮创建文本。我可以创建它,但稍后在我的代码中我想更改此标签节点的文本,但我似乎无法做到。

SKSpriteNode * barStart = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:baseColor]];

barStart.name=barName;

SKSpriteNode * playPauseButton = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"button"]];
playPauseButton.name=[NSString stringWithFormat: @"%@-playPauseButton",barName];
playPauseButton.position=CGPointMake( playPauseButton.frame.size.width*2.2, 0);
playPauseButton.alpha=0;

[barStart addChild:playPauseButton];


SKLabelNode * playPauseLabel = [SKLabelNode labelNodeWithFontNamed:@"HelveticaNeue-Thin"];
playPauseLabel.name=[NSString stringWithFormat: @"%@-playPauseButtonLabel",barName];

NSLog(@"playPauseLabel.name : %@",playPauseLabel.name);
playPauseLabel.position=CGPointMake(0,-5);
playPauseLabel.fontSize = 10;
playPauseLabel.horizontalAlignmentMode=SKLabelHorizontalAlignmentModeCenter;

playPauseLabel.fontColor = [SKColor grayColor];
playPauseLabel.text=@"start/stop";

[barStart addChild:playPauseLabel];

我正在尝试更改如下:

[[[[self childNodeWithName:@"bar1"] childNodeWithName:@"bar1-playPauseButton"] 
  childNodeWithName:@"bar1-playPauseButtonLabel"] setText:@"somethingElse"];

我得到一个错误:

No visible @interface for 'SKNode' declares the selector 'setText:'

我还尝试创建一个本地 SKNode,将 childNode 引用传递给它,并尝试使用thisLabelNode.text=@"somethingElse" 之类的点概念设置文本,虽然这不会导致错误,但它也不会更改文本。

有什么想法吗?

谢谢, 丰富的

【问题讨论】:

【参考方案1】:

childNodeWithName 返回一个 SKNode* 类型的对象,而不是 SKLabelNode。因此出现错误。

如果您知道返回的节点是 SKLabelNode(或 nil),则可以强制转换它。我还建议避免嵌套过多的函数调用,因为这会使您的代码更难阅读。另外,您可以在这里使用search feature 来发挥您的优势:

id label = [self childNodeWithName:@"//bar1-playPauseButtonLabel"];
((SKLabelNode*)label).text = @"whatever";

//前缀表示要递归搜索以self开头的节点图。这将返回找到的第一个与给定名称匹配的节点。

【讨论】:

以上是关于在 Xcode 中的 SKSpriteNode 中设置 LabelNode 的文本的主要内容,如果未能解决你的问题,请参考以下文章

Xcode7场景编辑器SKSpriteNode自定义类

通过名称 Swift 2、Xcode 7 获取 SKSpriteNode

Xcode 如何自动从其父节点中删除 skspritenode

SKSpriteNode加了一次,但是出现了莫名其妙,加了六次

按下时向 SKSpriteNode 添加视觉效果

Xcode 7 - 不兼容的块指针类型