Androidアプリ開発したい!

IT屋がGalaxySを手に入れてからAndroidに興味が湧き、いろいろと開発したりしてます。 GalaxyNexusがメイン機となり、ようやく普及し始めたAndroid4.0への関心が高いです。 仕事では、iPhone向けとかのソシャゲ作ってます。

Android開発

AndEngineのメモ

AndEngineでよく使うクラスとか紹介しようかと思います。
というかチラシの裏です。

### リソース開放について
- リソースの開放はメモリ不足を回避するために重要
     はじめに必ずリソース開放する。
システムによるGCが検知できないことがあり、その場合に何のエラーも出ずリソースの読み込みに失敗することがあるため。

- detachChildrenとdetachSelfを同じタイミング
 呼ぶとき必ず別スレッドで行う必要がある。
detach しただけれはタッチ可能エリアが消えずに残ってしまうので、あわせて登録を外す必要がある。

### AnimatedSprite
- 第一引数のみで、1コマの再生時間を指定


- コマの時間、最初と最後のコマを指定
    引数1:1コマの時間
    引数2:開始のコマ
    引数3:終了のコマ
    引数4:true = 繰り返し / false = 1回だけ再生

- コマを配列で指定 
     引数1:各コマの時間
     引数2:再生するコマ
     引数3:true = 繰り返し / false = 1回だけ再生

### SpriteのZ座標(zIndex)を変更したい時
Spriteを読み込んだ順番で表示順が決まってしまうが、
setZIndexで読み込み順番とは別に表示順番を指定できる。
その際は、必ず表示するSceneで「sortChildren();」を呼び出さないと反映されないので注意。

### registerEntityModifierの使い方
- FadeOutModifierクラス
     対象Spriteの透過を徐々に下げるアクション。
     引数に渡した定数をかけて、徐々に透明になっていく

 (例)500ミリ秒かけて徐々に透明になる。

- DelayModifierクラス
     対象Spriteをただ遅延させるアクション。
     アニメーションとアニメーションの間に待ち時間を発生させたり出来る。

 (例)500ミリ秒待つ。

- SequenceEntityModifierクラス
     複数のModifierを順番に実行させることができる。

 (例) 500ミリ秒待ってから500ミリ秒をかけて徐々に透明になる。

- MoveModifierクラス
     指定のSpriteのx座標とy座標を徐々に移動させる。

 (例)対象のSpriteを1000ミリ秒かけてX座標だけ画面サイズ分移動する
結構色々応用が効く感じなので、
まだまだよく使いそうなのあがれば紹介できればと思います。

しかし、Timer使いすぎ?でなのか分からないけど
そろそろ動きがカクカクするときがあるので、性能対策を考えないといけない・・・



Android Projectをeclipse上でコピーして別Projectとして開発する

今回は、既存のAndroidプロジェクトをコピーして新しいプロジェクトを作成します。
共通機能とか残して新しいアプリ作りたいときとかやりますよね。

もちろん、パッケージ名等も変更するので、
端末にインストールしても別々のアプリとして認識されます。


ベースとなるプロジェクトがEclipseにいなければ、インポートとかで楽にいけるのかな?
まあ、とりあえず今回は、eclipseで作業します。


### 元になるプロジェクトを普通にコピー&ペーストします。Ctrl+C&Ctrl+vでも良いです

スクリーンショット 2012-12-30 12.19.34.png

貼り付けます。このときプロジェクト名を指定してください

スクリーンショット 2012-12-30 12.19.48.png

ScrollQuestと名付けました。横スクロールのゲームを作る予定なので。。。

### Android ToolsでPackage名を変更します

プロジェクト右クリック
     ー> Android Tools
          ー> Rename Application Package


スクリーンショット 2012-12-30 12.21.06.png


プロジェクト名と合わせてgamebaseをscrollquestに変更します

スクリーンショット 2012-12-30 12.21.33.png


### Android ToolsでRenameできないものを一括置換します

Search
     ー> File
          ー> 検索条件に「前のパッケージ名」でReplaceボタンを押す

ソースコード上のパッケージ名とかが検索でヒットします

スクリーンショット 2012-12-30 12.25.00.png

一括置換します

スクリーンショット 2012-12-30 12.25.45.png

めっちゃエラーでてますので、プロジェクト内のパッケージ名も手作業で直します
スクリーンショット 2012-12-30 12.27.44.png

エラーが消えました
スクリーンショット 2012-12-30 12.28.18.png

### コピーした時にgit情報もコピーしちゃっているので切断して再構築します

スクリーンショット 2012-12-30 12.22.19.png


Share Projectからgitを選んで、gitでソース管理します。

スクリーンショット 2012-12-30 12.22.41.png


### 起動してみます

トップ画面で背景画像のみ表示してます。一発で動きました。

画像のチョイスに関しては気にしないでください。
特に意味はありませんw

device-2012-12-30-124946.png


もっと楽な方法があるのかな?
まあ、エラー出るのでしっかりエラーを対応していけばそんなに苦ではありません。
慣れれば5分もかからない作業ですし!

以上。

AndEngineを使ってみる

はじめに

Android標準フレームワークでゲーム作ろうとすると独自にゲーム用のフレームワークみたいなのを作ってやらないと、パフォーマンスとか汎用性が出せす詰みます。
カジュアルゲームとかサクッと作れるAndEngineに手を出すことにしました。

参考書籍

AndEngineでつくるAndroid 2Dゲーム(著:立花 翔)

AndEngineとは

- LGPLライセンス

書籍の目次

     1. 開発環境の準備
     2. ゲーム共通で仕様できる部分の実装
     3. 投げ系ゲーム
     4. 横スクロールゲーム
     5. 加速度センサーを利用したゲーム
     6. 広告とランキング機能の実装について解説
付録. 逆引きリファレンス

サンプルダウンロード


AndEngineのダウンロードとインポート


スクリーンショット 2012-12-23 23.02.25.png

スクリーンショット 2012-12-23 23.02.31.png

スクリーンショット 2012-12-23 23.02.46.png

Androidプロジェクト作成

基本的には普通に作成すればOK
スクリーンショット 2012-12-23 23.05.01.png

スクリーンショット 2012-12-23 23.05.13.png

スクリーンショット 2012-12-23 23.05.26.png

スクリーンショット 2012-12-23 23.05.37.png

スクリーンショット 2012-12-23 23.06.18.png

ライブラリとして読み込む設定

スクリーンショット 2012-12-23 23.07.07.png

AndroidManifest.xmlの編集


- Android SDKのVersionを13にする
- アプリケーションのテーマを一括で「Theme.NoTitlBar」に変更
- Activityの無駄な再スタートを禁止

スクリーンショット 2012-12-23 23.20.39.png

レイアウトファイルの編集

デフォルトで配置されているTextViewを削除し、org.andengine.opengl.view.RenderSurfaceViewを表示させる。


スクリーンショット 2012-12-23 23.44.38.png

ActivityとSceneの作成

スクリーンショット 2012-12-23 23.45.55.png



MainActivityの修正

広告やWebViewの追加を考慮してSimpleLayoutGameActivityを継承する。
XML Layoutを使わずにゲームを描画する際は、SimpleBaseGameActivityを使う。

BitmapTextureAtlasクラス

画像をオブジェクトとして画面に描画する際、いったん格納する場所。
幅、高さ共に2のべき乗でなければならない。

このクラスを利用することでメモリの使用量を抑えることができる。

第4引数の読み込みオプションは、メモリを多く消費するタイプのゲームでなければ
「BILINEAR_PREMULTIPLYALPHA(アルファ値の設定が可能)」を指定する。

TextureManager クラス

TextureAtlasクラスを一括して管理するクラス。
TextureAtlasをインスタンス化した後、TextureManager上に読み込むことで描画できるようになる。

ITextureRegion クラス

TextureAtlasクラスのインスタンスに、任意の画像のパスを渡して読み込んだ状態のクラス。
TextureAtlasクラスのインスタンスには、複数の画像を読み込むことができるが、
管理が複雑になる上に、そこまで徹底的にメモリの管理を気にしなければならなくなるケースは少ない為、1つのTextureAtlasクラスに1つの画像とするのが良い。

Sprite クラス

ITextureRegionを元に、実際に視覚化されたオブジェクト。
読み込み済みのITextureRegionクラスのインスタンスの座標を指定し、インスタンス化する。
1つのTextureAtlasクラスに1つの画像の場合は、座標指定は(0,0)で問題ない。
画面左上が(0,0)

eclipseからAndroid SDKの最新バージョンをとれないとき

最新版出てるはずなので出てこない・・・ってなった時のメモ
コマンド上で、以下を実行してSDKのマネージャーを起動する。

     android --clear-cache

Macだったら多分このへんにあるはず。

     /Applications/android-sdk-macosx/tools

Android開発でERMasterを使ってSQLiteの開発

ERMaster超便利なので、Android開発でも使えないかな〜?と思ってやってみました。

流れとしては以下になります。
 1.ER図描く
 2.DDLエクスポート
 3.asset/sqlフォルダ下に配置
 4.「3.」のファイルを読み込んでListを返却するUtilを呼び出す
 5.「4.」のリストを元にSQLHelperクラスでcreate時にDDLファイルを読み込んでDBを構築

今回は、4までの内容になります。 


まずeclipseにERMasterのプラグインを導入します。(念のため)


ER図を描いてDDLをエクスポートします。
スクリーンショット 2012-07-15 17.08.05.png

ERエディタ上で右クリックー>エクスポートー>DDL

スクリーンショット 2012-07-15 17.08.25.png

エクスポート時の設定で不要なコメント行とかは極力なくすようにする。
(Android側でファイル読み込みを楽にするため)

スクリーンショット 2012-07-15 17.09.07.png


エクスポートしたSQLファイルの中身はこんな感じ。
とりあえず見たところ、コメント行と空行をなくせばいい感じかな。 

----------------- ここから -----------------


/* Drop Tables */


DROPTABLE T_SPEECH;

DROPTABLE T_MEETING_USER;

DROPTABLE T_MEETING;

DROPTABLE T_USER;





/* Create Tables */


CREATETABLE T_MEETING

(

_ID INTEGERNOTNULLPRIMARYKEY AUTOINCREMENT,

NAME TEXT,

START_TIME TEXT,

END_TIME TEXT

);



CREATETABLE T_USER

(

_ID INTEGERNOTNULLPRIMARYKEY AUTOINCREMENT,

NAME TEXT,

GOBI TEXT,

ICON INTEGER,

TEXT_COLOR INTEGER

);



CREATETABLE T_MEETING_USER

(

MEETING_ID INTEGERNOTNULL,

USER_ID INTEGERNOTNULL,

FOREIGNKEY (MEETING_ID)

REFERENCES T_MEETING (_ID),

FOREIGNKEY (USER_ID)

REFERENCES T_USER (_ID)

);



CREATETABLE T_SPEECH

(

MEETING_ID INTEGERNOTNULL,

SPEECH_NO INTEGERNOTNULL,

USER_ID INTEGERNOTNULL,

MESSAGE TEXT,

TIME TEXT,

FOREIGNKEY (MEETING_ID, USER_ID)

REFERENCES T_MEETING_USER (MEETING_ID, USER_ID)

);


----------------- ここまで -----------------



asset/sqlフォルダ下にsqlファイルを配置する。

スクリーンショット 2012-07-15 17.18.18.png



その配置したファイルを読み込んで、List<String>に変換して返却する自作Utilがこちら。




本当はこのあとSQLiteにぶっこむんだけど、
とりあず一旦ListViewで表示して確認。

f8b93f4f.jpg


ってなわけでサクッと良い感じ。
いくらSQLiteでもソース内にCreate文とかベタ書きするのは気が引けるし、
ER図以外のファイルをDB設計で弄りたくないですからね!
 
持ってる端末
・Galaxy S root化済    (2.3.6)
・Galaxy Nexus          (4.1.1)
・GALAPAGOS A01SH (4.0.4)
・ONDA Vi10              (4.0.3) 
・iPod Touch           (iOS 6.0)
記事検索
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

  • ライブドアブログ