こんにちは。アサノです。
仕事の忙しさが相まって更新が遅れてしまい申し訳ございません。
本記事はraylibを導入するにあたって実際に経験した内容のpart1になります。
内容をいくつかにわけて記事にしようと思いますので、よければご覧ください。
始めに
私は個人開発で良くUnityを使用しているのですが、ふと衝突処理や物理演算などを自分で書きたいなと考えました。
そこで調べてみたところ、raylibと呼ばれるフレームワークがあるとのことでしたので、
導入からプログラムをするまでの環境作りをしてみようかなと考えた次第です。
今回は導入直後の状態で記述されている各関数について記載していこうと思います。
実際に起動してみる。
他有志様方が記載してくださった手法を元に、導入が完了。
起動してみるとこんな感じに表示がされました。
mainファイルが見つからない。
続いて、表示されたウィンドウや画像、テキストがどこで描画されているのかを調べるため、
処理が記載されているであろう、[main.cpp]を検索してみました。
HITしません。
なんでだろうと思い、調べてみると、
raylibはC言語で作られたライブラリであるため拡張子が、[.cpp]ではなく[.c]でファイルが作成されているとのことでした。
拡張子である[.c]を[.cpp]に書き換えた後、実際に描画処理やウィンドウの作成処理などを確認してみました。
最初から存在する、主な関数の紹介
起動時に記載されていた処理はいくつかありました。
一つずつ紹介していきます。
InitWindow
//ウィンドウ作成
InitWindow(800, 600, "Hello Raylib");
その名前のとおり、ウィンドウを作成してくれる関数です。
引数にはウィンドウサイズとウィンドウに表示されるテキストを入力する必要があります。
今回はまず使える様にする所から始めようと思いますので、中身を詳しく読むのは一旦後回しとさせていただきました。
どうやら中の処理ではTraceLogというマクロ(バージョンによっては関数)も呼び出しているようで、raylibのバージョンをログに出力してくれる機能もあるようです。
SearchAndSetResourceDir
//読み込むリソース先を指定
SearchAndSetResourceDir("resources");
読み込み先のとなるカレントフォルダの名前を引数に入力することで、
読み込むリソース先を指定できる関数です。
中身を少し確認したところ、ChangeDirectoryなどが内部で呼び出されており、
読み込めない場合はfalseを返してくれるようです。
BeginDrawingとEndDrawing
//描画開始
BeginDrawing();
//描画終了
EndDrawing();
描画処理の開始と終了を管理してくれる関数です。
BeginとEndの間に後述する描画処理であるDrawTextureExを記載することで、
画像が表示されます。
LoadTextureとDrawTextureEx
//画像の読み込み
Texture2D Hakotan = LoadTexture("Hakotan.png");
//画像を描画
DrawTextureEx(Hakotan, { 400, 200 }, 1, 0.3f, WHITE);
//画像の解放
UnloadTexture(Hakotan);
画像の読み込み処理と描画、解放処理になります。
読み込みの開始地点は前述したSearchAndSetResourceDirの引数に入力したフォルダになります。
LoadTextureの引数には読み込みたい画像ファイル名を記述します。
DrawTextureExの引数は(Texture型の変数、座標、角度、スケール、色)となっています。
LoadTextureの引数には拡張子の入力が必要です。
また、テクスチャの読み込みを行うさいは必ずUnloadTextureで解放処理を呼び出す必要がありますので、忘れないように注意しましょう。
DrawText
DrawText("Hello Raylib", 200,200,20,WHITE);
最後に文字の出力用関数です
引数は(描画したい文字列、座標、フォントサイズ、文字色)
となっています。
どうも中身を軽く拝見した所、実際の描画処理はDrawTextExが行っているようで、
フォントの指定をしなくて良い、ラッパー関数になっていました。
また、先に記述するのですが、このDrawTextはデフォルトの状態では日本語に対応していません。
私も色々と調べて試したのですが上手く出来ず、どんな方法で試したのかなどをパートの最後におまけとして記載しようと思います。
次回の内容
今回は導入直後に記載されている処理を中心に記述をおこないました。
正直、ウィンドウ作成やテキスト、画像の表示などが簡単に行え、
行列計算なども必要無かったのはすこしホッとしました。
現在の状態だとmain.cppに全ての処理を記載する事となってしまい、処理が見づらいため、次回はゲームシーンと基底クラスを作成します。
それが完了しましたら、私が日本語の導入を行おうとして失敗してしまったお話を記述させていただこうと思います。

