こんにちはchiMaです。
今回はがっつり自分の趣味に関して調べて分かったことを備忘録の一環として残しておく内容になります。
正直、普段のフォロワーはボドゲ記事を見ている気がするので
いきなりこれを見ても困ると思うが、今回は以下の特殊なユーザーのための知見になってくれればいいなと思っています。
今回やろうとしたこと
・VisualStudioを使いたくない(UIが嫌い)
・Clionでゲームを作りたい(それ以外のIDEでも可)
・さらにDxlibもEffekseerも使いたい
先にオチだけ言うとまだClionを購入していない人、そしてVSが嫌いじゃないって人はおとなしくVisualStudioを使ったほうが良いです。
何故なら文献も多く変な困り方をしないからです。
(その分後述のmsvcで苦しめられることはありますが)(言うて誤差)
これはあくまでVisualStudioに親を殺されたけどC++でゲームを作りたい人向けではあります。
さて、CLionでゲーム作りましょうってなった時に最初にぶちあたる壁が
Dxlibの動かし方です。
根気よく調べた人であればおそらく下の記事を見つけるかと思います。
正直、Dxlibを動かすだけならこれで全く問題ありません。
Effekseerなんて使わないよ!!って人はここで引き返してください。
ここから先の記事に何の意味もないので。
・改めて経緯説明
今回は「Effekseer」と呼ばれるエフェクト再生ツールを使いたいと考えたところから始まる。
このツールはよくできていてエフェクト作成未経験の人でもエフェクトを手軽に作れたりするのである。
しかもそれを手軽にゲーム内に取り込むことが出来ると来たら使わないわけにはいかないだろう。
ゲームプログラミングからエフェクトに関しての処理をごっそり消せるのだから。便利ったらありゃしない。分業できるわけだし。
ところが、ここで問題が起きる。
こちらのページでDxlib用のランタイムをDLしたときにとんでもないことが書かれていたのだ。
現在、VisualStudio 2017,2019専用です。
現在、VisualStudio 2017,2019専用です。
現在、VisualStudio 2017,2019専用です。
ゑ?
ここまで読んできた人なら気付いただろう。
そう、CLionでは使えないのだ。
もうすこし言い換えよう。MinGWでは使えないのだ。
自分も当初は最初に貼ったはてなブログでの記事の内容をそのままやったのでMinGWをインストールしてそれでビルドしていたのだ。
ビルド出来ないときたら作れないじゃん!!!!!!!!!!使えないじゃん!!!!!!!!!!!!!!!
そこからの試行錯誤の連続、正直これを解消するのに2か月は掛かった。
マジで2か月間返してほしい。
・検証したこと
ここに関しては答えを知りたいだけの人は見なくてもいいです。
まずそもそも前提知識として「MinGW」では.libファイルを取り扱えない。
もうすこし言えば「MinGW」で扱うのは「lib*.a」ファイル。
接頭辞にlibがついた拡張子aのファイル。
これに関してはDxlibを動かす時点で導入するので気付く方も多いはず。
まあ、うちは気付かなかったんやけど
そのため、自分が考えたのは「lib*.a」に変換できないか。
まあ、できなかったんですけどね。
reimpという「mingw-utils-0.3」に導入されているツールを使えば
libファイル内のobjをすべて.aファイルにしたうえでまとめてくれるというもの
結局それでまとめても読み込んでくれない。
読み込むときにもCMakeにいろいろ書き込んで試したんですけど何にもメモ残していないのでわからない。ただ、MinGWが読み取りに行こうとして失敗しているのだけ理解できた。
いや、めっちゃ怒られたよ。
ひとまず、reimpを何度も試してみたけどダメだったからあきらめて
teratailで探しましたよ。
それはそうとCLionってmsvc使えるように見えるのですが・・・
ゑ?
msvc、すなわちVisualStudioに使っているコンパイラやデバッガをCLionで使えるというのだ。
いや、MinGWを入れた意味よ。
うーーーん、仕方がないので入れることにしよう。
というわけでここから先が実際の対応方法。
・対応方法
まずはMSVCをインストールする。
この際に個人開発であれば「コミュニティ」からダウンロードして、それを開きます。
色々聞かれますがゲーム開発でおそらく必要なのは
・.NETデスクトップ開発
・C++によるデスクトップ開発
・ユニバーサルWindows プラットフォーム開発
・C++によるゲーム開発(正直いるのか微妙なところ)
の4つにチェックを入れてインストールします。
インストール後にCLionのSettingsを確認し上記のようになっていればOK
もしDebuggerに値が自動で入らない場合はCMakeのverが古い可能性があります。
画像と同じように3.19以降にすることを推奨します。
そもそもMSVCは最初から使えていたわけではないので2018年とかそこらへんだと無理だったはず。
次にCMakeLists.txtで
set(SOURCE_FILES main.cpp)
を
set(SOURCE_FILES WIN32 main.cpp)
に変更して、
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
add_executable(projectName ${SOURCE_FILES})
target_link_libraries(
projectName
DxLib
DxDrawFunc
zlib
vorbis_static
vorbisfile_static
ogg_static
opusfile
opus
silk_common
celt
)
を追記します。
target_link_librariesの中身はMinGWの時に書いていた内容を少し改変しただけになります。
改変した内容としては一度改変せずにビルドすればわかると思うんですが
一部のlibでmultiple definitionみたいな重複定義だとかそんな怒られ方をします。
実際のところわざわざCMakeListsで定義せずともほかのlibが読み込んでくれてるっぽいんですよ。なので、消したってだけですね。
そもそも使っていないから消したのパターンの可能性もあるので、もし動かないようであれば消した奴を一つずつ戻してみると良いかも。
そして、最後にDxlibとEffekseerの「プロジェクトに追加すべきファイル_VC用」の中身をlink_directoriesで指定しているフォルダに入れます。
(全部入れなくても大丈夫です。年書いてあるやつとか)
自分がやったのはあとはmainからリビルドすれば動くと思います。
正直、これに3か月も掛けるのは想定外でした。
いや、普通にMSVC使えば行けると思うじゃん。reimpじゃ無理だって発覚するまでに1か月かかってるんだもん。つらいごんふぁいあ
なんとか動くようになったからいいけど、
MinGW側だとやってくれてたint longの暗黙変換とかで
MSVCは全部警告出してきてめちゃくちゃうるせえの
しかも警告ってだけなので普通に動くんですよ。
気が向いたころに警告の消し方も調べるけど MSVCビルド遅い気がする。気のせいかな・・・
おかげでテストの時間がかかりまくって・・・うーーーん
今後ももしかしたら調べているときに詰まった内容を描いたり書かなかったりするかも。
次はボドゲ記事かなぁ・・・
書きたいものはあるし・・・いや、書きたいもの描かなきゃいけないものどっちもあるのでして・・・
??????
それではまたどこかで