スクリーンショット_2018-10-27_22

ローグライク(仮)コンセプトイメージと描画されない問題の解決

昨日の Mojave での描画されない問題が macOS の glitch だといった文書をいくつか発見したので修正待ちをしようと考えて、ドット絵を描いていた。その後、運良く描画される方法がわかったので修正した。

コンセプトビジュアルイメージ

ゲーム画面はこんな雰囲気になればいいなと考えている。ビジュアルクオリティは悩みのタネになっているが、これくらいならある程度のラインまで底上げできたのではないかと思う。そしてドット絵の描き方がなんとなくだが分かってきたように感じており、描くのを楽しめている。地面のヒビがしつこいような気もするなどの気になる点もまだまだあるが、この調子ならワクワクするビジュアルに到達できるかもしれない。

この画像ではインスタグラムのフィルターからヒントを得て、被写界深度が狭く見えるようにブラーを入れているが、完成品でもこのようなことができないか考えている。最近だとオクトパストラベラーがこれに近いことをやっている。

また、壁際や地面にはゲームとは関係のない飾りを適度につけようと思っている。この画像だと密集しすぎだが、場面ごとに雰囲気を変えるために飾り付けにバリエーションを盛り込みたい。例えば牢獄のフロアは鎖があったり、実験室があったり、神殿のような高貴な場所があったりなど・・・。松明の炎のようにアニメーションするものもある。

このあたりなんかはかなり気に入っており

以前の本棚がこんな感じだったのを考えると随分上達したと実感する。

描画問題

そして描画されない問題について。こんな質問を発見。

ウィンドウを動かしたりリサイズするまで描画されない、という問題が SDL 2.0.8 の macOS Mojave で発生しているという物。ぼくのアプリケーションもやってみたら、びっくり。描画された!

ということで、リサイズなどウィンドウサーフェイスのリフレッシュイベントをウィンドウ初期化後に発行すれば直るのではないかと考えて、色々試してみた。
そうすると、ハイレゾ対応ウィンドウにしてからウィンドウを同じ大きさに変更する API を実行すると無事に描画されるようになった。同じ問題にハマっている人の助けになるように技術的に踏み込んだ内容を書く。

macOS Mojave で SDL2 を使っていると真っ暗な画面になってしまう問題の解決方法

このように、Mojave では真っ暗なウィンドウが描画されてしまう。これを解決するにはメインスレッドで SDL_SetWindowSize を実行すればよい。例えば 500x300 のウィンドウを作成していたとしたら、メインスレッドで何かしらの SDL_Event が来た時に一度だけ SDL_SetWindowSize(window, 500, 300) を実行すると描画される。なお、このときのサイズはピクセル数を表しているため、Mac の Retina ディスプレイなどの高DPIで描画されることを考慮し SDL_WINDOW_ALLOW_HIGHDPI を使ってウィンドウを初期化しておく必要がある。これを怠るとサイズ変更時に意図と異なる大きさで描画されてしまう。

以上。

応援してくださると嬉しいです。よろしくお願いいたします!