citro2dとは?
CFW3DSのソフト開発で使う描画ライブラリです!
今回こちらを使ってツールを作ろうとしたんですが、なかなかサンプルが見つからなかったり、
見つかったと思ってもそのサンプルに使われている関数が使えなかったりで苦戦しておりました。
しかしなんとかcitro2dを使用して簡単な描画をすることができましたので、そのコードをここにサンプルとして公開しようと思います!
左上に文字列、右上に大きな円を描画するものとなってます!
【devkitProインストール済み前提】
※使用等は自己責任でお願いします…
main.cpp
#include <3ds.h> // 3DSの基本機能(入力、グラフィック等)用
#include <citro2d.h> // 2D描画ライブラリ用
int main(int argc, char *argv[])
{
// --- 初期化処理 ---
gfxInitDefault(); // 標準のグラフィック機能を初期化
C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); // 3Dエンジン(citro3d)の初期化
C2D_Init(C2D_DEFAULT_MAX_OBJECTS); // 2D描画ライブラリ(citro2d)の初期化
C2D_Prepare(); // 描画の準備
// 上画面(右側・通常は3Dモードでなければ1つ)のターゲットを作成
C3D_RenderTarget *top = C2D_CreateScreenTarget(GFX_TOP, GFX_RIGHT);
// シーンのサイズを設定(上画面の解像度 400x240)
C2D_SceneSize(400, 240, false);
// テキスト描画用のバッファを作成
C2D_TextBuf buf = C2D_TextBufNew(4096);
C2D_Text text;
// --- メインループ ---
while (aptMainLoop())
{
// 本体の入力をスキャン
hidScanInput();
// 押されているボタンの状態を取得
u32 kDown = hidKeysHeld();
// テキストバッファをクリアして新しくパース(解析)する
C2D_TextBufClear(buf);
C2D_TextParse(&text, buf, "HELLO C2D !");
C2D_TextOptimize(&text); // 描画を最適化
// --- 描画開始 ---
C3D_FrameBegin(C3D_FRAME_SYNCDRAW); // フレーム開始
C2D_SceneBegin(top); // 上画面への描画開始
C2D_TargetClear(top, C2D_Color32(0, 0, 0, 255)); // 背景を黒で塗りつぶし
// 円の色を定義(R, G, B, Alpha)
u32 clr0 = C2D_Color32(100, 200, 50, 255);
// 塗りつぶしの円を描画(x, y, z深度, 半径, 色)
C2D_DrawCircleSolid(300.0f, 70.0f, 0.0f, 50.0f, clr0);
// テキストを描画(text, オプション, x, y, z深度, スケールX, スケールY, 色)
C2D_DrawText(
&text,
C2D_WithColor,
20.0f, 20.0f, 0.0f,
0.5f, 0.5f,
C2D_Color32(100, 200, 205, 255));
C3D_FrameEnd(0); // フレーム終了(画面の更新)
// --- 描画終了 ---
// STARTボタンが押されたらループを抜ける(Homebrew Menuへ戻る)
if (kDown & KEY_START)
break;
}
// --- 終了処理 ---
C2D_TextBufDelete(buf); // テキストバッファの解放
C2D_Fini(); // citro2dの終了
C3D_Fini(); // citro3dの終了
gfxExit(); // グラフィック機能の終了
return 0;
}
※コメントはGeminiに書いてもらいました
あなたの開発がうまくいきますように!
