AndEngineで日本語のテキスト表示 [Androidの開発]
ゲームといえば、スクリプトを読んで、テキストやイベントの選択肢を表示・・・。
私の年齢だと、スーパーファミコンやPC-98の頃から、何度となく同じような処理を作ってます。
若手の頃、今と比べて非常に処理スピードが遅かったもので、
先輩たちのプログラムを見てここまでやらないとレスポンスが遅いとユーザーに感じさせるのか?
とか、思ったもんですが(*‘∀‘)
今や便利なゲームエンジンもありますし、JAVAで組めるようにもなってますしね。
私のAndroidのゲームって、ゲームエンジンとして有名なAndEngineを使って作っているんですが、
効果付きと普通の日本語表示部分のソースを記事にします。
// 端末に搭載されたフォントを利用してテキストを表示
// フォント用のTextureを用意
Texture texture = new BitmapTextureAtlas(getBaseActivity().getTextureManager(),
512, 512,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
// フォントをイニシャライズ
Font font = new Font(getBaseActivity().getFontManager(), texture,
Typeface.DEFAULT_BOLD, 22, true, Color.WHITE);
// EngineのTextureManagerにフォントTextureを読み込み
getBaseActivity().getTextureManager().loadTexture(texture);
// FontManagerにフォントを読み込み
getBaseActivity().getFontManager().loadFont(font);
//文字効果付メッセージ表示
messageText = new TickerText(32, 32, font, Script[ScriptCnt]/*表示するテキスト*/,
new TickerTextOptions(AutoWrap.WORDS,400,
HorizontalAlign.LEFT,Text.LEADING_DEFAULT,10),
getBaseActivity().getVertexBufferObjectManager());
messageText.registerEntityModifier(
new AlphaModifier(10, 0.0f, 1f)
);
messageText.setBlendFunction(GLES20.GL_SRC_ALPHA,
GLES20.GL_ONE_MINUS_SRC_ALPHA);
attachChild(messageText);
//テキスト表示
menuText1 = new Text(32, 400, font, Script[ScriptCnt]/*表示するテキスト*/,, 1000,
new TextOptions(AutoWrap.WORDS, 400, HorizontalAlign.LEFT, Text.LEADING_DEFAULT), getBaseActivity()
.getVertexBufferObjectManager());
attachChild(menuText1);
AndEngineだと、文字の効果なんて、時間と設定をすれば、勝手にやってくれます。
徐々に鮮明になるメッセージとか、拡大や回転とかもあるんで、色々と便利です。
・・・20年以上前のあの頃、これだけの事をやるのに、何日かかったことか?
そういう要らない苦労をしなくて良い若者がうらやましい。
私の年齢だと、スーパーファミコンやPC-98の頃から、何度となく同じような処理を作ってます。
若手の頃、今と比べて非常に処理スピードが遅かったもので、
先輩たちのプログラムを見てここまでやらないとレスポンスが遅いとユーザーに感じさせるのか?
とか、思ったもんですが(*‘∀‘)
今や便利なゲームエンジンもありますし、JAVAで組めるようにもなってますしね。
私のAndroidのゲームって、ゲームエンジンとして有名なAndEngineを使って作っているんですが、
効果付きと普通の日本語表示部分のソースを記事にします。
// 端末に搭載されたフォントを利用してテキストを表示
// フォント用のTextureを用意
Texture texture = new BitmapTextureAtlas(getBaseActivity().getTextureManager(),
512, 512,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
// フォントをイニシャライズ
Font font = new Font(getBaseActivity().getFontManager(), texture,
Typeface.DEFAULT_BOLD, 22, true, Color.WHITE);
// EngineのTextureManagerにフォントTextureを読み込み
getBaseActivity().getTextureManager().loadTexture(texture);
// FontManagerにフォントを読み込み
getBaseActivity().getFontManager().loadFont(font);
//文字効果付メッセージ表示
messageText = new TickerText(32, 32, font, Script[ScriptCnt]/*表示するテキスト*/,
new TickerTextOptions(AutoWrap.WORDS,400,
HorizontalAlign.LEFT,Text.LEADING_DEFAULT,10),
getBaseActivity().getVertexBufferObjectManager());
messageText.registerEntityModifier(
new AlphaModifier(10, 0.0f, 1f)
);
messageText.setBlendFunction(GLES20.GL_SRC_ALPHA,
GLES20.GL_ONE_MINUS_SRC_ALPHA);
attachChild(messageText);
//テキスト表示
menuText1 = new Text(32, 400, font, Script[ScriptCnt]/*表示するテキスト*/,, 1000,
new TextOptions(AutoWrap.WORDS, 400, HorizontalAlign.LEFT, Text.LEADING_DEFAULT), getBaseActivity()
.getVertexBufferObjectManager());
attachChild(menuText1);
AndEngineだと、文字の効果なんて、時間と設定をすれば、勝手にやってくれます。
徐々に鮮明になるメッセージとか、拡大や回転とかもあるんで、色々と便利です。
・・・20年以上前のあの頃、これだけの事をやるのに、何日かかったことか?
そういう要らない苦労をしなくて良い若者がうらやましい。
とりあえず、テキストファイルを読んでみたり [Androidの開発]
アクションゲームと違って、シミュレーションとかRPGとかアドベンチャーがメンドクサイのは、
やっぱデータが格段に増えるということだと思うんですよ。
と、いうわけで、以下のソースがテキストファイルの読み込みルーチンです。
テキストファイルがassets/scriptにある置いてあることが前提になってます。
// ファイル名を与えてTextデータを得る。
public String getText(String fileName) {
InputStream is = null;
try {
is = gameActivity.getResources().getAssets().open("script/" + fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str;
StringBuilder strs = new StringBuilder();
while ((str = br.readLine()) != null) {
strs.append(str);
}
is.close();
return strs.toString();
} catch (IOException e) {
e.printStackTrace();
return "error";
}
}
キャラクターのステータスデータのCSVファイルや、
シナリオ用のスクリプトファイルだとか、色々出てきますからね。
プログラマーの日記・雑感っぽい記事になりましたね。
(´・ω・`)
いつも、他のプログラマーの方の記事をググってお世話なっているんで、
今後、この手の汎用的なのは、公開してみようと思ってます。
やっぱデータが格段に増えるということだと思うんですよ。
と、いうわけで、以下のソースがテキストファイルの読み込みルーチンです。
テキストファイルがassets/scriptにある置いてあることが前提になってます。
// ファイル名を与えてTextデータを得る。
public String getText(String fileName) {
InputStream is = null;
try {
is = gameActivity.getResources().getAssets().open("script/" + fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str;
StringBuilder strs = new StringBuilder();
while ((str = br.readLine()) != null) {
strs.append(str);
}
is.close();
return strs.toString();
} catch (IOException e) {
e.printStackTrace();
return "error";
}
}
キャラクターのステータスデータのCSVファイルや、
シナリオ用のスクリプトファイルだとか、色々出てきますからね。
プログラマーの日記・雑感っぽい記事になりましたね。
(´・ω・`)
いつも、他のプログラマーの方の記事をググってお世話なっているんで、
今後、この手の汎用的なのは、公開してみようと思ってます。