金曜日, 8月 23, 2013

開発合宿でタイピング音ゲー作った

随分時間がたっちゃいましたが、8/2-4の三日間で任天堂な人たちとの開発合宿にいってきました。仕事とかじゃなく、完全プライベートです。今回誘ってくれたWとMは僕が個人事業をやってた頃に一緒にゲーム開発を手伝ってくれた仲間(弟子!?)なので、どれぐらい腕を上げたのかを見るのも楽しみの一つでした。(上からだなーw)


今回のテーマは「自分がやりたい(けど世の中になくて困ってんだよねっていう)ゲーム」を作ることだったので、ちょっと前から欲しいなぁと思っていた「フリック入力のタイピングゲーム」を作ることにしました。

とはいえ、普通に作ってもつまらないのでなんかないかなーと一週間ほど悩んだ結果、「音ゲーにしちゃおう!」と思いついたのでした。音ゲーも昔から好きだったけど自分で作ったことがなかったのです。(これがのちの悲劇を産む結果に。。)

出来上がりはこちら。(iPhoneでのプレイを推奨)


本当はUnityを使ってみたかったんだけど、クライアントのコードを書くのは三年ぶりだし、学習コストに見合うかが分からなかったので、気になっていたenchant.jsを使ってみました。tmlib.jsと悩んだんだけど、web上の情報量が多い方にしたのでした。

結果、最後の最後まで音ズレに悩まされることに>_<
音ゲーはその性質上、音声再生のタイミングとプログラムを同期させないといけないんだけど、曲の再生ポイントを取得するAPI(currentTime)がなんと、秒単位でしか取得できなくてがっくり。仕方ないのでFPSに合わせたフレーム数を測定して盲目的に入力タイミングを判断することに。このため環境によっては処理落ちして音楽とズレまくってしまいます。

さらに追い打ちをかけたのは、iOSだと音楽再生開始のイベント(play)がうまく飛んでこないこと。ここでプログラムと同期取れないと、頭がズレちゃうんです。結局再生中のイベント(playing)を取ることにしてなんとなくそれっぽくはなったんだけど、まだたまにズレたりする。んもー。

丸二日間の開発時間のうち、半分はこれらの問題に当たることになっちまいました。とほほ。

とまぁそもそもenchant.jsの音声再生メソッドはiOSで動かなかったし、HTML5で音を扱っちゃアカンのね、ということが身に染みて分かりました。今度音ゲー作る時はネイティヴにします。はい。
というか、ブラウザでゲーム作ったらあかん。(言っちゃった:-P)

一方、任天堂メンバーはさすがの真面目さで合宿中にあまり酒も飲まなかった(僕は普通に日本酒飲んでました)し、きちんとしたクオリティのものを作ってきてました。Unityのすごさも実感したし、マイコンで携帯型ゲーム機まで作っちゃった人もいて凄かった。WとMもそれぞれの個性はそのままに、熟練したテクで面白いゲームを作ってて関心しました。


当初は「俺、任天堂の倒し方知ってますよ」て言いたかったんだけど、勝ち負けじゃないよね、てことで終了。またチャンスがあれば参加したいっす!

金曜日, 7月 26, 2013

久々にコード書いて思ったこと。

三年ぶりぐらいにコードを書いた。
作ったのは簡単なスクレイピングのスクリプトで、全然大したことやってないんだけどリハビリがしんどかったです。
とりあえず実感したのは、

1. ちょっと詰まると直ぐ諦める
2. 人のコードは読めるけどいざ書こうとすると書けない
3. ボキャブラリー(=関数、記法など)がないから辞書(=Google)を調べ過ぎる
4. 慣用句(=こういうケースは正規表現で書けば行けるな、とか)が出てこない

てな感じ。まさに外国語と同じだなぁと思ったのでした。使いつづけなきゃ、使えませんね。

ちなみにRubyを初めて書いてみたんだけどmechanizeめちゃ便利ですね。Pageオブジェクトの挙動に癖があって戸惑ったけど、クローラーが簡単に作れちゃうのは素晴らしい。

あと企画の仕事との違いで思ったこと。

企画の仕事=ゴールを定義出来ない中で、それらしき方向を模索して反復し続けるお仕事
プログラミングの仕事=(設計が終わってれば)ゴール達成に邁進するお仕事

要するに、企画の仕事も手短なゴールを設定して細切れにすることで、不安を減らしたり達成感を感じやすく出来るんだよなぁと再確認したのでした。

来週末は何故かゲームの開発合宿に参加する予定。ゲーム開発は8年はぶり(!)なのでさらにdkdk。良いネタあったらアイデアください。