読書メモ:Game Development with Rust and WebAssembly (Chapter 1,2)
概要
サンプルコードを書いて遊んでたリポジトリは以下
メモ
1章 Hello WebAssembly
1.2 WebAssembly とは何か?
正直に言えば性能のために Rust と Wasm を使うわけで はない。いずれにしろ性能は保証されるわけではない。Rust と Wasm を使うのは、Rust が好きだからだ。 それでいいのだ!
初っ端から最高だった
1.3 Rust と WebAssembly プロジェクトのスケルトン作成
node18で動かしたからかサンプルが動かなかった。
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
以下を参考に NODE_OPTIONS=--openssl-legacy-provider
をつけてとりあえず回避した
1.4 HTML Canvas を用いたスクリーンへの描画
サンプルが動かないのでweb-sysのfeaturesにWindowなどを追加する必要がある
[dependencies.web-sys]
version = "0.3.64"
version = "0.3.64"
features = ["console", "Window", "Document", "HtmlCanvasElement", "CanvasRenderingContext2d", "Element"]
と思って色々調べたのに、サンプルコードの後に書いてあった。
この時点ではunwrap地獄なので若干見づらい。 JS <-> Rust の境界で曖昧さが Option/Result などに吸収された結果だと思われる。
2章 スプライトの描画
2.3 Canvas へのスプライトの描画
2.3.4 JavaScript のコールバック
JavaScript と Rust は、いろいろなものを抽象化して隠しているが、それがあちこちから漏れ出してしま う場合がある。Rust のクロージャから JavaScript のクロージャに変換する場合はその 1 つだ。
危惧していた通り思想の違いが言語の境界で問題になりそう。 どう解決策が提示されるのか気になる
2.3.5 非同期 Rust
spawn_local と async/await 使ってブラウザ側のイベントループ止まらないように注意しないといけないのは若干めんどい
Mutexの中身をOptionにするのはまだよくわからなかった
2.4 スプライトシートを用いた複数スプライトのロード
サンプル通りにやるとスプライトシートから描画したやつが、三角形の後ろの回ってしまう気がする???
読書メモ:Game Development with Rust and WebAssembly (Chapter 1,2)