Skip to content

Instantly share code, notes, and snippets.

@azu
Created October 13, 2011 14:26
Show Gist options
  • Save azu/1284339 to your computer and use it in GitHub Desktop.
Save azu/1284339 to your computer and use it in GitHub Desktop.

「JavaScriptで大規模ゲーム開発」渋川

ソーシャルゲームの定義

  • ユーザー間で非同期のやり取りが発生する

ngCore

  • マルチプラットフォーム
    • 同一ソースでAndroidとiOSに対応
    • テスト環境はFlashにも対応

ゲームの構成

  • ngCore上にゲームロジック/JavaScript
  • サーバ/Pach+FCGI上に認証とか結果の書き込みをMobageサーバに

役割分担

  • ngCoreのクライアント
    • アクションシーン
    • サーバ側で作ったデータの再生
  • ゲームサーバ
    • パラメーター保持、変化
    • アイテム管理
    • ミッションのスロットの目の決定など
    • ずる防止をするためサーバ側でロジックがある

ngCoreの開発サイクル

  • node.jsで書かれたビルドサーバでビルドを行う。
    • ファイルの結合とか

コード

  • CJSライクなモジュール
  • クラスを作るsubclass関数
  • ゲームはmain関数から始まる
  • Core.UpdateEmitter でゲームループを回す

ゲームの基本構成

  • シンプルなクラス群
    • Sceneクラスを継承してシームを作っていく
    • Sceneを遷移してゲームの遷移が行われる
  • サーバ側からjsonのジョブスタックを受け取る
    • ミッション結果なども配列で返ってくる
    • 知らないジョブが来たら無視が基本方針
    • クライアントは順番に再生していくだけ
    • 新しいミッションも簡単に追加できる
  • サーバエラーがおきたらホーム画面に強制的に戻る

DnLig/ngGo

  • DnLib
    • ゲーム開発の共通ライブラリ
  • ngGo

開発拠点

  • サンフランシスコ

  • 日本

  • パキスタン

  • SKypeチャットが主なインフラ

  • git

    • git flow
  • ドキュメントSphinx

    • CommonJSドメインで作ったものを使用

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とかも含むインテグレーションテスト

インテグレーションテスト

  • インテグレーションテストは書くのが大変
  • 動いてあることが保証できるので重要
    • 後から追加修正とかも

インテグレーションテストの定番 - 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で逆になったり

飯食う

  • 追加モジュールとサポートのみが有料
  • 認定トレーニング
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment