2

のコレクションを持っていSKLabelNodesます。各ノードは、単語の文字を表します。各ノードは の子ですSKSpriteNode。にはspriteNode明示的な高さ ( によって返される高さ[text sizeWithAttributes:@{NSFontAttributeName : font}];) が設定されており、幅は と同じlabelNodeです。

はのlabelNode内側に中央揃えされ、spriteNodeがありますverticalAlignmentMode = SKLabelVerticalAlignmentModeBaseline。後の段階で、各文字に背景画像を設定する必要があります (これは を使用して行いますspriteNode)。テスト目的で、無地を使用して問題を明らかにしています。

ここに画像の説明を入力

ご覧のとおり、文字「y」の下の部分がコンテナの下に表示されていspriteNodeます。'g' やその他の文字でも同じことが起こります。また、それぞれletterNode(つまり、spriteNodeand child labelNode) は垂直方向に中央に配置され、別の 内で水平方向に間隔をあけて配置されSKSpriteNode、単語のすべての文字を格納するために使用されることも説明する必要があります。

を作成するコードletterNode:

SKLabelNode *labelNode = [SKLabelNode labelNodeWithText:text];
labelNode.fontName = font.fontName;
labelNode.fontSize = font.pointSize;
labelNode.fontColor = colour;
labelNode.position = CGPointMake(0, -floor(height/2));
// height is the same explicit height used to create the spriteNode.

SNLetterNode *letter = [SNLetterNode spriteNodeWithColor:[UIColor lightGrayColor] size:CGSizeMake(labelNode.frame.size.width, height)];
letter.letter = text;
letter.labelNode = labelNode;
letter.size = CGSizeMake(self.labelNode.frame.size.width, height);

単語のSKSpriteNodeすべての文字を含む は次のように作成されます。

CGSize fullWordSize = [text sizeWithAttributes:@{NSFontAttributeName : font}];

SNWordNode *word = [SNWordNode spriteNodeWithColor:[UIColor clearColor] size:fullWordSize];
word.letterNodes = letterNodes;
word.text = text;

この問題は、 and の配置および/またはサイズ変更の方法によって引き起こされていると思いlabelますspriteNodesverticalAlignmentModes別の を使用して、それに基づいてラベルの位置を変更しようとしましたが、すべて役に立ちませんでした。テキストのベースラインに基づいてノードを整列させる方法を知っていれば、それが出発点になります。

私が望んでいるのは、灰色の背景が下に伸びて「y」の下部を覆い、それがすべて letterNodesで起こることです(「y」のように必要かどうかに関係なく)。また、テキストがベースラインによって整列されるようにします。

どんな助けでも大歓迎です、

前もって感謝します。

4

2 に答える 2

0

ここに(同様の問題に対する)私のアプローチを投稿したことに注意してください。私の解決策はあなたの答えに基づいています: https://stackoverflow.com/a/51682287/250164

于 2018-08-04T03:58:24.730 に答える