愛と勇気とかしわもち for iPhone1.10(Retina対応,ほか裏技的なもの)

「愛と勇気とかしわもち for iPhone」を更新しました。

iTunes App Store で見つかる iPhone、iPod touch、iPad 対応 愛と勇気とかしわもち

  • ○Retina対応:グラフィックが高精細に
  • ○ポーズボタンがつきました
  • ○ほか、裏技的なものいくつか(後述)


グラフィックが段違いに綺麗になったので、iPhone4以降またはそれ相当のiPod Touchをお持ちの方は、ぜひアップデートしてみてください。

















      • -

以下、裏技のようなもの。普通に遊んでクリアするぶんには、これを使う必要は全くありません。

■ストーリーリセット
○操作:タイトル画面で、2本指で画面を30回ほど連打してください。2本の指は同時にタッチする感じです。


○効果:ストーリー進行がリセットされ、初期状態に戻ります(得点ランキングは消えません)



■左手モード
○操作:タイトル画面で、3本指で画面を1回叩いてください。3本の指は同時にタッチする感じです。タイトル画面再起動が走ったら成功です。


○効果:ゲーム画面の配置が少しかわり、左手のみで操作しやすくなります(ゲージがかくれない)

iOS5の通知センター半開きの刑

iOS5では、画面を上からスワイプすると通知センターを表示することができます。

(参考)
http://wayohoo.com/ios/beginners/iOS-5-notification-center.html

この通知センターを半開き状態にすると、よからぬことがおきることがあります。特にゲームプレイ中だと。

半開きの時にゲームがどのような挙動をするかは、アプリ側でどう処理しているかによります。

  • ポーズ画面を表示する
  • 構わずそのまま動かす
  • 画面が停止する

問題は「画面が停止する」ような実装をしているゲームで、かつ思考時間制限があるようなゲームです。半開き状態だとゲーム時間が停止してしてまうので、思考時間を無理やり伸ばすことができてしまいます。

私が少し探してみただけでも、これについて対策していないゲームはぽちぽち見つかります。たとえば「愛と勇気とかしわもち」というゲームがそうです。今アップデート申請中です。すいません。

私がやった対策の詳細については、また書きます。

iPhone用2Dゲーをやたら簡単につくれるcocos2dの紹介とTips

iPhoneゲー開発日記その3。


今回は、iPhone用の2Dゲーム開発フレームワーク「cocos2d for iPhone」を簡易紹介してみます。

ぼく自身が「つくる前に読んで見たかったなあ」と思う、あえて細かい話は置いといて、雰囲気だけ伝える感じでまとめます。またぼくが作ったゲームで使った機能が中心になります(といっても、基本的なところのみだと思いますが)


その1
個人でかんたんiPhoneゲーム制作、愛と勇気とかしわもち、cocos2dについてのまとめ - カタテマ日記

その2
2011-10-07 - カタテマ日記


cocos2d for IPhoneとは

ぼくはもともとObjective-Cは全く知らなかったし、できればObjective-Cは避けたいなあ...と思っていたのですが、いざやってみると、言語周りはあまり苦になりませんでした。

間違いなく、cocos2dがゲーム制作まわりのいろいろを面倒をみてくれたおかげで、本質的でない部分の負荷が減ったおかげだと思います。

ぼくがcocos2dでつくったやつ

「愛と勇気とかしわもち」

http://itunes.apple.com/jp/app/love-mochi/id464653777

いわゆるマッチ系パズルに属すると思います。


cocos2dのインストール

インストールはすぐ終わります(必要なもの:Mac)

http://www.cocos2d-iphone.org/download

最新版(現在は「cocos2d-iphone-1.0.1.tar.gz」)をダウンロードしてどっかに展開。

コマンドラインから以下を実行でインストール完了。

sudo ./install-templates.sh

これだけで、Xcodeのプロジェクト新規作成からcocos2dプロジェクトが作れるようになります。


ビルドするだけで「Hello World!」がうごきます。

縦持ち専用にする

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
	return NO; // この行を追加
	...

これは任意ですが、単にぼくが作ったゲームではこうしているので、とりあえず。

とりあえず絵を出す

とりあず細かい話は置いておいて、HelloWorldLayer.mのinitメソッドの後ろに足していけば、いろいろ遊べます。

// 160,240の位置に絵を出す
CCSprite *s = [CCSprite spriteWithFile:@"Icon.png"];
s.position = ccp(160, 240);
[self addChild:s];



すげー簡単ですね。

必要ならz軸も指定することができます。

CCSprite *s = [CCSprite spriteWithFile:@"Icon.png"];
s.position = ccp(160, 240);
[self addChild:s z:1]; // z軸指定

z軸が同じだと、後から追加されたのが上に表示されるっぽいです。

グラフィックは、勝手にキャッシュされて、次回以降は使い回されます。

アクション

「N秒かけてXXする」みたいなのが簡単に処理できます。

3秒かけて(10,20)の位置に移動する。

CCSprite *s = [CCSprite spriteWithFile:@"Icon.png"];
s.position = ccp(160, 240);
[self addChild:s z:1];

CCMoveTo *m = [CCMoveTo actionWithDuration:3 position:ccp(10,20)];
[s runAction:m];

3秒かけて、今の位置から見て(100,20)の位置に移動する。

CCSprite *s = [CCSprite spriteWithFile:@"Icon.png"];
s.position = ccp(50, 100);
[self addChild:s z:1];

CCMoveBy *m = [CCMoveBy actionWithDuration:3 position:ccp(100,20)];
[s runAction:m];

全体的に〜Toだと最終的な値そのものを指定、〜Byだと今の状態からの相対的な値の指定になります。


他にも、CCScaleTo/CCScaleBy(拡縮)、CCRotateTo/CCRotateBy(回転)、CCFadeTo(透明度)などなど用意されています。

この辺は便利すぎる必須機能で、ぼくが作ったゲームでもあらゆるところで使っています。

アクションの組み合わせ

複数のアクションを順番に実行したり、同時に実行したりするには、CCSpawnやCCSequenceを使います。

CCSprite *s = [CCSprite spriteWithFile:@"Icon.png"];
s.position = ccp(50, 100);
[self addChild:s z:1];


同時に
// 1:移動
CCMoveBy *a1 = [CCMoveTo actionWithDuration:3 position:ccp(100,200)];
// 2:5倍に拡大
CCScaleTo *a2 = [CCScaleTo actionWithDuration:2 scale:5];
// ..を、同時に実行
CCSpawn *m = [CCSpawn actions:a1,a2,nil];
[s runAction:m];


順番に

CCSprite *s = [CCSprite spriteWithFile:@"Icon.png"];
s.position = ccp(50, 100);
[self addChild:s z:1];

// 1:移動
CCMoveBy *a1 = [CCMoveTo actionWithDuration:3 position:ccp(100,200)];
// 2:5倍に拡大
CCScaleTo *a2 = [CCScaleTo actionWithDuration:2 scale:5];
// ..を、順番に実行
CCSequence *m = [CCSequence actions:a1,a2,nil];
[s runAction:m];


他にも、くりかえすためのCCRepeatとかCCRepeatForeverといったものもあります。

たとえば、タイトルロゴを上下にゆらすのは、上移動アクションとした移動アクションを、CCRepeatForeverしています。

ちょっと変化をつけた動き

ふつうに「N秒かけて(100,200)の位置に移動」みたいに書くと等速運動になりますが、「はじめは勢い良く、最後はゆるやかに」みたいな感じにすることもできます。

そのために使うのは、CCEaseIn/CCEaseOutなど。

CCSprite *s = [CCSprite spriteWithFile:@"Icon.png"];
s.position = ccp(50, 100);
[self addChild:s z:1];

CCMoveBy *a1 = [CCMoveTo actionWithDuration:3 position:ccp(200,200)];
//CCEaseIn *m = [CCEaseIn actionWithAction:a1 rate:5];
CCEaseOut *m = [CCEaseOut actionWithAction:a1 rate:5];

[s runAction:m];


詳しくはこのへん。
http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:actions_ease



アクションと同じ感覚で使える、メソッド実行の「CCCallFuncND」というものがあります。

「アニメーションが終わったときにメソッド実行」みたいなことができるので、「アニメーション終わった後に音をならす」「アニメーション終わった後に解放」などなどが簡単にできます。

BGM

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"xxx.mp3"];

効果音としてxxx.wavを鳴らす。

[[SimpleAudioEngine sharedEngine] playEffect:@"xxx.wav"];

画像と同じく音は勝手にキャッシュされるので、2回目移行は高速です。逆に言うと1回目は遅いので、それがまずいときは事前にporeloadしておきます。

[[SimpleAudioEngine sharedEngine] preloadEffect:@"xxx.wav"];

シーン

ここまではガンガン適当にスプライトを追加していっていますが、このまま適当にやっていると破綻します。
複雑なものを分割して管理するために、cocos2dにはレイヤーとかシーン管理機能もあります。

「愛と勇気とかしわもち」では、以下のようなシーンを作りました。

  • Title
  • Play
  • GameOver
  • Text
  • Movie

で、各シーンに応じてLayerを定義して、Scheneが保持します。
(例:TitleシーンはメインとなるLayerを保持し、そこにキャラクターやらアイコンやらロゴやらを配置する感じです。そして、ヘルプ表示時は別途定義してあるHelpLayerを生成して重ねる)


シーンからシーンへの切り替えは、こんな感じで。

// タイトルシーンへ
TitleScene *nextSchene = [TitleScene node];
[[CCDirector sharedDirector] replaceScene:nextSchene];

他、必須すぎるけどソラで書けないコード

定期的に処理
//0.1秒後度にupdateを実行
[self schedule:@selector(update) interval:0.1];
// 定期更新メソッド
- (void) update
{
  // なんかを0.1病後度に実行
}
タッチ
self.isTouchEnabled = YES;

Layerなどで上のコードを書いておいて、以下のようなメソッドを定義しておくと、タッチしたときに勝手にメソッドが実行される。

// タッチ開始
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
	UITouch *touch = [touches anyObject];
	CGPoint location = [touch locationInView:[touch view]];
	location = [[CCDirector sharedDirector] convertToGL:location];
	...
// タッチ移動
- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
	UITouch *touch = [touches anyObject];
	CGPoint location = [touch locationInView:[touch view]];
	location = [[CCDirector sharedDirector] convertToGL:location];
	...
// タッチ終了
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
	UITouch *touch = [touches anyObject];
	CGPoint location = [touch locationInView:[touch view]];
	location = [[CCDirector sharedDirector] convertToGL:location];
	...


location.x、location.yで、さわったところの位置がとれる。

本作での「さわってからスワイプで回転」する処理は、タッチ開始した位置を覚えておいて、移動イベントで移動距離が一定量を超えたら処理、みたいにわりあい泥臭くやっています。

他、興味深い機能

  • パーティクル
  • 物理エンジン(Box2D/Chipmunk)
  • テキスト表示
  • 高速に描画する工夫(CCBatchNode)

ゆにばーさる

デフォルトでと、iPhone/iPad両対応のユニバーサルなアプリになります。


ただ、iPad/iPhone両対応にすると、縮尺などを両者に合わせて開発するのは大変そうだったので「愛と勇気とかしわもち」では、iPhone(&iPod)専用にしています。こうすると、iPadではエミュレータ上での動作になります。


本作はiPadでもエミュレータ上でプレイできますが、拡大するとちょっと画像が荒くなります。近々Retina対応する予定で、そうすればかなり良い感じになる気がします。


iPhone(iPod)専用にするための設定方法は、わすれました。

まとめ

ここまで紹介した機能だけでも、簡単なゲームなら簡単につくれそうな気がしないでしょうか? はい、実際に、本当に簡単につくれます。

cocos2dには他にもいろいろな機能があるので、本気でつくるかたはぜひ書籍などをあたってみてください。

他、参考資料

素晴らしすぎるcocos2dスライド。

概要
Hello cocos2d ios

実戦テク
Advanced cocos2d

iPhone版愛と勇気とかしわもち、AppStoreランキング、ダウンロード数の話、あと儲かるのかとか

iPhone版愛と勇気とかしわもち、昨日の朝に確認してみたら、パズルゲームカテゴリで11位にいました。

さて、カテゴリ順位 このくらいだと、DL数/日ってどの程度なんでしょうね。

まえおき

「個人でのiPhoneゲー開発」に関する日記の2回目です。iPhoneゲー開情報について、いろいろ吐き出しておこうと思っています。


前回はiPhoneゲー開発楽しいよ!面倒ごともわりと少ないよ!という内容を書きました。


個人でかんたんiPhoneゲーム制作、愛と勇気とかしわもち、cocos2dについてのまとめ - カタテマ日記


今回は、iPhoneアプリの売り上げまわりの話やマーケティングについて、ぼくがやってみた範囲で共有したいと思います。


ぼくは素人なので専門的な話はできませんが、iPhoneゲー制作はPCで趣味ゲー作っている人にオススメしたいと思っているので、PCで趣味ゲー作っている人であるぼくの目からみた光景を共有するのは、まあ意味のあることなのかなと。
あと知り合いに、勢いでiPhoneアプリに生活をかける世界に飛び込んだのが1人ぐらいいるので 、その人に向けて書いてます。

順位の遷移

で、iPhone版愛と勇気とかしわもちは昨日の朝確認してみたら、パズルゲームカテゴリで11位にいて、広告費もない個人&現在レビューサイトではどこでも扱っていただいていないことも加味すると、そこそこ健闘できている気ががします。

ダウンロードしていただいた方々、本当にありがとうございます。

でも、今確認するとだいぶ順位が落ちていると思います(20位くらい?)最高順位はたぶん8位近辺で、そこから50位くらいの間を乱高下しています。

カテゴリ順位のランキング乱高下が激しいのには、理由があります(後述)

ランキングとDL数

iPhoneアプリは過当競争でもうからないとはよく聞くけど、そこそこ人気カテゴリっぽいパズルゲームでこの順位なら、けっこう儲けてるんじゃないの?」と思われるかもしれませんが、べつにそんなことはありません。

本数を聞いたら「えっ、この売り上げでカテゴリのベスト10に入るの??」とびっくりされるかもしれません。

実際「1日のDL数、どのくらいだと思う?」と幾人かに聞いてみたのですが、だいたい一桁多いくらいの数がかえってきます。

どうしても景気のいい話が目立ちますからね〜。

順位の乱高下

8〜50位くらいの間を乱高下しているという話をしましたが、なぜ乱高下するのかというと、10位-50位あたりがダンゴ状態だからです。どのくらいダンゴかというと、10位〜50位の差が10本ちょい/日 程度しかないっぽいです。なので、ちょっとした影響でダウンロード数が増減すると、カテゴリ順位がすごい勢いで上下します。

レビューサイト

とにかく、レビューサイトの影響力は大きいようです。アプリ順位をウォッチしている方はわかると思いますが、人気のレビューサイトさんで紹介されたアプリはみるみる順位をあげていきます。

商売でやる方は、レビューされるかされないかは死活問題になるんじゃないかと思います。

理想的な流れ

常識かもしれませんが「あらゆる手を尽くしてランキング上位に食い込む」というのが、重要になのではないでしょうか。

  • 発売日前から入念に宣伝して期待感を煽る
  • いざ発売日となったときに一気にダウンロードしてもらい、ランキング上位にねじこむ
  • レビューサイトさんの目に留まり、 レビューしてもらい
  • さらにダウンロードが増えランキングが定着する


…というのが良い流れなのかと思います。発売日のタイミングを逸すると一気に沈み、永遠に浮かび上がれないかもしれません。

ぶっちゃけた話、数自体が少ないので、社員とか 知り合いにこえかけて一気にダウンロードしてもらうだけで、順位がかなりあがる気がします。

自分の場合

と、いろいろ偉そうに書きましたが、iPhone版「愛と勇気とかしわもち」の場合はどうだったかというと、かなり適当でした。レビューに通ったの見てから、サイトを整備して、そのあとtwitterで告知した...という感じです。

今のところ、どこにもレビューしていただいていないようなので、本作はおそらくはカタテマとtwitter経由(&派生)で知ってDLした方がほとんどかと思います。つまりほとんどは既存のプレイヤーさんなのではないかと思います。これは本当にありがたい話です。

まあ、趣味な方はあんま気張っても疲れるだけなので、宣伝とか面倒なことは適度にやるのが良いのかなと思います。趣味開発な人の勝利条件は「楽しい」なので。

まとめ

いっちょ儲けたろというそこあなたは「俺のは出来がいいので何も考えずとも最終的には売れる!!!」とか一瞬でも思わないでください。そこのあなたです。沈んでいる間に、山ほどでてくる後発作品に埋もれます。あなたのつくったものが、ポケモンとかモンハンとか洞窟物語だったら話は別かもしれませんが。

一方、儲けとか気にせず、個人の 趣味の範囲でフリーまたは85円アプリを出して、知り合いに見せたりレビューを半笑いで眺めたりするのには、本当にいい環境です。

趣味ゲー開発の方でiPhoneユーザな方には、ぜひぜひオススメしたいです。

個人でかんたんiPhoneゲーム制作、愛と勇気とかしわもち、cocos2dについてのまとめ

ちょっと前にiPhone版「愛と勇気とかしわもち」をリリースしました。

http://itunes.apple.com/jp/app/love-mochi/id464653777?ls=1&mt=8

そんなわけで、iPhoneゲー制作方法の概要とか楽しさを、かんたんに共有してみたいと思います。iPhoneゲーは想像よりもずっと楽に作れるので、ぼくみたいに暇な人はiPhoneゲームつくったら良いのではないでしょうか。


前置き

同人とかでPCゲーム作ってる方に、ぼくがiPhoneゲーをつくったという話をすると「iPhoneゲーってどうやって作るんですか?」みたいなことをよく聞かれます。実際につくってみたことがない方は、iPhoneゲー開発はPCゲー開発よりもだいぶ面倒なのではないか、という印象を持っているように感じます。


ぼくも最初はそう思っていたわけですが、シンプルなゲームを作る限りでは想像よりはるかにかんたんです。そして楽しいです。なので、プログラミング経験のある方でiPhoneゲー開発に興味がある方は、もっと気軽に手を出しても良いのではと思っているわけです。

あと、下の方で紹介していますが、iPhone用のノベルゲームエンジンもありますので、スクリプトでノベルゲーをつくることもできます。


まとめ

とにかく強調したいことは「簡単なゲームなら、簡単に作れる」ということです。

  • 予想よりずっと楽にできる
  • 実機で動くし楽しい
  • cocos2d素晴らしい

という感じです。


注意していただきたいのは、ここで紹介するのは「売れる!すごい!!高度な!!!iPhoneゲーのつくりかた!!!!!!!!!!!」ではなく、「シンプルなゲームは楽しく簡単につくれますよ」というお話です。


ぼくはゲームプログラマでもなんでもないですし、プログラマか生ゴミかでいえば人間のクズではありますが、そんな人間でもiPhoneゲーをなんとか作ることができました。


想像してたよりもよかったこと

全体的に、実装過程は予想よりずっと苦労が少ないものでした。

OSはMac, 開発環境はXcode, 言語はObjective-C、あとcocos2dと、ぼくにとって新しいものづくめだったのですが、にもかかわらず、変なハマり方をして多大に時間を潰すようなことは、ほとんどありませんでした。

変なハマり方というのは、ライブラリとかの言語のわけわからん挙動に翻弄され、わけもわからず長時間足踏みしてしまうような状況です。


もちろん、不可解なバグが発生してなかなか解決できずに困るという状況は何回もありしたが、原因究明してみたら不可解だったのはぼくのプログラムおよび頭のほうだったという結果に毎回たどり着きますし、これはiPhoneゲー開発に限らずいつものことなので問題ありません。


無用な苦労が少なかったのは、ゲーム自体がシンプルだったのもありますが、後述するcocos2dの力がかなり大きかったと思います。


また、ビルド〜実行までの時間が短いのも、嬉しい誤算でした。ちょっと修正して、うごかして、また修正する、というサイクルがわりかし快適です。Mac上のiPhoneエミュレータでうごかすときはもちろん、実機でうごかすときも、そんなに時間はかかりません。これはもちろんアプリのサイズにもよると思いますが、小規模ゲー制作者にとってはありがたいことです。

実機でデバッグするときも、普通にIDE上でステップ実行できます。


PCゲーにありがちな「この環境だとなんかうごかない!」みたいなことが少ないのも良いですね(Androidアプリも、このへんは面倒らしいです)


あとやっぱ実機でうごくと嬉しいですね。


cocos2d


上でもちょいちょい名前がでていますが、開発にはcocos2dを使いました。

http://www.cocos2d-iphone.org/


cocos2dとはiPhone用2Dゲーム開発用のフレームワークです。


cocos2dにはiPhone用以外もあるので、正確には「cocos2d for iPhone」というべきなのかもしれませんが、だいたい「cocos2d」といえば、cocos2d for iPhoneを指すようなご時世になっているっぽいです。


使いやすく、すでに実績も多数あり、またライセンスも緩いです。


かるく擬似コードによるサンプルで示すと、

敵を100,20の位置に生成するのは、こんな感じです。

 enemy = new CCSprite("enemy.png");
 enemy.position = [100, 20];
 this.addChild(enemy);

敵を3秒かけて160,240の位置に移動するには、こんな感じに書けます。

 mv = new CCMoveTo(3, [160, 240]);
 enemy.runAction(mv);

ここで詳しく書いても意味はないのですが、「簡単に書ける」という雰囲気がなんとなく伝われば幸いです。

音周りとか、シーン管理とかもわかりやすく使いやすかったです。


Objective-Cの壁

ちなみに気になる開発言語ですが、実際はObjective-Cです。

ので、さっきの擬似コードは、実際にはこんな感じになります。

 // 100,20の位置に生成
 CCSprite *enemy = [CCSprite spriteWithFile: @"enemy.png"];
 enemy.position = ccp(100, 20);
 [self addChild:enemy];

 // 敵を3秒かけて160,240の位置に移動する
 id mv = [CCMoveTo actionWithDuration:3 position:ccp(160, 240)];
 [enemy runAction:mv];

初見キモいと思われる可能性があるので、さっきは擬似コードでお茶をにごしました。

メソッド呼び出しが[instance method]と書いたり、引数に名前を常につけるのが、けっこうな割合の人にとってキモイく感じるのではないでしょうか。


iPhoneアプリ開発に興味はあるものの手を出していない人と話をしていると、メジャーな言語とはちょっと違う記法を使うObjective-Cという言語を覚えなくてはならないことが、かなりの心理的障壁となっていることを強く感じます。いままでMacとかで開発していない限りObjective-Cは知らないと思いますし。


ちなみにメモリ管理も(現在は)GCが使えません。


とはいえ、ぼくも最初はキモく感じていたのですが、すぐ慣れました。そもそもぼく自身がキモいので、言語のキモさはどうってことはないと思います。
結局のところ、クラス定義をしてインスタンス作ってメソッド読んでというノリはメジャーなオブジェクト指向言語と同じです。なので、C#やらJavaやらのクラスベースやオブジェクト指向言語をやっていれば、そこそこ馴染みやすいのではないかと思います。


Xcodeのコード補完もぼちぼち使いやすいですし。


あと、ひとりでコード書くような場合は、最初は「ひととおり勉強した上で、Objective-Cっぽいコードを書く!」とか気張らず、ほかの知っている言語をつかっている気分で、気楽にやるほうが挫折しないで良いと思っています。ぼくもそんな気持ちでゆるくやっていたので、objective-Cの細かい機能とかは正直よくわかっていません。


(iPhoneゲー開発している方に聞くと、Objective-Cは少しで、主としてCとかC++で開発している方もいるようなのですが、そっちの方法はよくわかりません)


cocos2d参考情報

cocos2dを勉強するにあたり、検索だけでなんとかなるほどWebには日本語情報は蓄積されていないと思うので、

  • 本を買う
  • 英語サイトを回る

のどちらかになると思います。

本ですが、ぼくが勉強しはじめたときはcocos2dの日本語書籍はなかったので、
がんばって洋書と英語サイトで勉強していました。

Cocos2d for Iphone 0.99 Beginner's Guide

Cocos2d for Iphone 0.99 Beginner's Guide


今は日本語書籍もでています。

cocos2dで作る iPhone&iPadゲームプログラミング

cocos2dで作る iPhone&iPadゲームプログラミング

後者の本はぼくは持っていませんが、ちょっと読んだ限り、簡単なゲームをつくるためなら十分すぎる内容がつまっていると思います。


大変だったこと

正直、必要以上に苦労した記憶は、ほぼありません。


もちろん、相応に面倒だったり大変だったりしたことはありますが、まあそれはiPhoneゲーならではというわけではないし。まあ、規模が大きくなるとメモリやパフォーマンスとの戦いがはじまるのは間違い無いですが、そんな規模でもないですし。


あ、最初に実機転送するときとかは、けっこう手こずりました。その辺は、ググれはたくさん情報があります。


あ、あと、一番たいへんだったのは、最後に公開するためにAppleに送るバイナリをつくるための、申請用ビルドだったかもしれません。

手順通りになんどビルドしてもうまくいかず、発狂寸前にまで追い込まれた後、最終的にこちらを参考したらうまくいきました。
http://iphone.longearth.net/2009/02/03/%E3%80%90iphone%E3%80%91app-store%E7%94%B3%E8%AB%8B%E7%94%A8%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B/


「うまくいかないときは、いったん設定を開発用にもどした上でビルドして、クリーンして、再起動して、また申請用の設定にしてビルドしてみてね」という感じです。ほんまかいなと思いつつやってみたら、一発で見事うまくいきました。びっくりですね。ふざけんな。


あとこれはiPhoneゲー特有の話ではありませんが、「あ、やっぱこのグラフィック必要だった!」みたいなことがいつもより多めに発生してしまいました(特に動画)。いろいろ臨機応変に担当していただいたグラフィック担当のつとうさんに感謝します。

小さい画面内での配置

PCゲーに比べて、iPhoneゲーで使えるのは狭い画面領域です。この領域に必要なパーツを配置して、操作に迷わせないようにすることを考えるのは楽しかったですね。この辺は、グラフィック担当のつとうさんにもいろいろご協力いただきつつ、調整しています。


タイトル画面は、とにかく一番重要なPLAYボタンを別格扱いするのと、押したときのフィードバックとしてちょっと小気味の良い効果を発生させました。


他のボタンはそれぞれ、音楽変更、ランキング、動画、ヘルプですが、これらは補助なので、まずPlayを押すという操作に迷わなければOKです。










ゲームプレイ時は、以下のように持って遊びます。

  • 片手で持って、同じ手の親指で操作
  • 片手で持って、もう片手の人差し指で操作

特に「iPhone縦持ち」「片手でも快適に操作できる」ことを重視して配置しました。個人的にiPhoneを横持ちにしてゲームするのはいまいちしっくりこないことが多のですが、なにより縦持ちのほうが気軽に起動して遊びやすいと考えています。


そんなわけで、本作は縦持ち片手操作ができるため、歩きながらカジュアルに起動してあそぶことができます。歩きながらゲームを遊んでは絶対にいけません。


まあ、すごい画期的なUIとかはないので、完成した配置だけ見るとなんてことはないと思いますが、初見でも難なく操作できる、空気のような、なんてことないUIだと感じてもらえれば成功だと考えています。


操作性

この辺も、調整するのは楽しかったです。


自分自身もiPhoneユーザなだけに、タッチパネルで快適な操作ができるように調整していくのは楽しいものです。


操作方法ですが、つくる前から「タッチして、指をうごかすと回転!」という脳内プレイはうまくいっていたので、その通りに実装してみたらだいたいうまくいきました。


ただ「つくってうごかしてみないと、わからないこと」というものは必ずでるもので、そのへんは作りながら調整しました。

縦スライド操作の排除

もともとは、

  • 右または上スワイプ:時計回り
  • 左または下スワイプ:反時計回り

という操作にする予定だったのですが、実装してみた結果、縦スライド操作は排除することにしました。というのは、横スライドしたつもりなのに縦スライドを検知して、結果意図しない方に回転するという誤爆がかなり発生するんですね。


スワイプする必要がある距離はかなり短めに(数ドット)調整してあるので、かなり敏感に反応してしまうのです。


加えて、縦スワイプをなくしたのは、操作をシンプルにするために選択肢を減らしたかったという理由もあります。「どっちにスライドすればどっち回転するのか」というのは、どちらでも成り立つ感覚的な話なので、まずは覚える必要があります。ここに、左右スライドに加えて上下スライドもあると、おぼえることが増えてしまうのですね。できる操作が増えるわけでもないのに。


そんなこんなもあり、縦スライドは排除しました。まあこういう試行錯誤はわりと楽しいものです。

消去演出中のタッチ

これ、文字で説明するのがけっこう難しいので、つたわるかどうか不安なのですが。


このゲームはアクティブ連鎖みたいな要素はないので、ブロック消去演出中に画面をタッチしても、なにもおこりません。


とはいえ単純に「ブロック消去中はタッチ判定無効」にすると、消去演出中にタッチして、そのまま消去演出がおわったあともタッチしたままでも、ずっと無反応のままです。つまり、消去演出中にタッチしてしまうと、いったん指を離した上で改めてタッチしないと、反応してくれないのです。


これだとけっこう操作しづらいので、「消去演出中にタッチして、そのまま待ち続けた場合、消去演出中終了と同時にタッチされたと判定される。そのまま指をスライドすると、回転できる」てな具合に調整してみました。


文字で説明するとややこしいですが、つたわりますかね。
などなど、このへんのタッチパネルな操作性を調整するのは、なかなか楽しかったですね。



操作感UPの案

現状は、タッチしたあと指をうごした距離があるドット数を超えるまではなにも起こらず、超えるといきなり回転します。


ここを、しきい値をこえるまでは、ブロックが指にはりついてきたほうが操作感が良いのではないか、ということを@Antouchableさんからご指摘をうけました。


この点気が回っていなかったのですが、このほうがiPhoneっぽいし、なるほど!と思いました。


そんなわけで、この点は次期バージョンで対応するかもしれません。


やはりこういうところまで、気を配っていきたいものですね。


開発をはじめるにあたり乗り越えるべき壁とか必要なお金とか

いきなり準備についての項目になりますが、しかも準備なのに後ろのほうに置いてますが、憂鬱な話なのでわざと後ろに回しています。


iPhoneゲー開発をはじめるにあたり、多くの人にとっての金銭的&精神的な大きなハードルは、以下の3点ではないかと感じています。

  • 1.Mac
  • 2.年間8,400円のiOS Developer Program
  • 3.Objective-Cをおぼえる

前述しましたが、3.はわりとすぐ慣れると思います。


それなりにお金がかかってしまう1.と2.がしんどいですね。


Macは、私はいまから1世代前のMacBook Airで開発していました(core2duoのやつ)

MacBook Air買うにあたって「iPhoneゲー開発って、ノートPCでいいのかな…?」と不安だったのですが、性能面で困ったことはなく、非常に快適でした。

MacをiPhoneゲー開発のためだけに買うのはしんどいかもしれませんが、前からMacBook Airが気になってるような方には、MBA買ついでに開発したろうかな、と多少は最初の一歩が軽くなるかもしれません。

で、85円で儲かるのか?

まだ儲かっていません。


そもそもぼくの本職はフリーゲーム制作で、このゲームもまあ無料で良かったのですが、前述のとおりiPhoneアプリは、配布するだけで年間8,400円かかります。


さすがに配布しているだけでお金を消費するのはしんどい。といってゲーム内に広告いれるのはかなり嫌だったので、85円設定にさせていただいています。なお、開発者に入るのはこのうち7割なので、1本60円くらいが入ります。


また年間8,400円以外にも、Macやら人件費やら喫茶店で作業するときのコーヒー代やらでもろもろ金はかかるもので、そのもろもろの費用を埋めるほどの利益はまだ得られていませんが、まあ趣味ですしいつかトントンくらいになるといいですね。


iPhoneノベルゲーム用エンジン

Artemis Engine(アルテミスエンジン)をご存知でしょうか?

iPhoneノベルゲームもつくれるエンジンです。

私自身はつかったことはないのですが、開発者の方に直接お話をきいたりマニュアルを見せていただく機会があり、かなりすごそうでした。

ノベルゲームを作る方は、ためしてみたらいかがでしょうか。


つくれるのはiPhoneノベルゲーム「も」であり、マルチプラットフォームAndroid, Windowにも対応しています。

同一のスクリプトが、Android, Windows, iPhoneで動くそうです。すごくないですか?

http://www.ies-net.com/?page_id=24




再度まとめ

そんなわけで、iPhoneゲー開発は楽しいので、みんなやればいいのではないでしょうか。