Androidアプリ開発したい!

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

2012年12月

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)
持ってる端末
・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)
記事検索
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

  • ライブドアブログ