2013年5月11日土曜日

AndEngineで文字列描画(ビットマップフォントの利用)

作ったビットマップフォントをAndEngineで表示してみる。
ここまできてやっとHelloWorld。

1.プロジェクトにビットマップフォントを追加
  ・asset/fontフォルダを作成
  ・ビットマップフォント(font.fnt,font_0.png)をコピー
フォントをコピー
2.MainActivityを編集
  こんな感じ。

package com.example.andenginetest;

import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.text.Text;
import org.andengine.entity.text.TextOptions;
import org.andengine.opengl.font.BitmapFont;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.HorizontalAlign;
import org.andengine.util.color.Color;


public class MainActivity extends SimpleBaseGameActivity
{
 private final int CAMERA_WIDTH = 480;
 private final int CAMERA_HEIGHT = 800;

 @Override
 public EngineOptions onCreateEngineOptions()
 {
  // 描画範囲のインスタンス化
  Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

  EngineOptions eo = new EngineOptions(
  // タイトルバー非表示
    true,
    // 縦画面固定
    ScreenOrientation.PORTRAIT_FIXED,
    // 縦横比保持したまま最大まで拡大
    new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
    // 描画範囲
    camera);

  return eo;
 }

 @Override
 protected void onCreateResources()
 {
 }

 @Override
 protected Scene onCreateScene()
 {
  Scene scene = new Scene();

  // 背景真っ白
  scene.setBackground(new Background(Color.WHITE));

  // ビットマップフォント読み込み
  BitmapFont font = new BitmapFont(
    getTextureManager() //TextureManager
    , getAssets()  //AssetManager
    , "font/font.fnt" //フォントの場所を指定
    );
  font.load();

  //テキストのインスタンスを作成
  Text text = new Text(
    20     //X座標
    , 20    //Y座標
    , font    //フォント
    , "Hello World!!" //描画文字列
    , 20    //最大文字数
    //オプション(左寄せ)
    , new TextOptions(HorizontalAlign.LEFT),
    getVertexBufferObjectManager()
    );

  //SceneにTextを追加
  scene.attachChild(text);

  return scene;
 }

}

フォント読み込んでTextインスタンスにして
Sceneにドーン。って感じ。

3.実行
実行画面
動いた。

おまけ:
ビットマップフォント作った後にfntファイルの1,2行目を修正してないと下記エラー出るよ。

java.lang.NumberFormatException: Invalid int: "1 outline=0"
05-06 18:13:31.879: E/AndEngine(7286): MainActivity.onCreateScene failed. @(Thread: 'GLThread 17752')
05-06 18:13:31.879: E/AndEngine(7286): java.lang.NumberFormatException: Invalid int: "1 outline=0"
05-06 18:13:31.879: E/AndEngine(7286):  at java.lang.Integer.invalidInt(Integer.java:138)
05-06 18:13:31.879: E/AndEngine(7286):  at java.lang.Integer.parse(Integer.java:375)
05-06 18:13:31.879: E/AndEngine(7286):  at java.lang.Integer.parseInt(Integer.java:366)
05-06 18:13:31.879: E/AndEngine(7286):  at java.lang.Integer.parseInt(Integer.java:332)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.opengl.font.BitmapFont$BitmapFontInfo.<init>(BitmapFont.java:610)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.opengl.font.BitmapFont.<init>(BitmapFont.java:211)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.opengl.font.BitmapFont.<init>(BitmapFont.java:176)
05-06 18:13:31.879: E/AndEngine(7286):  at com.example.andenginetest.MainActivity.onCreateScene(MainActivity.java:62)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.ui.activity.SimpleBaseGameActivity.onCreateScene(SimpleBaseGameActivity.java:48)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.ui.activity.BaseGameActivity$3.onCreateResourcesFinished(BaseGameActivity.java:169)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.ui.activity.SimpleBaseGameActivity.onCreateResources(SimpleBaseGameActivity.java:43)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.ui.activity.BaseGameActivity.onCreateGame(BaseGameActivity.java:181)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.ui.activity.BaseGameActivity.onSurfaceCreated(BaseGameActivity.java:110)
05-06 18:13:31.879: E/AndEngine(7286):  at org.andengine.opengl.view.EngineRenderer.onSurfaceCreated(EngineRenderer.java:80)
05-06 18:13:31.879: E/AndEngine(7286):  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1494)
05-06 18:13:31.879: E/AndEngine(7286):  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)



疑問:

  • TextureManagerって何するやつ
  • AssetManagerって何するやつ
  • TextOptions何があるの
  • VertexBufferObjectManagerって何する奴

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...