第七回ありえるえりあ勉強会 アウトラインメモ
第七回ありえるえりあ勉強会 〜JSで大規模・エンタープライズ開発〜に参加してきたので、その時のメモ。
「JavaScriptで大規模ゲーム開発」渋川
ソーシャルゲームの定義
- ユーザー間で非同期のやり取りが発生する
ngCore
- マルチプラットフォーム
- 同一ソースでAndroidとiOSに対応
- テスト環境はFlashにも対応
ゲームの構成
- ngCore上にゲームロジック/JavaScript
- サーバ/APach+FCGI上に認証とか結果の書き込みをMobageサーバに
役割分担
- ngCoreのクライアント
- アクションシーン
- サーバ側で作ったデータの再生
- ゲームサーバ
- パラメーター保持、変化
- アイテム管理
- ミッションのスロットの目の決定など
- ずる防止をするためサーバ側でロジックがある
ngCoreの開発サイクル
- node.jsで書かれたビルドサーバでビルドを行う。
- ファイルの結合とか
コード
- CJSライクなモジュール
- クラスを作るsubclass関数
- ゲームはmain関数から始まる
- Core.UpdateEmitter でゲームループを回す
ゲームの基本構成
- シンプルなクラス群
- Sceneクラスを継承してシームを作っていく
- Sceneを遷移してゲームの遷移が行われる
- サーバ側からjsonのジョブスタックを受け取る
- ミッション結果なども配列で返ってくる
- 知らないジョブが来たら無視が基本方針
- クライアントは順番に再生していくだけ
- 新しいミッションも簡単に追加できる
- サーバエラーがおきたらホーム画面に強制的に戻る
DnLig/ngGo
- DnLib
- ゲーム開発の共通ライブラリ
- ngGo
開発拠点
-
サンフランシスコ
-
日本
-
パキスタン
-
SKypeチャットが主なインフラ
-
git
- git flow
-
ドキュメントSphinx
ngGo/ngBuilder
- – データ駆動で行えるように
-
- パラメーターチューニングのしやすさ
デバッグとテスト
- デバッグメニュー
- サーバにデバッグ用画面がある
- Jasmineを使ってる
今後のngCore
- 3D対応、HTML5対応
まとめ
JavaScriptベースで
オフラインWebアプリケーションの作り方 (白石)
Google Gearsを使ってオフラインアプリケーションを作ったことがある。
オフラインWebアプリケーション
Google Gears
- Google Gears終了 –> HTML5へ以降を推奨
- HTML5を中心にするようになった
オフラインでも読めるアプリの作り方
- それほど実装は難しくない
- アプリケーションキャッシュを利用すればいい
アプリケーションキャッシュとは
- 静的なリソースをキャッシュすることができる機能
- ローカルキャッシュの利点
- IE以外のブラウザでは実装されてる
キャッシュマニフェスト
- リソースのリストを作成する
- Titanium Mobileのリファレンスはローカルキャッシュされてる
アプリケーションキャッシュのJavaScript API
- window.applicationCacheにJavaScriptから操作できるアプリケーションキャッシュAPIがある。
アプリケーションキャッシュを利用する上での注意点
- キャッシュマニフェストを更新しないとリロードで反映しない
- キャッシュ容量が限られている
- モバイルとかだと10MBぐらい
オフラインでも書けるアプリの作り方
- 割りと面倒なもの
- デスクトップアプリとやりたい事はあんまり変わらない
オフラインWebアプリを作るポイント
- 基本はリッチクライアント+同期機能
利用できるローカルストレージ
- Web Storage
- Web SQL Database
- Indexed Database API
- File API
- ドメインごとに仮想的な空間
- セキュリティ的なものがあるため
双方向同期
かなり難しく面倒くさい – フェールセーフ – 更新の衝突 – 同期のタイミング – ネットワーク状態、データの状態管理 – ローカルDBのスキーマ管理/サーバのスキーマと2つできてしまう – ローカルDBのクオータ(5MBぐらい)
- 容量の限界がきたときにどうするか
まとめ
- オフラインアプリケーションといっても読む/書くの2つがある
- 書く/同期的なアプリケーションはかなり面倒臭い
- 割り切ったほうがいい
スケールするUIについて – @monjudoh
Objective-Cで非同期処理のチェーンライブラリとか
要素数
ループの中でbind/unbindしてたので大量に追加されたときに重たかったのでliveメソッドに変更 bindはここの要素に付けるから、要素が多いと死ぬ。delegateとかliveはその枠の方にイベント一個張るだけだから軽くてすむ。
D&D
- ユーザが触れる範囲だけにイベントを付ける
- D&Dは複数のイベントから成り立つので複雑(down->move-up)
要素の生成
- UITableView
- 表示範囲+ぐらいのみを描画してる
- 再利用してる
JavaScriptのテスト事情 – @os0x
- JavaScriptのテスト
- まだまだ未成熟
- 二種類
- JavaScriptのテスト
- JavaScriptだけなので比較的わかりやすい
- JavaScriptを含めたテスト
- UIとかも含むインテグレーションテスト
- JavaScriptのテスト
インテグレーションテスト
- インテグレーションテストは書くのが大変
- 動いてあることが保証できるので重要
- 後から追加修正とかも
インテグレーションテストの定番 – Selenium
- インテグレーションテストは遅い
テスト実行環境
- カピバラさん + Webkit
QUnit,Jasmine
- Jasmineの方がアプリケーションテストは向いてる
jasmine-headless-webkit
- jasmine のspecをCUI環境で実行できる
Titanium Mobile – Masui Yuichiro
- ココログ
- liblis
- AKB
- サイボウズLiveの
- MobSnap
Titanium Mobile
- JavaScriptだけでアプリを作成できる
- Titanium Mobile のモジュール売買できる
- mobile market place
モバイルのUX
- それぞれのプラットフォームに合わせた形に変換する
- それぞれに合わせたUIはUXに
- タブバーの位置がAndroid/iPhoneで逆になったり
飯食う
- 追加モジュールとサポートのみが有料
- 認定トレーニング
感想
- ちょっと落ち着きがなかった気がするの
- あまり掘り下げた感じにはならなかったのは少しもったいない気がした。
メモ環境
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。