Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プロのエンジニアが1人日を捻出してレトロJRPGっぽいゲームを本気で作った

Smith
August 10, 2018

 プロのエンジニアが1人日を捻出してレトロJRPGっぽいゲームを本気で作った

2018/08/10 に株式会社ドリコムで行われたエンジニア総選挙の発表資料です。

Smith

August 10, 2018
Tweet

More Decks by Smith

Other Decks in Programming

Transcript

  1. ルール • enza で利⽤しているゲームライブラリを使⽤ • モバイルブラウザで動くものを作る • 動作環境は enza 準拠とする

    • npm install --save 禁⽌ (--save-dev は OK) • 但し、アルゴリズム系は例外とする • 画像やサウンド素材は過去の資産を流⽤してもよい
  2. 『マップ』について考える • 調べられる • 通れない • 通れるかも知れない • 繰り返さない(タイル) •

    アニメーションする • しないかもしれない • 調べられる • 通れない • 繰り返さない(タイル) • アニメーションする
  3. 『マップ』について考える • 調べられる • 通れない • 通れるかも知れない • 繰り返さない(タイル) •

    アニメーションする • しないかもしれない • 調べられる • 通れない • 繰り返さない(タイル) • アニメーションする ヒト・モノ⼀緒でよさそう
  4. 『実現⽅法』について考える 素材とマスターデータを⽤意 { tile: [ 1, 7, 7, 7, 7,

    7, 7, 2, 10,32,30,30,30,30,34,10, 10,33,31,31,31,31,35,10, 10,37,37,37,37,37,37,10, 10,37,37,37,37,37,37,10, 10,38,39,40,37,37,37,10, 10,41,42,43,37,37,37,10, 10,44,45,46,37,37,37,10, 3, 7, 8, 37,6, 7, 7, 4, 32,30,34,37,32,30,30,34, 33,31,35,37,33,31,31,35 ] } { objects: [ { id: 9, imageName: 'person_1_1_1.png', position: 43, passible: false, size: { width: 1, height: 1 }, animation: { duration: 16, names: [ 'person_1_1_1.png', 'person_1_1_2.png', 'person_1_1_1.png', 'person_1_1_3.png’ ] } } ] } { terrain: [ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, 0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 ] }
  5. やったこと • データ設計と定義 • フィールド情報 • タイル情報 • 基本地形情報 •

    フィールド上のオブジェクト情報 • 初期配置 • 通⾏可/不可 • 専有するエリア (オブジェクトの⼤きさ) • スプライトのフレーム情報
  6. やったこと • 座標系関数群実装 • 主に下記情報の相互変換 • ⼆次元座標(⽣x,y) • ⼆次元タイルアドレス(x,y) •

    タイルインデックス(n) • ビルド環境構築・設定 • 表⽰⽤ html • 過去資産のコンバータスクリプト作成 • テクスチャアトラス情報のPIXI向けコンバート • A* モジュール (3rd party) の TypeScript 対応
  7. やったこと • フィールドクラス(シーン)実装 • リソースダウンロード • BGM 再⽣ • フィールド初期化

    • 背景画像描画 • フィールドオブジェクト描画 • ユーザタップ • 最新の経路検索⽤地形情報の⽣成 • 基本地形情報とフィールドオブジェクトの状態をマージ • 主⼈公の移動制御 • A* 経路検索
  8. やったこと • フィールドオブジェクト実装 • ランタイムとテクスチャアトラス情報とのアンカー差分吸収 • ⾜踏みアニメーション • ⼀定フレーム毎のテクスチャ⼊れ替え •

    歩⾏アニメーション • フィールドクラスから渡された経路に基づいた座標移動 • 座標移動のキューイング • 歩⾏⽅向に適した⽅向を向いているテクスチャへの差し替え • 歩⾏停⽌ • 歩⾏完了コールバック • 状態管理
  9. 付録:『歩⾏』仕様 • ⽬的地が現在地 • 歩かない • ⽬的地が地形的に到達できない • 歩かない •

    ⽬的地にフィールドオブジェクトがある • 現在地に隣接している • ⽬的地の⽅向を向く • 現在地に隣接していない • ⽬的地に隣接するタイルから最短距離を代替の⽬的地として経路検索 • 経路があった • 最短の経路を選択して歩く • 代替の⽬的地に到達した時、本来の⽬的地の⽅向を向く • 経路がない • 歩かない
  10. 付録:開発環境 • Mac OS v10.12.6 • Chrome v68 • Node.js

    v8.11.3 • TypeScript v2.8.1 • webpack v4.5.0 • webpack-dev-server v3.1.5 • Atom / Vim • enza-game.js v1.0.3