2014年5月14日水曜日

Xcodeで便利になるコメントの書き方

プログラムを書くときに、ちゃんとコメントを入れていますか?
一人で書く場合は、案外適当だったりしますよね。
そのコメントの入れ方で実はXcode上で便利になることを知りました。


普通はこんな感じでコメントを書くと思います。

スラッシュ2つ『//』のコメント

---------------------------------
//コメントテスト用メソッド
- (void) commentTest1 {
    
    //変数コメント
    int commentVal = 0;
}
---------------------------------


それをこのように変えてみてください。

『/**』と『*/』の間に書くコメント

---------------------------------
/** コメントテスト用メソッド */
- (void) commentTest1 {
    
    /** 変数コメント */
    int commentVal = 0;
}
---------------------------------


そして、その関数を補完候補で見てみると…

このように、コメントがメソッドの説明として表示されます。


同じように、変数でもこの通り。


このコメントの入れ方はドキュメント出力するとき用だと思っていました。
実はXcodeの補完候補でも使われているんですねえ。
今まで知りませんでした。

簡単で地味に便利なので、コメントを入れる時はこのやり方にしてはいかがですか?


アルファベットをタップして英単語を作る知育系アプリはいかがですか?
「しりとり」や「文字数制限」などのステージが48もありますよ。



2014年5月8日木曜日

レビューのお願いをするダイアログを出す方法

レビューを促すAppiraterの導入手順


App Storeでアプリをダウンロードするときに意外とレビューを気にする人は多いです。
でも、あんまりレビューって書いてくれなかったりしますよね。
そこで、iOSアプリのレビューをお願いするダイアログを出すライブラリ『Appirater』をご紹介します。



こういうモノはユーザーには結構ウザがられてしまいがちです。
ですので、ただ闇雲に出すのではなく、ある程度アプリを使ってくれた人にだけ依頼をした方が良いでしょう。
この『Appirater』はアプリの起動日数・回数を指定したり、ゲームクリアー時などの任意のタイミングで表示することができるので、その辺りを考慮した実装ができます。


1.ダウンロード

 githubから、Appiraterをダウンロードする。
https://github.com/arashpayan/appirater

2.プロジェクトに追加

 ダウンロードしたライブラリから以下のファイルをプロジェクトに追加。

  • Appirater.h
  • Appirater.m
  • AppiraterDelegate.h

ローカライズしたい言語のフォルダも追加。
※例えば英語、日本語の場合は以下のフォルダを追加。
  • en.lproj
  • ja.lproj

3.フレームワークの追加

 プロジェクトに以下のフレームワークを追加する。

  • CFNetwork.framework
  • SystemConfiguration.framework
  • StoreKit.framework ※
※StoreKitはRequired⇒Optionalに変更


4.文言のローカライズ

 ダイアログの文言を修正する場合は、ローカライズファイルを修正する。
(日本語の場合は、AppiraterLocalizable.strings(Japanese))

5.ARC設定

 プロジェクトがARCを利用しない場合、以下の設定をする。
「TARGETS」⇒「Build Phases」⇒「Compile Sources」
 ⇒Appirater.mに 「-fobjc-arc」を設定

6.設定値の修正

 AppDelegate.mのapplication:didFinishLaunchingWithOptionsメソッドにAppirater起動の設定を記述する。


[Appirater setAppId:@"000000000"]; // アプリのID
[Appirater setDaysUntilPrompt: 30]; // ダイアログを表示するまでの日数
[Appirater setUsesUntilPrompt: 20]; // ダイアログを表示するまでの起動回数

[Appirater setSignificantEventsUntilPrompt: -1]; 
// ある特定のタイミングでダイアログを表示したいときに使用
// 値 : -1=無効, 1=有効
// 表示する場合は、任意の箇所に
//[Appirater userDidSignificantEvent:YES] を記述

[Appirater setTimeBeforeReminding: 1];
//「後で見る」を選択したときに再びダイアログを表示するまでの日数

[Appirater setDebug: NO]; // デバッグモード(YESでアプリを起動するたびに表示)



7. 起動時のカウント

AppDelegate.mのapplicationWillEnterForegroundメソッドに、カウントする処理を記述する。

[Appirater appEnteredForeground:YES];


8.アプリ名

 実行時の画面に表示するアプリ名を変更する場合は、Appirater.hを修正する。

#define APPIRATER_APP_NAME を修正



9.Appiraterの起動

ダイアログを表示したい場面で、以下の処理を記述する。

[Appirater appLaunched:YES]; // Appiraterの起動



タップで計算式を作って暗算する知育系アプリです。
あなたの脳偏差値はいくつかな?




2014年5月2日金曜日

『ゲーム制作初心者が知るべき8つのこと』がためになった

『ゲーム制作初心者が 知るべき8つのこと』というスライドがためになった。
  ⇒http://www.slideshare.net/MASA_T_O/8-32793831

そこで、スライドの内容を引用しながら、どの辺りがためになったのか備忘録を兼ねて書いておきます。

1. 「頭のなかにある うちは神ゲー」の法則

すごい面白いゲーム 思いついた!!!!天才!!!!

作った!

何これクソゲー!

「頭のなかにあるうちは神ゲー」の法則
 ・面白いと思わなければそもそも作らない
 ・それでも世の中クソゲーはたくさん
 ・誰もが通る道です

原因
 ・頭のなかにある時点では色々見落としている
 ・頭のなかにある通り作れるとは限らない
 ・冷静に考えたらそもそも成立し得ない作りであることも

対策
 ・銀の弾丸があったら苦労しない
 ・アイデアを思いついたら一晩寝かせて冷静になってみるとか
 ・クソゲーだと諦めずにもう少しいじってみるとか

これはありがちですね。
ある程度動くものを作ってみないと案外分からなかったりします。
でも、逆も然りで作ってみたら実は面白かったとかもありがちです。
アイデアは簡単なプロトタイプにして、実際に動かしみるのが良いかと思われます。


2.自分を信じるな

製作者とプレイヤーの違い

 製作者
 ・数百回遊ぶ
 ・ゲームの中身をすべて知っている
 ・大切な一本

 プレイヤー
 ・最初の1回が勝負
 ・説明書さえ読まない
 ・無数にあるゲームのひとつ

製作者にありがちなこと
 ・もっと難しくしたほうが面白いだろう
 ・十分理解できる画面構成だろう
 ・これくらいの操作はできて当然

プレイヤーの感覚で 見てみよう

これも納得です。
難易度調整などで何度もテストプレイをしていると感覚がおかしくなってきます。
自分が上手くなってしまい、もっと難しくしてしまったりして。
できれば開発者以外の人にプレイしてもらって、意見をもらうのが良いのでしょうね。


3. シンプルに、シンプルに

シンプルな方が遊びやすい

シンプルな方が作りやすい

複雑だから面白いとは限らない

シンプルなほうがいいですね?

シンプルゲームのすすめ
 ・シンプルなゲームだとルールの面白さがゲームの面白さに直結する
 ・物量がなくても面白いゲームを作れる
 ・ルール設計の感覚を養える
 ・良さ・悪さが分かりやすく見える
 ・サクサク作れる

これも、さっきのヤツと一緒ですね。
何度も自分で遊んでいると物足りなくなって、ルールを追加してみたり。
気が付けば、やたら複雑になって分かりにくくなってたりとか。
ときどき客観的にならなければいけませんね。


4.プレイヤーは 想像以上に上手で 想像以上に下手だ

プレイヤーの思わぬ上手さ
 ・製作者よりも上手なプレイヤーはきっと現れる
 ・気付かなかった必勝法が編み出されたり
 ・極限のプレイで新たなバグが発見されたり
 ・カンストしたり

プレイヤーの思わぬ下手さ
 ・プレイヤーの大部分は製作者よりも下手だ
 ・極限の下手くそさで新たなバグが発見されたり
 ・一番簡単なレベルさえクリアできなかったり

想像力を働かせて デバッグしましょう

これは、リリースしてみてから実感しますね。
こんなの無理だろうと思って作ったステージがクリアーされたり。
逆に簡単だと思ったステージでほとんどの人が詰まっていたり。
このあたりのレベルデザインは非常に難しいところです。


5. リスクとリターン

とは

ゲームデザインの黄金律


 ・画面上に行くとアイテムが回収できてスコアが稼げる
 ・難易度が高いマップだとレアなものが手に入るかも
 ・「ぷよ」を画面に貯めこんで大連鎖
 ・ギャラクシアンいいよね

なぜいいのか
 ・安全を取るかリターンを取るかの駆け引きを迫る
 ・自分が判断したということがプレイヤーに満足を与える
 ・プレイヤーが腕前に応じた難易度を選べる

これも、レベルデザインの一種ですね。
要は腕があれば安い武器でも先に進める。
腕が無い人でも、地道にお金をためて高い武器を買えば何とかなる。
そんな感じのバランスを常に考えながら調整する必要がありますね。


6.音を鳴らせ

とにかく鳴らせ

音はゲームの半分だ

効果音を鳴らせ
 ・プレイヤーの行動にいちいち音を付けろ
 ・テレビとか見ると重要性がよくわかる

効果音の手に入れ方
 ・作る
 ・録音とか Bfxr とか楽器音源とか
 ・素材 ・マッチメイカァズ
 ・WEBWAVE LIB

BGMを鳴らせ
 ・没入感が深まる
 ・雰囲気が出る
 ・なんでもいいから付けろ

BGMの手に入れ方
 ・作る ・がんばれ
 ・ドラム鳴ってるだけでもないより遥かにいい
 ・素材
 ・煉獄庭園
 ・魔王魂
 ・その他沢山

面倒だと言わずに鳴らせ


7.オーバーリアクションせよ

リアクションはゲームの根源のひとつ
 ・すべての行動にリアクションを付けろ
 ・音、エフェクト、その他可能な限り
 ・起きていることを伝える、実感させる効果がある
 ・リアクションを付ければクソゲーでも面白くなる


これは2つまとめて。
やはり、何らかの操作に対してフィードバックはあった方が分かりやすいですね。
音だけだと消音されるとダメなので、一緒に視覚的効果も必要ですね。


8.経験値を稼げ

入力の経験値
 ・ゲーム制作に限った話でもないが
 ・ゲームでも本でも映画でもアニメでもなんでも役に立つ
 ・普段遊んでいるゲームも分析的に見てみよう
 ・入力ばかりにかまけ過ぎないように

出力の経験値
 ・まずは小さいゲームを粗製乱造
 ・最初から大作を作ってはいけない
 ・シューティングとかパズルとか作りやすい
 ・プレイヤーからのフィードバックがあればなおよし
 ・さあゲーム制作沼へ

おすすめ本
 ・「レベルアップ」のゲームデザイン
 ・体系的なネタ帳になる
 ・桜井政博のゲームを作って思うこと
 ・リスクとリターンとか
 ・「タッチパネル」のゲームデザイン
 ・最初の方の章がこの内容と被ってました


何事も経験と言いますが、ゲームばかりしていてゲームの作り方は上手くなりません。
一度作ってみると今まで気にならなかったものが見えてくるものです。
それを踏まえたうえでゲームをやって初めて勉強になるものですね。


まとめ


プログラムの技術とゲームを作る技術は当たり前ですが異なります。
技術者はクリエーター的なことが苦手だったりします。
1を10に膨らますことはできても、0から1を生み出すことができなかったりして。
なので、まずはこういうことから勉強した方が良いかも知れませんね。


タップで計算式を作って暗算する知育系アプリです。
あなたの脳偏差値はいくつかな?




2014年4月30日水曜日

iOSアプリ申請時のスクリーンショットは何でもOKなのか?

iOSアプリを申請するときにスクリーンショットが必要となります。
このスクリーンショットが不適切なものだと審査は通りません。

ただ、単なる画面キャプチャだけでは、ゲームの魅力を伝えることが難しい。
そこで、私はキャプチャ画像に説明用のテキストや画像を追加していました。

こんな感じで、キャプチャにテキストと指の画像を追加しています

でも、色々なアプリを見てみるとスクリーンショットではないものも見受けられます。

このように画面を一部だけ切り取って、何個か並べて説明を入れたものなど


そこで、私も同じようなスクリーンショットで申請してみることにしました。

画面の一部を切り出して3つ貼り付けて説明を入れてます

結果は、何の問題も無く審査を通過しまた。


まとめ


スクリーンショットは完全な画面キャプチャである必要は無いということが確認でしました。



補足


スクリーンショットを調べていたらこのようなものも見つかりました。

これはもう、キャプチャを全く使っていません。
よって、そのアプリに関する画像ならば何でもOKなのかも知れませんね。


本文で使用したスクリーンショットのアプリはこちらです。
アルファベットをタップして英単語を作る知育系アプリですよ。



2014年4月28日月曜日

操作性が良いと思った4つのスマホゲーム

スマホでゲームを作ろうと思うと、一番悩むのが操作性です。
そう思うようになったきっかけは、バーチャルスティックでの操作です。
某国民的RPGのスマホ版がそれだったのですが、とてもやってられないレベルでした。

そこで、スマホのゲームではどのような操作方法が向いているのかと軽く研究してみました。
操作性に問題なく面白いと思ったものを、いくつかとりあげてみます。


SAMURAI SANTARO



  • 馬に乗って走っているので、右へ強制スクロール
  • いわゆる流鏑馬で、的をタップするとそこへ矢を放つ
  • 主人公を上スワイプするとジャンプ




Trials Go



  • 右下のボタンで前後に進む(基本は前を押しっぱなし)
  • 左下のボタンで重心を前後にずらす
  • 物理エンジンの挙動がリアルで繊細な重心移動が要求される



Mr.クラブ




  • カニは自動で横に進んで行き、壁に当たると方向転換
  • 画面をタップするとジャンプ
  • 足場にジャンプで乗って上を目指して行く


Smash Hit



  • 奥へと強制スクロール
  • タップした場所へボールを投げる
  • 邪魔な障害物はボールで壊して、ひたすら先へ進む



傾向


この4つのゲームから以下のような傾向があげられます。
  • 強制スクロール
  • 攻撃は直感的にその場所をタップ
  • タップやスワイプするだけの単純操作

考察


基本的にはいかに操作をさせないかがポイントな気がします。
つまり、移動は自動でさせておいて、回避・攻撃のときだけ操作させる。
その操作も極力簡単、単純、直感的なものにする。


まとめ


やはり、ファミコンは十字キーありきであの操作なのだと思います。
それが無いスマホに同じやり方を持ち込んでも、無理があるということでしょう。
ゲームを作る前に、そもそもどうやって操作するのかを先に考えたほうがよさそうです。


この知育系アプリも数字をタップするだけの簡単操作です。
次々と計算式を暗算して行くと、あなたの脳偏差値が分かりますよ。




2014年4月24日木曜日

Xcode付属のdiffツール『FileMerge』を使ってみた

iOSアプリを開発中に、ファイルの差分を取りたくなりました。
もしかして、Xcodeにその機能が無いかと調べてみたら、やっぱりありました。
知らない人もいるかと思うので、そのdiffツールの起動の仕方をご紹介します。

Finderで『アプリケーション』⇒『Xcode』を右クリック⇒『パッケージの内容を表示』

『Applications』フォルダの『FileMerge』がdiffツールです

起動して、左右のファイルを選択します

このように、簡単にdiffが取れました

シンプルなdiffツールですが、ちょっとした用途ならこれで十分です。
知らなかった人はお試しあれ。



アルファベットをタップして英単語を作る知育系アプリはいかがですか?
「しりとり」や「文字数制限」などのステージが48もありますよ。



2014年4月18日金曜日

iOSアプリの申請は180日放置すると消される

iTunes Connectのアプリ情報は180日放置で消される


一月ほど前にApple(iTunes Connectチーム)より以下のようなメールが来ました。


30 days left to upload your binary


Dear XXXX XXXX|1234567890,

You have not yet uploaded a binary for your app, testGameCenter. Our records show that this app was created in iTunes Connect more than 150 days ago.

If you do not upload a binary for your app by 09 April 2014 (Pacific Time), it will be deleted from iTunes Connect. The app name will then be available for another developer to use.
App Name: testGameCenter
App Version Number: 0.1
App SKU: test0001
App Apple ID: 987654321

To upload a binary, first sign in to iTunes Connect and check that your app's status is Waiting for Upload. Then use Application Loader to upload your binary.

If you have any questions regarding this notice, click Contact Us in iTunes Connect.

Regards,

The iTunes Connect Team



内容は『testGameCenter』というGame Centerのテスト用にiTunes Connectに登録したダミーのアプリ情報のことだったので、よく読まずに放置しました。

すると、その一ヵ月後に再びApple(iTunes Connectチーム)から以下のようなメールが来ました。


App Name Expired: Your app has been deleted from iTunes Connect



Dear XXXX XXXX|1234567890,

You did not upload a binary for your app, testGameCenter, during the 180-day grace period. As a result, the app has been deleted from iTunes Connect.

This app cannot be restored, nor can you use the App Name or SKU for any other app under your account in the future.
App Name: testGameCenter
App Version Number: 0.1
App SKU: test0001
App Apple ID: 987654321

If you have any questions regarding this notice, click Contact Us in iTunes Connect.

Regards,

The iTunes Connect Team



どうやら、iTunes Connectでアプリのデータを作ってから、180日以内にバイナリをアップロードしなかったのでデータを削除したとのことのようです。

その前のメールは150日経ってるからあと30日以内にバイナリをアップしなければ削除するという警告だったようです。

iTunes Connectで確認してみると、『testGameCenter』というアプリの情報が無くなっていました。


まとめ


iTunes Connectにて、『Manage Your Apps』⇒『Add New App』で作ったアプリ情報は180日間バイナリをアップロードしないと削除されます。

「情報だけ先に作って、その後開発で数ヶ月かかる」などというケースの場合は注意なさった方がよいでしょう。

また、一度作ったアプリの情報は簡単に消せないのですが、180日経てば勝手に消えてくれるので、いらないアプリ情報は放置しておきましょう。



2014/4/15 バージョン2.0リリース!遊びやすくなりました。