RPGツクールMVでiPhoenアプリビルド最新のcordovaでWKWebViewを使うセッティング

最新のcordovaでビルドするためのセッティングは以下のようになります。

cordova create myApp my.project.id myApp
cd myApp
cordova platform add https://github.com/apache/cordova-ios.git#master
cordova plugin add https://github.com/apache/cordova-plugins.git#master:wkwebview-engine-localhost

そして出来上がったconfig.xmlのcontent部分を以下のように変更してください。

<content src="http://localhost:8080"; />

これだけでDeployment Targetを8.0に修正する必要も、Enable Bitcodeの項目をNOにする必要も無くなります。

あとはステータスバーを消したければ、Resourcesの中のinfo.plistに「View controller-based status bar appearance」を追加してNOに、「Status bar is initially hidden」を追加してYESに変更するというのは同じです。

WKWebViewでの環境構築がついに発表される

先日書いたRPGツクールMVをWKWebViewで動かすための環境構築手順が以下でも詳しく書かれています。

参考: [RPGツクールMV] iOSアプリ化のためのWKWebView構築手順

実は、まともに動作するRPGツクールMVのiPhoneアプリが作れなかった時、バックグラウンドからの復活でアプリが異常に重くなる現象を修正されたということで、どうやったのか知りたくて何度も訪れたサイト様です。

この構築手順が一週間前に発表されていたらあの地獄の情報収集期間がなかったはずなので、個人的には助かったのになあ、と思う反面、自分で答えを導き出せたので、その分、成長したと考えて今後に活かしていきたいと思います。

ちなみに、[Error Your browser does not allow to read local files.] というエラーは

cordova plugin add https://github.com/apache/cordova-plugins.git#master:wkwebview-engine-localhost

というコマンドで回避でき、iOSの環境も最新のもので通ります。

しかし、このプラグイン(apache製)ではlocalhostファイルがゲームを立ち上げるたび、毎回作られてしまい、古いlocalhostファイルを読みにいけなくなってしまうため、コンティニューができなくなってしまいます。そのため、localhostファイルが固定されて作られるtelerikのWKWebViewで動かす以外方法がないということで、図らずも同じ環境をセットアップしていたようです。

もしapache側のプラグインでもlocalhostが固定できるようなら、最新の環境で動かせるので、安定感がありそうですが、知識と技術がなさすぎてそろそろ力つきそうなので、今の状況でなんとかリリースまで持っていきたいと思っています。

※追記 ということで調べた結果、config.xmlのcontentを以下のようにすることでlocalhostを固定することに成功しました。結果的に実に簡単な話でしたが、これで最新のwkwebviewで動かすことが可能になりました。iOSを8にする必要もありません。

<content src="http://localhost:1234" />

太字の「1234」部分は0以外で、四桁の適当な数字でOKっぽいです(四桁じゃなくてもいいかもしれませんが調べてないのでとりあえず)。最初8080としてましたが、あまり関係ないみたいです。

RPGツクールMVで作ったゲームをiPhoneアプリ化するときの問題と解決方法

最近、RPGツクールMVでゲームを開発しています。Webで動かすならツクールインストールから5分もあればできるんですが、iPhoneアプリ化は現状致命的なバグが起こりまくります。ここ数日間、世界中のフォーラムで情報収集して、やっと動かせるようになったので、忘れないうちにメモしておきます。プラグインが新しく作り直されるまで(いつになるか見当もつきませんが)この環境をキープしておないと、まともに動かせないです。

まずビルド環境などはRPGツクールのヘルプに載っているのでそれを読めばすでにiPhoneアプリを作った事がある人は簡単に構築できます。ただ、MVはNode.jsのブラウザアプリなので、ターミナルを使ってビルドを行う関係上、少し慣れが必要かもしれません。しかし一度流れを覚えると簡単にビルドできるようになります。

一度、ビルドまで行い、流れをつかんだらそのシーンは捨ててください。そのシーンはヘルプ通りに作ったとしたら、UIWebViewで動いています。UIWebViewは一度バックグラウンドに行って戻ってくると異様な重さになります。また、イヤホンをゲームの途中で刺すとビープ音のようなノイズがずっと流れます。あとは、音楽アプリの音が必ずオフにされてしまいます。スマホ用バーチャルコンソールプラグインのUIも笑えるくらい拡大されます。

こういったバグやエラーを回避するために、WKWebViewを使います。最近GoogleもiOS用のchromeに取り入れたことで話題になりました。

ということで、余計なエラーがおきないようにまったく新しいシーンを作ります。

cordovaでのセットアップは以下。

cordova create myApp my.project.id myApp
cd myApp
cordova platform add ios@3.9.2
cordova plugin add https://github.com/Telerik-Verified-Plugins/WKWebView
cordova prepare
cordova build

cordovaのバージョンが最新ではありませんが、あえてこのバージョンを使います。というか、この構成以外まともに動きません。

Apacheから提供されているWKWebViewもありますが、local storageがまともに機能しません。動いてはいるんですが、シミュレーターで確認したところ、local hostファイルがアプリを起動するごとに生成されるため、セーブデータが読み込めなくなり、コンテニューできなくなっているようです。TelerikのWKWebViewプラグインであれば、local hostファイルは12344という番号で固定されているので、セーブデータがうまく動きます。セーブデータをサーバーにアップすることも考えましたが、さすがに技術的な知識が少なすぎるので今回は見送りました。

次にxcodeの設定です。

まず、プロジェクトのInfoからDeployment Targetを修正、8.0に変更します。ここまでで、xcodeのシミュレーターなら動きます。

次にBuild SettingsからEnable Bitcodeの項目を検索、NOに変更します。これをやらないとiPhoneに転送する際、「does not contain bitcode」といったエラーが出ます。

アプリ化のための設定は以上です。TelerikのWKWebViewプラグインが更新されるまではcordovaのバージョンは上げられないです。

あとはステータスバーを消したければ、Resourcesの中のinfo.plistに「View controller-based status bar appearance」を追加してNOに、「Status bar is initially hidden」を追加してYESに変更すれば良いです。

もしかしたら、「WKWebViewPluginEmbeddedServerPort」の番号を書き換えたらlocal hostファイルのファイル名変更も可能かもしれません。やってないのでまだわかりませんが。

全部わかってしまえば大したことないんですが、さすがに疲弊しました。

テキストを書き換えるだけでプログラムできる技術が欲しいと、IBを使わないアプリ作りを目指していましたが、iOSの度重なるUIKit周りの修正(ほぼ総取替え)についていけず、DoorQuestもUnityかWebアプリで作り直そうと考えていた矢先、RPGツクールMVがNode.jsを使ってWebで動かせるエンジンとして発売されるということだったので、色々勉強できそうだと作り始めてみたら、iPhoneアプリ化は同じくらいの魔窟だったという感じです。

DoorQuestをリリースしました


DoorQuest

先日DoorQuestというゲームをiPhoneアプリとしてリリースしました。

これは「コントロールの必要がないテキストだけのRPGをポケットサイズで楽しみたい」という個人的な欲求で生まれたゲームです。

本当はもっと色々詰め込みたかったのですが、手探りでプログラムを勉強しながらなのでさすがに力つきました。

次回作が作れるかどうかはまだ不明ですが、次があれば、プレイが面倒にならない程度にもうちょっと要素を増やす事ができればと考えております。

ゲーム内ヘルプがないので、この記事がその変わりになるよう少し説明を書いておきます。

パラメータ各種

HP:ヒットポイントです。RPGをよくプレイされるかたには当然ですが、どれだけダメージを受けても平気かという値です。キャンプで待機していれば、時間とともに回復します。

ST:最近流行のスタミナです。どれだけ行動できるかという値になります。HPよりも回復は遅いですが、同じくキャンプで待機すれば回復していきます。

AR:オーラです。一般的なRPGのお金と、経験値を合わせたようなモノだと思っていただければ間違いありません。これでキャンプ地での全回復や、トレーニングを行います。戦闘で力つきると半減します。

OP:攻撃力です。これが高ければ高いほど敵に多くのダメージをあたえます。敵のHPを0にする事ができれば戦闘に勝利する事ができます。

DP:防御力です。これが高いほど敵からのダメージを軽減させます。

SP:素早さになります。これが高ければ戦闘の先制権、ARの奪取率が高くなります。序盤はこのSP値をあげる事をお勧めします。

HL:回復力です。序盤で使用してもそれほど意味はありませんが、後半は必須となるでしょう。

TF:トロフィー(戦果)です。戦闘に勝ったら手に入ります。途中で戦闘終了したり、負けると無くなります。この値が高ければ敵も強くなっていきます。

プレイTips

Q:ARがなかなか溜まらないんだけど?
A:OPは上げず、SPを上げてください。OPが高いとARを奪いきる前に敵を倒してしまいます。

Q:戦闘で負けたらARが激減した。ふざけるな!
A:敵の攻撃力を読み、力つきる前に「戦闘終了」を押してください。戦闘はいつでもやめられます。

Q:HPもSTもなくなった。ARもないし詰んだ。
A:詰んでません。時間が経ったら自然にHPもSTも回復します。

Q:急に倒せないくらい強い敵が出てきた。
A:まだ鍛えないといけないパラメータがあるのかもしれません。わざとTFを捨てて弱い敵が出るようにし、ARを稼ぎましょう。

Objective-C NSArray系以外の配列の要素数を抽出する方法

NSArrayであれば[array count]で要素数が確認できますが、例えばNSStringの配列要素数を確認したい場合どうすればいいのでしょうか。

最も簡単な方法として以下があります。

NSString *str[] = {@"あ", @"い", @"う"};
strCount=sizeof(str) / sizeof(str[0])

「sizeof」で配列内要素を確認して、配列の1つで割るという方法で要素数を割り出します。

Objective-Cの多次元配列の作り方

どこにでもあるかと思っていたら、思ったようなものはどこにもなかったので、自分で作ってみました。

あまり使われることもないと思いますが、置いておきます。

簡単に説明すると、配列内に配列を入れているだけです。

Objective-Cの配列はオブジェクト型しか扱えないので、数字をint型にしようとすると、一手間かかりますが、それもおまけでつけておきます。

    NSArray *ar = [NSArray arrayWithObjects:
                   [NSArray arrayWithObjects:@"1", @"みかん", @"ばなな", nil],
                   [NSArray arrayWithObjects:@"リンゴ", @"2", @"ばなな", nil],
                   [NSArray arrayWithObjects:@"リンゴ", @"みかん", @"ばなな", nil],
                   nil];
    int num[] = {[ar[0][0] intValue],[ar[1][2] intValue]};//オブジェクト型をint型に変換する
    NSLog(@"%@ %d %d",ar[2][2],num[0],num[1]);

iPhoneアプリのUIデザインで失敗したくないなら参考にすべき書籍

売れているiPhoneアプリを観察して、UIデザインを参考にしようと思っても、そこに一体どういう目論みがあって、そのようなレイアウトになっているのか、わからない場合が多いと思います。

iPhoneはPCやタブレットとは違い、「片手で持つもの」で、しかも「親指で操作する」ことが前提になっています。

そういったデバイスはPCやタブレットなどとはレイアウトの考え方が根本的に違います。

本書は、iPhoneアプリのUIデザインのみに特化した参考書籍です。

ツールバーに何個ボタンを配置するのが最も適当か、そのボタンの下に敷くバーの幅は何ピクセルが適当か、など当たり前なのに注意してないと見落としがちなUIの基礎的なデザインを知ることができます。

そして、16:9になる前のiPhone画面の比率がどれほど計算され尽くしていたか驚くことになると思います。

IB(interface builder)を使わないiPhoneプログラミングの為に役立つ書籍

interface builderを使うと、簡単なアプリは作れそうですが、何がどうなってそういう事になっているのかさっぱり把握できないのと、工夫も応用も全くできそうにありませんでした。

例えばツールバー(ブラウザアプリの「ブックマーク」や「戻る」ボタンなどがついているバー)にあるボタンの切り替えをinterface builderをつかってやる方法がさっぱりわからないとか。

よくわかるiPhoneアプリ開発の教科書にIBを使ったアプリの作り方が載ってますが、これを読んで、何か「意味のあるアプリ」が作れる人はニュータイプかなにかだろうと思われます。

元々プログラミングができる人はこんな本は買わないだろうと思われるので、「初心者が何かできた気持ちになる為」にあるような本でしょう。その程度で良いというなら買っても良いですが、オススメはできません。

色々な書籍を買ってみて、結局、後々の事を考えると、interface builderを使わないほうが良いという結論に達しました。

ということで、interface builderを使わないでプログラムするのに役立つ書籍を以下にあげます。

初心者〜成長していくことを想定して、下に進むごとに難易度が上がるように紹介します。

Xcode 4ではじめるObjective-Cプログラミング

プログラミングが全くの素人で、どういうものなのかもいまいちピンと来ない人はこの本から始めると良いです。

本書ではほとんどグラフィカルなソフトは作りませんが、CUIアプリケーションという、文字列だけのシンプルなアプリケーションをつくります。

描画に必要なゴテゴテした機能を記述しなくても、ちゃんと目的に向かって機能するプログラムを作成することで、実際自分の書いた文字列がしっかりとパソコンに認識され、動かす事が可能になるという経験を得る事ができます。

初級者になっても、基礎的な部分を調べるとき手に取る、有用な書籍になると思います。

iPhoneアプリ開発のコツとツボ35

すでにプログラムについてある程度の素養がある人なら、いきなりこの本からはじめても何の問題もないと思います。

何度もつまずいた経験がある人なら、「ああ、こういうことだったんだ」と膝を打つような内容ばかりで、いきなりこの本に出会えなかったことが悔やまれてなりません。

本書があるのとないのでは、作業の効率が全然変わるとおもわれます。

落書きアプリを作るために必要な機能を網羅した内容ですが、応用可能な記述でとても役に立ちます。

詳解 Objective-C 2.0 第3版

既にどこでも紹介されているので、今更感が凄いですが、C言語の概念を持っているなら、いきなりこの本が良いと思われます。

ただし、初心者は全く意味不明になること間違いなしなので、いきなり読むのはやめた方が良いと思います。

パターンがある程度わかるようになれば、「そういうことか」と読むたびに発見があります。

iPhoneプログラミングUIKit詳解リファレンス

これもiPhoneアプリ制作に興味がある人はどこかで見た事がある本だと思います。

さすがに「詳解」というほど詳解ではないし、Objective-cの基本がかなり深いところまでしっかりわかってないと動かす事も不可能だと思われるようなサンプルばかりですが、UIKitという、どのように手を出せば良いかさっぱりわからない魔窟に挑む時の心強い味方となります。

UIToolbarという、先に挙げたブラウザアプリの「ブックマーク」や「戻る」ボタンなどがついているバーに表示されたボタンアイコンの、変数による変更、切り替えの方法はこの本にしか載ってません。(多分)

終わりに

上記の書籍を持っていれば、大体の事はわかると思います。

というより、自分はオライリーの本もいくつか持ってますが、上記の本しか読まなくなってしまいました。

2013-02  | 2013-05  | 2013-07  | 2016-02