この2日間で会話について考えていました。 会話といっても、正確には文字をつかった説明をすること なんですが、これをcocos2dを使った場合どうするのか。 前から少しづつ実装していきました。なんとかカタチになったので、今回ブログで紹介したいと思います。
必要なものの準備
ウィンドウ
まずは、会話のウィンドウを作成します。 私は黄色色の枠に、文字が見えやすいように中は半透明にしています。これをCCSpriteクラスを使いLayerに貼り付けます。
文字
文字の出力にはCCLabelBMFontクラスを使ってます。これはNSString型の文字列を指定すればそれを任意の場所に貼り付けてくれます。 ただし、日本語フォントが必要なのでこれを別途用意する必要があります。 [c] //例えばコードはこんな感じです。 CCLabelBMFont message = [[self addLabelBMFont:@"JapanFont.fnt" string:messageString position:ccp(winSize.width0.25,winSize.height*0.7f) scale:0.75f alignment:kAlignmentLeft z:2] retain];
//後で削除しやすいようにタグをつけます。 message.tag = messageTag;
[/c]
実際の動作
ウィンドウは文字が出る時だけ表示したいので、初期化の段階で設置しておきますが、[visible = NO]にしておきます。
文字をどこに用意するかと言えば、今の私が思いつく方法は2つあります。
Tiledのオブジェクトレイヤーのプロパティの中に用意する。 Tiledの画面で下記のように文字列を指定して、それを取り出して使います。 例えば、宝箱や看板など数が多くあり、そんなに文字列がややこしくない所はこの方法がよさそうです。
クラスの中で用意 これは単純にクラスの中に、Playerが話かけられた際に、どの文字列を使うかと設定します。 これに関しては、フラグによって会話が変わるなど複雑な文字表現ができると思います。 [c] //例えばswichで切り替えるやり方などができます。 switch (talkNum) { case 1: message = @"おじいさん"; break;
case 2 :
message = @"おはあさん";
break;
default:
break;
}
[/c]
この2つを会話の時に表示させてやれば、うまくいきます。
現在こんな感じです(動画)
私が考える理想の会話
一応カタチになりかけていますが、不満な点がいくつかあります。
文字が一気に出てくるのではなく、1文字もしくは1行づつ出てくるカタチにしたい。 よくドラクエなどにある、ボタンを押すと少しづつ会話が進んでいくようにしたいのですが、今の私の力では少し難しそうです。
現在使っているフォントがショボイ。 BMFontというソフトで日本語のフォントを作成したのだが、何か個性的ではない文字になってしまってます。 フリーソフトではなく「GlyphDesigner約30ドル」のような有料ツールを使わないと難しいのかもしれません。
また自分でクラスとフォントを作成して使う方法もあります。 これは、私がよく参考にしている、@ajinotatakiさんのサイトに詳しいエントリーがあります。
「coco2d Advent Calendar 2011 2日目: cocos2dでオリジナルフォントクラスを作ろうぜ!」
文字の改行をしたい 実は改行については色々調べて、CCLabelBMFontクラスを拡張してできるようにしているモノもあったのですが、日本語ではどうしてもうまくいきませんでした。 改行はcocos2dのver2.0にその機能が実装されるという噂もあります。 無いのなら自分でつくりたいのですが、CCLabelBMFontクラスがよく分からないので、もう少し力をつけないといけません。
不満が一杯ですので、もし何か良い方法があるのなら是非教えて欲しいです。