Suche senden
Hochladen
「さくらのINFRA WARS」で 利用されている技術
•
2 gefällt mir
•
2,565 views
T
townewgokgok
Folgen
さくらの勉強会 フロントエンドナイト ~「さくらのクラウド」のスタッフがエイプリルフール企画でブラウザゲームを作るまで~ の発表資料です。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 41
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
UnityTechnologiesJapan002
IbisPaintのOpenGLES2.0
IbisPaintのOpenGLES2.0
Eiji Kamiya
点群処理
点群処理
Tomohiro Takata
知覚動考、とりあえずShaderを書いてみる
知覚動考、とりあえずShaderを書いてみる
onotchi_
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Hiroshi Yoshida
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
Masahiko Mizuta
海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3D
Kazuhisa Minato
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
Kentarou Mukunasi
Empfohlen
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
UnityTechnologiesJapan002
IbisPaintのOpenGLES2.0
IbisPaintのOpenGLES2.0
Eiji Kamiya
点群処理
点群処理
Tomohiro Takata
知覚動考、とりあえずShaderを書いてみる
知覚動考、とりあえずShaderを書いてみる
onotchi_
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Hiroshi Yoshida
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
Masahiko Mizuta
海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3D
Kazuhisa Minato
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
Kentarou Mukunasi
簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー
Eiji Kamiya
Ogre3d 基礎
Ogre3d 基礎
kw
Direct xとopenglの隠蔽実装例
Direct xとopenglの隠蔽実装例
tecopark
【Unite Tokyo 2019】【あら簡単】インテルのGPAを使ってあなたのUnityタイトルを高速化
【Unite Tokyo 2019】【あら簡単】インテルのGPAを使ってあなたのUnityタイトルを高速化
UnityTechnologiesJapan002
Unity C#3からC#6に向けて
Unity C#3からC#6に向けて
onotchi_
夏前ゼミ
夏前ゼミ
メタボ ようじょ
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
Hiroshi Yamaguchi
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!
Yamato Honda
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Yoshifumi Kawai
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Miyoshi Kosuke
Android gameprogramming
Android gameprogramming
Masahiro Hidaka
Unityで通信してみよう!
Unityで通信してみよう!
koppepan
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
GameCreators,CyberAgent
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
IGDA Japan
NHN HTML5勉強会 CSS3アニメーション
NHN HTML5勉強会 CSS3アニメーション
nhn_hangame
Nginx lua
Nginx lua
Moriyoshi Koizumi
Cerebro for VFX / Animation Japan
Cerebro for VFX / Animation Japan
CineSoft
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
Web Technology Corp.
DoGA-L3でお手軽モデリング
DoGA-L3でお手軽モデリング
K Moneto
Unity 名古屋セミナー [Sprite Studio]
Unity 名古屋セミナー [Sprite Studio]
MakotoItoh
CEDEC2014 SpriteStudio
CEDEC2014 SpriteStudio
Jin-ichiro Okuda
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
Weitere ähnliche Inhalte
Was ist angesagt?
簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー
Eiji Kamiya
Ogre3d 基礎
Ogre3d 基礎
kw
Direct xとopenglの隠蔽実装例
Direct xとopenglの隠蔽実装例
tecopark
【Unite Tokyo 2019】【あら簡単】インテルのGPAを使ってあなたのUnityタイトルを高速化
【Unite Tokyo 2019】【あら簡単】インテルのGPAを使ってあなたのUnityタイトルを高速化
UnityTechnologiesJapan002
Unity C#3からC#6に向けて
Unity C#3からC#6に向けて
onotchi_
夏前ゼミ
夏前ゼミ
メタボ ようじょ
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
Hiroshi Yamaguchi
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!
Yamato Honda
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Yoshifumi Kawai
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Miyoshi Kosuke
Android gameprogramming
Android gameprogramming
Masahiro Hidaka
Unityで通信してみよう!
Unityで通信してみよう!
koppepan
Was ist angesagt?
(12)
簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー
Ogre3d 基礎
Ogre3d 基礎
Direct xとopenglの隠蔽実装例
Direct xとopenglの隠蔽実装例
【Unite Tokyo 2019】【あら簡単】インテルのGPAを使ってあなたのUnityタイトルを高速化
【Unite Tokyo 2019】【あら簡単】インテルのGPAを使ってあなたのUnityタイトルを高速化
Unity C#3からC#6に向けて
Unity C#3からC#6に向けて
夏前ゼミ
夏前ゼミ
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Android gameprogramming
Android gameprogramming
Unityで通信してみよう!
Unityで通信してみよう!
Ähnlich wie 「さくらのINFRA WARS」で 利用されている技術
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
GameCreators,CyberAgent
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
IGDA Japan
NHN HTML5勉強会 CSS3アニメーション
NHN HTML5勉強会 CSS3アニメーション
nhn_hangame
Nginx lua
Nginx lua
Moriyoshi Koizumi
Cerebro for VFX / Animation Japan
Cerebro for VFX / Animation Japan
CineSoft
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
Web Technology Corp.
DoGA-L3でお手軽モデリング
DoGA-L3でお手軽モデリング
K Moneto
Unity 名古屋セミナー [Sprite Studio]
Unity 名古屋セミナー [Sprite Studio]
MakotoItoh
CEDEC2014 SpriteStudio
CEDEC2014 SpriteStudio
Jin-ichiro Okuda
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
decode2016
Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1
Michael Tedder
20190307 visualslam summary
20190307 visualslam summary
Takuya Minagawa
Enjoy handwritten digits recognition AI !!
Enjoy handwritten digits recognition AI !!
KAIKenzo
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
5mingame2
DXライブラリのすゝめ
DXライブラリのすゝめ
Daisuke Nikura
XNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところ
IGDA Japan
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
鈴鹿工業高等専門学校
World Locking Tools でAzure Spatial Anchorsが使えるようになった
World Locking Tools でAzure Spatial Anchorsが使えるようになった
Takahiro Miyaura
GREE Tech Conf 2022 GREE VR Studio Laboratory - UXDev R&D Summary 2022 #GREETC
GREE Tech Conf 2022 GREE VR Studio Laboratory - UXDev R&D Summary 2022 #GREETC
GREE VR Studio Lab
Ähnlich wie 「さくらのINFRA WARS」で 利用されている技術
(20)
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
『ポコロンダンジョンズ』エフェクトや演出制作ノウハウ
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
Xbox LIVEインディーズゲーム「ピアレビュー攻略」のためのXNAにおける開発のコツと特有の課題
NHN HTML5勉強会 CSS3アニメーション
NHN HTML5勉強会 CSS3アニメーション
Nginx lua
Nginx lua
Cerebro for VFX / Animation Japan
Cerebro for VFX / Animation Japan
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
DoGA-L3でお手軽モデリング
DoGA-L3でお手軽モデリング
Unity 名古屋セミナー [Sprite Studio]
Unity 名古屋セミナー [Sprite Studio]
CEDEC2014 SpriteStudio
CEDEC2014 SpriteStudio
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1
20190307 visualslam summary
20190307 visualslam summary
Enjoy handwritten digits recognition AI !!
Enjoy handwritten digits recognition AI !!
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
DXライブラリのすゝめ
DXライブラリのすゝめ
XNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところ
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
World Locking Tools でAzure Spatial Anchorsが使えるようになった
World Locking Tools でAzure Spatial Anchorsが使えるようになった
GREE Tech Conf 2022 GREE VR Studio Laboratory - UXDev R&D Summary 2022 #GREETC
GREE Tech Conf 2022 GREE VR Studio Laboratory - UXDev R&D Summary 2022 #GREETC
Kürzlich hochgeladen
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
Kürzlich hochgeladen
(11)
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
「さくらのINFRA WARS」で 利用されている技術
1.
「さくらのINFRAWARS」 で利用されている技術 2018.06.29
2.
自己紹介 さくらインターネット(2008年入社) 技術本部アプリケーショングループ 古川健太郎 @townewgokgok 好きなゲーム PENGO GALAGA MARIOBROS. BOMBJACK FANTASYZONE etc.
3.
さくらでのフロントエンド経験 2010年レンタルサーバ新ウェブメール・新ファイルマネージャ
4.
さくらでのフロントエンド経験 2013年さくらのクラウドマップ機能
5.
今はクラウドのバックエンドやってます(2011年~)
6.
さくらのインフラウォーズ
7.
私のゲーム開発経験 au向けケータイゲーム開発(2004~2008、C++/BREW) 音楽・効果音制作(主にFM音源) ドット絵は枠線引いてた程度 私が今回やったこと ブラウザゲーム開発(初挑戦) ドット絵全般(タイトルロゴを除く) レベルデザイン
8.
さくらのINFRAWARSで利用されている技術 描画エンジン スプライト タイルマップ フォント シェーダ サウンド 入力 暗号化セーブデータ スクショ付きシェア機能 乱数 ジェネレータ
9.
描画エンジン
10.
PixiJS 公式http://www.pixijs.com/ 「ゲーム開発フレームワーク」ではない ただの描画エンジンなので習得・導入が楽 シェーダも書ける PixiJSSoundみたいな描画以外のプラグインもある RPGツクールMVhttp://tkool.jp/mv/でも使用されているとのこと
11.
PixiJSの主な仕事 生で触ると面倒なWebGLやCanvasを簡単に扱えるAPIを提供 const app =
new PIXI.Application(256, 224) document.body.appendChild(app.view) const sprite = PIXI.Sprite.fromImage('aichan.png') sprite.x = app.screen.width / 2 sprite.y = app.screen.height / 2 app.stage.addChild(sprite) WebGLが無効な環境ではCanvasにフォールバック スプライト画像等のアセット管理 etc.
12.
生Canvasの場合 function init() { キャラクタなどの初期状態を設定 //
画面描画に関してやることはない } function tick() { 入力処理など キャラクタの状態や座標を再計算 } function repaint() { Canvas全体をクリア 背景を描く キャラクタを現在の座標に描く スコアを描く } 生Canvasとの違い PixiJSの場合 function init() { キャラクタなどの初期状態を設定 描画オブジェクトの階層構造を設定 } function tick() { 入力処理など キャラクタの状態や座標を再計算 } function repaint() { // 通常やることはない // 描画はPixiJSがやってくれる } 昔のFlashみたいなもの(普通のDOM操作に近い) 今回は生Canvasで書かれたコードをPixiJS仕様に書き換えた
13.
スプライト
14.
スプライトエディタ
15.
Aseprite 公式https://www.aseprite.org/ 読み方は /eɪs-praɪt/ オープンソース Steamで購入→¥1,480安い! 個人利用・貢献目的で自前ビルド→¥0 操作系統がAdobeっぽくて分かりやすい アニメーション作りやすい マップチップ作成には向いてない CLIからバッチ機能利用可(スライス出力等) https://www.aseprite.org/docs/cli/
16.
aseprite -b sprites.ase
--save-as {layer}-{slice}-{frame}.png
17.
spritesheet‑js npmhttps://www.npmjs.com/package/spritesheet‑js 複数画像を1枚に結合、PixiJSアセットローダ用のJSONを同時出力 JSON中にオリジナルのファイル名をキーとする座標の辞書 →テクスチャの呼び出し部が透過的に書ける PIXI.loader.add('aichan.png') // バラでロード PIXI.loader.add('boss.png') //
... const texture = PIXI.utils.TextureCache['aichan.png'] const sprite = PIXI.Sprite(texture) ↓ PIXI.loader.add('spritesheet.json') // シートとしてロード // ... const texture = PIXI.utils.TextureCache['aichan.png'] // 元の名前で参照 const sprite = PIXI.Sprite(texture)
18.
仕組み sprites.json : { "meta": { "image":
"sprites.png", // ... }, "frames": { "sprites-ai_guard-1.png": // 元画像の名前 { "frame": {"x":415,"y":69,"w":16,"h":24}, // それが含まれている位置 // ... }, // ... sprites.png :
19.
1つのスプライトシートにまとめるメリット 読み込みファイル数の削減 → ロード待ち時間の削減 GPU処理の速度最適化 (異なるテクスチャをなるべく参照しない方が速い)
20.
タイルマップ 一般的なタイルマップの例(www.cavestory.orgより) Tileset画像を格子状に刻み、並べ替えて敷き詰める(赤丸に注目) RPG等、広いマップを移動するタイプのゲームで使用するもの
21.
PixiJS公式タイルマッププラグインpixi‑tilemap https://github.com/pixijs/pixi‑tilemap タイルマップ専用のシェーダで描画 ポリゴン数(=座標を転送すべき点の数)が大幅に削減される 格子の境界での補間処理で隣のタイルが混じる問題も防止 ただし「さくらのINFRAWARS」では、 背景は固定なのでマップには使用しない ビットマップフォントのために利用した シェーダを改造して着色機能を追加
22.
フォント PixiJSのTrueTypeフォント描画機能 let text =
new PIXI.Text( 'This is a PixiJS text', { fontFamily: 'Arial', fontSize: 24, fill: 0xff1010, align: 'center' } ); は、以下の理由で今回は使用していない ビットマップ風フォントをDotByDotで描画するのが難しい 複数の等幅フォントを組み合わせたい 気軽に外字を作りたい
23.
使用フォント PressStart2P ・SILOpenFontLicense1.1 ・8×8ドットのビットマップに 変換して使用 https://fonts.google.com/specimen/Press+Start+2P
24.
使用フォント 美咲ゴシック ・8×8ドット ・かな・カナのみ利用 これらのフォントはフリー(自由 な)ソフトウエアです。 あらゆる改変の有無に関わらず、ま た商業的な利用であっても、自由に ご利用、複製、再配布することがで きますが、全て無保証とさせていた だきます。 http://www.geocities.jp/littlimi/misaki.htm
25.
、。,.・:;?!゛゜´`^ ̄_〃〇ー―‐/\~|…‘ '“”()〔〕[]{}〈〉「」+-±×÷=≠<>≦≧∞° ′″¥$%#&*@♥♡★○●◎◇◆□■△▲▽▼※〒→←↑ ↓⇒⇔≡≒♯♪◯©0123456789ABCDEFGHI JKLMNOPQRSTUVWXYZabcdefghijk lmnopqrstuvwxyzぁあぃいぅうぇえぉおかがき ぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとど なにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅ ゆょよらりるれろゎわをんァアィイゥウェエォオカガキギクグ ケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌ ネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨ ラリルレロワヲンヴαβ─│┌┐┘└├┬┤┴┼ΑΒΓΔΕΖ 上下左右空白鍵改停止十二珈 描画したい文字を上のテキストから検索し、下の画像中での座標を特定
26.
シェーダ ブラウン管フィルタ(シェーダ)が書きたかった 主にこのためにPixiJSを導入 PixiJSに任せておけばWebGLの低レイヤな処理は知らなくてOK フィルタはGLSL(GPU上で動くプログラミング言語)で書く
27.
GPUは何をしてくれるのか:座標変換 CPU側ではオブジェクトを青字の3D座標空間に配置・座標計算 その頂点座標群をGPUに転送するたびに赤字の平面座標に変換して くれるようなプログラムをあらかじめGPUに登録しておく 2Dシーンの場合はカメラを無限遠に置いて平行投影
28.
GPUは何をしてくれるのか:ピクセル色の決定 実画面上の1ピクセルごとに「ここに映るのはどの平面か」「どの テクスチャ上のどの座標か」が分かるので、それに対応する「色」 を計算するようなプログラムをあらかじめGPUに登録しておく 3Dでは例えば「平面の向きに応じて明るさを変化させる」など
29.
PixiJSのフィルタ 通常はバッファの内容がそのまま実画面に表示されるが、シェーダ を書けば色の変更・画像の合成・歪み・ぼかし等の加工ができる ブラウン管フィルタでは、画面上の1ピクセルに置く色のソースと するバッファ上の座標をずらして歪ませている
30.
GLSLでフィルタを書く void main(void) { vec2
pos = mapCoord(vTextureCoord) - offset; // 実画面XY座標 vec2 coord = pos / size * 2.0 - 1.0; // 実画面UV座標 [-1, 1] coord /= 1.0 - curve * coord.yx * coord.yx; // 歪んだ実画面UV座標 [-1, 1] vec2 coord2 = (coord * .5 + .5) * scale; // 歪んだ仮想画面UV座標 [0, 1] vec2 pos2 = coord2 * size; // 歪んだ仮想画面XY座標 pos2.x += cos(pos2.y * M_PI * 1.0) * .125; // 左右に波打たせる vec2 maskCoord = pos2 * vec2(1.5, 1.0); // マスク画像UV座標 vec2 pos2nn = floor(pos2) + vec2(.5,.5); // NearestNeighborなXY座標 pos2 = pos2 * (1.0 - CLEARNESS) + pos2nn * CLEARNESS; // NearestNeighbor座標を混ぜる gl_FragColor = texture2D(uSampler, unmapCoord(pos2)) // バッファ上のソース座標の色 * texture2D(mask, maskCoord); // マスク画像上の色 } GLSL=ほぼC言語+ベクトル操作の独特な表記法( .xy 等) GLSLをコンパイルしてGPUに送る関数がPixiJSに備わっている vTextureCoord に実画面の座標が渡ってくるので、 そこに打つドットの色を gl_FragColor に代入する
31.
ちなみに、MacのOpenGL廃止に関して Wikipedia「WebGL」より WebGL1.0を利用するには、グラフィックスハードウェア(GPU)がWebGL1.0 (OpenGLES2.0相当の機能)をサポートしている必要があるが、後述するよう に、バックエンドにハードウェアベンダーが提供するOpenGL/OpenGLESレイヤ ーを利用するかどうかは問わない。WebGLは実装形態を問わないAPI規格にすぎ ないからである。 WebGLはどうなるのか? →ブラウザベンダー次第 と思われます(今後も使えるはず・使えるといいな)
32.
サウンド モバイル環境だと発音タイミングに制限があり、通常は <audio> では「タップした瞬間」に決まった音を出せるだけ WebAudioAPIの音声ストリーム利用がほぼ必須 最初のタップを契機として音声ストリームを開始 以降そのストリームにバイト列で音声データ転送(めんどくs) PixiJSSoundhttps://github.com/pixijs/pixi‑soundを使うと超簡単 PIXI.sound.add('bird', 'resources/bird.mp3'); PIXI.sound.play('bird'); SOUNDONまたはゲームスタートのために画面をタップした 時点から音声が出る→タイトル画面ではBGMを流さない前提
33.
入力 キーボード入力はふつうのWeb開発と同じ PixiJSにはインタラクティブ機能もあるが、今回は未使用 別途GamepadAPIに対応 const pad =
navigator.getGamepads()[0] const button = pad.buttons[0] // boolean|number const dx = pad.axes[0] // number 各社、ボタンIDや軸IDが異なることに注意 ハットスイッチはボタンの場合と軸の場合がある 今回は使用ボタン数が少ないのでさほど困らなかった
34.
暗号化セーブデータ 一般論として、チートを完全に防ぐには ゲームロジックをすべてサーバ側で計算するしかない チート対策は困難→ランキング機能は早々に却下 今回はブラウザローカルなハイスコアだけ対応 RC4Ahttps://www.npmjs.com/package/rc4aで 簡単に暗号化してlocalStorageに保存 (ソースを覗けばハイスコアの書き換えは容易) スクショ付きシェア機能 画像共有サーバPictShareのDockerイメージを改造 https://github.com/chrisiaut/pictshare
35.
乱数 一見ランダムな順番で出現する敵も、実は固定順 運ゲーにはしたくなかった その分覚えゲーになるので、その前提でレベルデザイン Math.random() ではシードを固定できない 生成済み乱数をデータとして持つのは管理が面倒 xorshift.jsを利用 https://www.npmjs.com/package/xorshift.js 「 n
周目の面データ」の乱数シードに n を混ぜる →似ているようで異なる面を無限に作れる
36.
アニメーションの実装
37.
やめようswitch地獄 function tick ()
{ switch (state) { case 'stay': if (0 < --frame) break player.src = 'ai_jump.png' frame = 15; state = 'up' break case 'up': y-- if (0 < --frame) break frame = 15; state = 'down' break case 'down': y++ if (0 < --frame) break player.src = 'ai_stay.png' frame = 15; state = 'stay' break } player.style.top = `${y}px` requestAnimationFrame(tick) }
38.
ジェネレータですっきり function* anime ()
{ while (true) { player.style.top = `${y0}px` player.src = 'ai_stay.png' yield* wait(15) player.src = 'ai_jump.png' for (let y = 1; y < 16; y++) { player.style.top = `${y0 - y}px` yield } for (let y = 16; 0 < y; y--) { player.style.top = `${y0 - y}px` yield } } } const iter = anime() function tick () { iter.next() requestAnimationFrame(tick) }
39.
ジェネレータについてもっと詳しく フロントエンド開発に役立つデモも含むQiita記事を公開中 https://qiita.com/townewgokgok/items/925b7024ff6dd204c770
40.
ライブラリ公開 luacoro‑js buildbuild passingpassing
npm packagenpm package 2.2.12.2.1 dependenciesdependencies nonenone LicenseLicense MITMIT https://www.npmjs.com/package/luacoro Lua‑likepseudo‑coroutineforJavaScript/TypeScriptusing generator. pixi‑tube‑filter npm packagenpm package 1.0.31.0.3 dependenciesdependencies nonenone LicenseLicense MITMIT https://www.npmjs.com/package/pixi‑tube‑filter Tube(CRT)filterforPixiJS.
41.
ご清聴ありがとうございました
Jetzt herunterladen