Flex、AIR、Java、Androidなど

Posts Tagged ‘Google

こんにちは。@stachibanaです。
本エントリーはAndroid Advent Calendar 2012の表エントリーです。本日の裏エントリーは@katsummyさんです。
NDKとかADKとかaaptとかガチなネタが続いている中、空気を読まずにソフトなネタを投入します。

AndEngineでつくるAndroid 2Dゲーム (SMART GAME DEVELOPER)立花 翔
翔泳社売り上げランキング : 12826
Amazonで詳しく見る

宣伝になりますが、12/13日に翔泳社さんより拙著「AndEngineでつくるAndroid 2Dゲーム」が発売されました。
iPhone業界ではカジュアルゲームで1つで700万稼いだとか、3週間で1000万儲かったとかという話が話題ですね。
さすがにこれは一握りですが、1つのゲームで100万位になった例は結構あります。Androidでもランキングを見ているとその傾向が見られますね。近いうちでしょう。
ということで、今回はゲーム作りを解説してみたいと思います。
これから作るゲームはPlayストアで公開されてますのでまずはそちらをどうぞ。

仮に、「赤い水牛」という飲めばいくらでも働ける炭酸飲料があったとします。それを振って振って振りまくり、噴射させることによって疲れて机で寝てしまっている社員達にぶつけ、翼をさずけられたら素敵だと思いませんか?
Androidの開発環境が揃っている方なら1時間もあれば作れますので、是非体験してみて下さい。
尚、必要な画像素材はここからダウンロードして下さい。ダウンロードできたら、解凍してassetsフォルダにサブフォルダごと放り込んで下さい。

では始めましょう。Androidの開発環境は入っていることを前提に進めます。
※ 本エントリはJavaのこと、Androidのことが普通に分かる方向けに大分はしょって書いています。本の方にはもっともっともーーーーっと優しく書いてありますのでご安心を。
AndEngineの準備
最初にAndEngineを落とします。
AndEngineのサイトを開き、プロジェクトをgitなりzipなりでローカルに保存します。
ライブラリの形式で配布されていますので、落とせたら、Eclipseのメニュー > インポートからインポートします。ワークスペースにコピーすることをおすすめします。
ゲームの雛形の作成
ゲーム画面を作る前に、ゲームの雛形を作りましょう。
でも解説するのがめんどくさいのでここからダウンロードして下さい。
簡単に言うと、リソースの読み込み関係のユーティリティクラスや、シーンの遷移関連の関数等をまとめた抽象クラスとかが出来上がった状態のプロジェクトです。
詳細の解説は本の方に書いてあるのでそちらをどうぞ。
AndEngineライブラリへのパスは同じディレクトリを指定していますので、ワークスペースにコピーしていない方は修正してください。
MainActivityの編集
まず、MainActivityを編集しましょう。以下の実装を加えます。
Activityでは何も描画をせず、起動するシーンを指示し、描画や処理はシーンが行います。

最初に起動するシーンをゲームのシーンからトップ画面のシーンに変更
毎フレーム加速度センサーから値を取得し、ゲーム進行中ならゲームのシーンに値を渡す実装
シーン遷移用の実装
ハードウェアキー押下時の実装

MainActivity.java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171package biz.stachibana.ae.redbaffalo;

import org.andengine.engine.camera.Camera;
import org.andengine.engine.handler.IUpdateHandler;
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 android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.view.KeyEvent;

public class MainActivity extends MultiSceneActivity implements
        SensorEventListener {

    // 画面のサイズ。
    private int CAMERA_WIDTH = 480;
    private int CAMERA_HEIGHT = 800;

    // [...]

久しぶりのAndroidゲームをリリースしました。

「Zombie Gravity」という名前で、端末の加速度センサーで主人公を捜査し、ゾンビを避けながら攻撃アイテムで殺していくゲームです。
以下、マーケットより。
Zombie Gravityは端末を傾けてゾンビから逃げるゲームです!
☆ 端末を傾けておっさんを操作し、次々に現れるゾンビから逃げてください。
☆ ゾンビは速い奴、遅い奴、全く動かない奴の3種類です。
☆ 時々攻撃アイテムが出現します。炎、氷、雷の3種類です。取ると様々な攻撃が繰り出されます。
☆ 一度の攻撃で複数のゾンビを殺すとコンボボーナスが発生します。
☆ スコアはSNSに登校して友達と競いましょう!
☆ ハイスコアランキングも搭載しています!
今iPhoneでカジュアルゲームが流行っているのと同様に、すぐにAndroidでも同じ現象が起こると予想しています。
このゲームはAndroid用2dゲームフレームワークであるAndEngineを使っています。cocos2d程ではないですが、使いこなせば一本数時間〜数日で完成させることができるので、アプリしか作っていない方は是非触ってみて下さい。可能性が大きく広がります!
近々ソースコードと解説が世に出ることになりますので、バグ等ありましたら教えて下さい!

コメントは受け付けていません。

1/27 20:02 ソース、zipファイル修正。
1/28 12:10 ソース、sipファイル修正。詳しくはzipファイル内のreadme.txtに記載。

Nexus Sが届きましたのでとりあえずざっと作ってみました。強制終了したりもあると思いますが多目にみて下さい。w
連絡くれたら自分の手持ちの端末で再現するかどうかやってみて、できれば直します。うちのNexus Sだと動いてるんですが・・・。

とりあえず実機がある方は上のQRコードかここからアプリ落として動かしてみてください。apk置いといてもいいのですがエミュレーターではメイン画面すら開けないほど重いのでやめときます。
動いてますか?瀬戸デ部な方々に手伝ってもらってFPSのチェックをしたのですが、IS03だと遊べないレベルかもしれません。Xperiaでギリ、Desireとやや遅くらいかも。まあパフォーマンスのことは私に聞かれてもわかんないのでこれで進めますね。
サンプルになるほど出来は良くないですが、とりあえずソースまるごと公開します。
まず、AndEngineとOpenFeintを前回の記事を見ながら使えるようにして下さい。ソースのZIPも公開しますが、OpenFeintのIDがないと強制終了すると思うんで実際に動かしてみたい方はID取って下さい。無料ですぐもらえます。
あとはガリガリ書いていくだけ。なるべく分かりやすいように変数や関数は名前付けてます。落とす前に見たいという方の為に貼っときます。長いですし横が入りきらないんでお手持ちのテキストエディタにでも貼りつけてみて下さい。
とりあえず何点かポイント?を。

とりあえず画面は下層からEngine、Scene、Layerで構成されている。Layerはシーン上に複数置くこともできるし、一枚だけでも良い。Scene、LayerへはどこからでもgetScene().getTopLayer()とかでアクセス可能。
Layer上に画像から生成したオブジェクト(Sprite)やテキスト等を置くときには準備が必要。画像の場合はTextureRegionを作ってそれをTextureに配置、それからEngineのTextureManagerにTextureを登録。こっちにもちょっと書いてます。
毎フレーム毎の処理を登録するのはscene.registerUpdateHandler(IUpdateHandler updateHandler)で。
アニメーション処理は〇〇Modifierが担当。AndEngineに同梱のドキュメント読むべし。
Sprite生成時に同時にListenerを登録してnewできるが、getEngine().getScene().getTopLayer().registerTouchArea(Sprite);しないと反応しないので注意。
画像はできるだけ軽く。8bitで書きだす
処理入れるごとにFPSチェックする。すぐ重たなるので。パーティクルとか大丈夫なん?
女の子に100万DLの自作アプリ見せる → はて (・_・”)?、 3日で作ったてきとーゲーム → +.d(・∀・*)♪゚+.゚。、はおおげさでもとりあえず話ふくらます出発点くらいにはなる!モバゲーとかみんなやってるしね。

Javaのソースファイルは3つだけです。
InitialActivityFrame.java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361package biz.stachibana.android.Hige;

import java.io.IOException;

import org.anddev.andengine.audio.music.Music;
import org.anddev.andengine.audio.music.MusicFactory;
import org.anddev.andengine.audio.sound.Sound;
import org.anddev.andengine.audio.sound.SoundFactory;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.shape.IShape;
import org.anddev.andengine.entity.shape.modifier.AlphaModifier;
import org.anddev.andengine.entity.shape.modifier.FadeInModifier;
import org.anddev.andengine.entity.shape.modifier.LoopShapeModifier;
import org.anddev.andengine.entity.shape.modifier.SequenceShapeModifier;
import org.anddev.andengine.entity.shape.modifier.IShapeModifier.IShapeModifierListener;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.opengl.texture.Texture;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.region.TextureRegion;
import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;
import org.anddev.andengine.ui.activity.LayoutGameActivity;
import org.anddev.andengine.util.Debug;
import org.anddev.andengine.util.modifier.IModifier;

import android.content.Intent;
import android.net.Uri;

import com.openfeint.api.OpenFeint;
import com.openfeint.api.OpenFeintDelegate;
import com.openfeint.api.OpenFeintSettings;
import com.openfeint.api.ui.Dashboard;

public class InitialActivityFrame extends LayoutGameActivity {

    private static [...]

AndEngineを使ってゲームを作って(iPhoneのを移植)しようとしているのですが、エミュレーターだとFPSが出なくてどうにもならないので順番を変えて先にOpenFeintを組み込んでみます。
一番面倒な世界ハイスコアランキングやSNSへの投稿等が簡単にできるので、ゲームが作り易くなると思います。
◆ プロジェクト作成
まず、EclipseでAndroidプロジェクトを作成し、andengine.jarをビルドパスに追加します。ゲーム画面は恐らくBaseGameActivityでしょうから、起動時に呼ばれるActivityをBaseGameActivityに変更し、IGameInterfaceに定義されているメソッドを追加します。(BaseGameActivity extends BaseActivity implements IGameInterfaceなので。詳しくはBaseGameActivityにカーソル合わせてF3)この時点でのソースは以下。
123456789101112131415161718192021222324252627282930package com.hoge.AndEngineAndOpenFeintSample;

import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.ui.activity.BaseGameActivity;

import android.os.Bundle;

public class GameActivity extends BaseGameActivity {

    @Override
    public Engine onLoadEngine() {
        return null;
    }
   
    @Override
    public void onLoadResources() {
   
    }
   
    @Override
    public Scene onLoadScene() {
        [...]

12/18、19に東広島のSHARPさんにて開催されたハッカソンに参加してきました。
第一回に続いて2回目の参加です。
ハッカソンの模様はUstreamで中継されていますのでそちらをご覧下さい。
今回もチームに恵まれました。
Twiccaの作者である@R246さん、K’s Launcher、降水確率ステータスバー等の@KUGOさん、おなじみメアドピッカーの@LuckOfWiseさん、ふりがなオートマチック等の@yokmamaさん、イケメンに限る等の@Toro_Kunさんアプリや講師経験などAndroid界隈では有名な方ばかりで、このメンバーなら何でも作れるようなそんな豪華なメンバー陣。
前回と同じく何となくチームが出来ていったのですが、もうこのチームで自分が役に立てるのは絵と音源作成くらいだろうと最初から思いました(笑)。
今回はゲームを3つ作ったのですが、コードを書いたのは自分以外の方ばかりで、自分がやったのは本当に絵描きとGarageBandでの音源作成くらいでした。
懇親会も楽しかったのですがバッテリーが切れてて画像がありません。でも深夜までわいわいしゃべってとても楽しかったです。温泉も行けたし。
ハッカソンの方ですが、結果から言うと優勝できました!前回に続き優勝させて頂いたようなものなので本当に感謝しています。
今回は優勝商品として腕に巻く電子マネー?のようなものが。(写真は@Toro_Kunのを拝借)他にも参加者の方全員に何らかの景品が配られました。太っ腹です。
コードはこちらにありますので興味のある方はどうぞ。
会場、端末を提供してくださったSHARPの方々、運営を担当されたブリリアントサービスの皆様、同じチームになった皆様、参加者の皆様、本当にありがとうございました。
また機会がありましたらよろしくお願いいたします!
参加者の方のブログ記事です。※追々追記していきます。
・第2回 SHARPハッカソン@東広島が開催されました – ブリリアントサービス様
・android hackathon at sharp – @lycheeさん
・第2回 SHARPハッカソン@東広島 – @Toro_Kunさん
・第2回SHARPハッカソン@東広島に参加しました。 – @LuckOfWiseさん


Categories

 

2017年9月
« 4月    
 123
45678910
11121314151617
18192021222324
252627282930  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here