いりす症候群!中国語版

いりす症候群!中国語版を公開しました。

簡体:http://members.jcom.home.ne.jp/wtetsu/irisu/manual_cn.html

繁体:http://members.jcom.home.ne.jp/wtetsu/irisu/manual_tw.html

翻訳作業にご尽力いただいたのは、Kay·Masterさん、powさん、飛揚寒星さんのお三方です。ありがとうございました。


もともと日本語版以外まるで考えていなかったつくりだったので、文字コードがらみの問題が若干出たのですが、あちらにプログラミングできる方もいらっしゃったこともあり、すんなり事は進みました。

その辺を含めた公開までにあったもろもろは共有する価値があるかもしれないので、また後日書きたいと思います。

愛と勇気とかしわもち 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ユーザな方には、ぜひぜひオススメしたいです。