前回から少し時間が開いてしまいましたが、今回はキャラクターに話をさせてみます。
event.json
ファイルでデータを定義しています。
{
"c1" : {
"type" : "message",
"message" : {
"en" : "hello, world.",
"ja" : "よくきた、○○よ。待って追ったぞ。ここは××研究所。これから旅に出るお主に、託したいものがあって呼んだのじゃ。その宝箱の中身を持って行くがよい。世界の平和を頼んだぞ。"
}
}
}
接触時のdelegateメソッドで、playerNodeがc1
という名前のNodeに触れた時に、メッセージの内容を表示するようにしています。
- (void)didBeginContact:(SKPhysicsContact *)contact {
SKPhysicsBody *firstBody, *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) {
firstBody = contact.bodyA;
secondBody = contact.bodyB;
} else {
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if ((firstBody.categoryBitMask & playerCategory) != 0) {
if ((secondBody.categoryBitMask & characterCategory) != 0) {
SJCharacterNode *node = (SJCharacterNode *)secondBody.node;
NSString *name = node.name;
NSDictionary *e = [self event][name];
if ([e[@"type"] isEqualToString:@"message"]) {
_state = SJShopSceneStateMessage;
[self messageNode].message = e[@"message"][[SJUtilities lang]];
[self messageNode].hidden = NO;
}
}
}
}
メッセージの表示は、新たに追加したSJMessageNodeに担当させています。
SKLabelNodeが複数行表示に対応していないため、行数分並べて表示するという泥臭い実装になっています。 特別なことをしていない上に無駄に長いため、引用はやめておきます。
無事、キャラクターに話しかけることができるようになりました。
次は他のシーンへの遷移を実装します。
ソースコード: sj-prototype-apps/SJRolePlaying at master · tnantoka/sj-prototype-apps