Class: TonGraphics

2D画像の描画、テキスト描画、図形描画、ポストエフェクトなどを提供します。
基本的にすべての描画座標は「仮想解像度」に基づきます。
仮想的なウィンドウに描画し、最後に実際のウィンドウに拡大/縮小して描画します。
これにより、仮想解像度と実際の解像度を分離することができます。
※画像の登録ID、フォントID、レンダーターゲット名などのリソースキーは大文字小文字を区別しません。
※テクスチャリソースは「コンテンツグループID」によって管理され、グループ単位での手動/自動メモリ解放が行われます。

Structures

class TonDrawParam

基本的な描画オプション指定用クラスです。

class TonDrawParamEx

より詳細な描画オプション指定用クラスです。

class TonAnimState

アニメーション制御用クラスです。

class TonFilterParam

スクリーンフィルター指定用クラスです。

class TonBlendState

描画の合成モードを定義するクラスです。以下の静的プロパティが主に使用されます。

Properties

long TotalTextureMemory

現在ロードされているテクスチャ(フォント、レンダーターゲット含む)の推定メモリ使用量(バイト)を取得します。

Methods

Texture2D LoadTexture(string path, string keyName, string contentId = "Default")

画像を読み込み、キャッシュします。

void Unload(string contentId)

指定したコンテンツグループのリソースをすべて解放し、破棄します。
※"Default"グループは解放できません。

void SetCacheTimeout(double seconds)

未使用リソースグループの自動破棄(キャッシュアウト)までの時間を設定します。
デフォルトは300秒(5分)です。
この時間を過ぎても使用されなかった非デフォルトグループ(contentId != "Default")は、定期的なメモリクリーンアップ時に破棄されます。

int GetTextureWidth(string name)

指定した画像(またはレンダーターゲット)の幅を取得します。見つからない場合は0を返します。

int GetTextureHeight(string name)

指定した画像(またはレンダーターゲット)の高さを取得します。見つからない場合は0を返します。

void Clear(Color? color = null)

現在の描画先(画面またはレンダーターゲット)を指定色で塗りつぶしてクリアします。
注意: 描画処理は遅延実行(バッチ処理)されるため、Draw メソッドの後に Clear を呼ぶと、 Draw で予約した内容ごと消去されてしまう(あるいは Clear の上に描画されるなど、意図しない挙動になる)場合があります。
必ず フレームの最初(描画を行う前) に呼び出してください。

void Draw(string imageName, int toX, int toY, int fromX, int fromY, int w, int h, TonDrawParam param = null)

登録済みの画像を描画します。

以下のオーバーロードが存在します。

void DrawBackground(string imageName, TonDrawParam param = null)

画像をアスペクト比を維持しつつ、画面全体を覆うように拡大して描画します(Aspect Fill)。
余白ができないように、中央寄せで配置され、上下または左右のはみ出した部分はクリップされます。

void DrawEx(string imageName, float toX, float toY, int fromX, int fromY, int w, int h, TonDrawParamEx param)

詳細なパラメータを指定して画像を描画します(中心座標基準)。

void DrawAnim(string imageName, int x, int y, TonAnimState anim, TonDrawParam param = null)

アニメーション定義に基づいて画像の一部を切り出して描画します。

void DrawAnimEx(string imageName, float x, float y, TonAnimState anim, TonDrawParamEx param)

アニメーション描画の詳細版です(中心座標基準)。

void DrawText(string text, int x, int y, Color? color = null, float scale = 1.0f, string fontId = null)

テキストを描画します。

以下のオーバーロードが存在します。

void DrawTextEx(string text, float x, float y, Color? color = null, float scale = 1.0f, float rotation = 0f, string fontId = null)

テキストを回転・拡大縮小して描画します(中心座標基準)。

void LoadFont(string path, string name)

フォントファイル(.spritefont)を読み込みます。
デフォルトのフォントを使用する場合は ID に "default" を指定してください。

void FillRect(float x, float y, float w, float h, Color color)

塗りつぶされた矩形を描画します。

void DrawRect(int x, int y, int w, int h, Color color, int thickness = 1)

矩形の枠線を描画します。

void DrawLine(Vector2 start, Vector2 end, Color color, float thickness = 1f)

2点間の直線を描画します。

void FillRoundedRect(string imageName, int x, int y, int w, int h, int pw, int ph)

9パッチ画像を使用して角丸矩形(ウィンドウ枠など)を描画します。

void ShakeScreen(float seconds, float ratioX, float ratioY)

画面全体を振動させます。

void SetAntiAliasing(bool enabled)

描画時のアンチエイリアス(スムージング)の有効・無効を切り替えます。
ドット絵をくっきり表示したい場合は false に設定してください。
注意: 設定は 次回の描画バッチ(SetBlendStateやSetRenderTargetの呼び出し、または次フレームの開始時)から 有効になります。描画の途中で切り替える場合は注意してください(直後の描画に反映されない場合があります)。

void SetScreenFilter(string targetName, TonFilterParam param)

画面またはレンダーターゲットにフィルター(ポストエフェクト)を適用します。
注意: メインスクリーン(targetName=null)へのフィルタは そのフレームの全描画が完了した後(ポストエフェクトとして)、 レンダーターゲットのフィルタは そのターゲットを描画する際 に適用されます。
複数のフィルタを適用したい場合は、AddScreenFilter を使用するか、SetScreenFilter を呼んだ後に AddScreenFilter を追加してください。(SetScreenFilter は既存のフィルタをクリアします)

以下のオーバーロードが存在します。

void AddScreenFilter(string targetName, TonFilterParam param)

画面またはレンダーターゲットにフィルターを追加します。
既存のフィルターリストの末尾に追加され、順番に適用されます(マルチパスフィルタ)。

以下のオーバーロードが存在します。

void ClearScreenFilter(string targetName = null)

指定したターゲットに設定されている全フィルターを解除します。

void SetBlendState(TonBlendState blend)

描画の合成モードを変更します(加算合成など)。呼び出すと現在のバッチが描画され、新しいバッチが開始されます。

TonBlendState GetBlendState()

現在設定されているブレンドステートを取得します。

void SetRenderTarget(string targetName = null)

描画先を切り替えます。nullを指定すると仮想画面(メインスクリーン)に戻ります。

void CreateRenderTarget(string targetName, int width, int height)

新しいレンダーターゲット(オフスクリーン描画領域)を作成します。
登録した targetName は、Draw メソッドなどの imageName としてそのまま指定でき、テクスチャとして描画可能です。

void ReleaseRenderTarget(string targetName)

作成したレンダーターゲットをメモリから解放します。

void DebugSaveFontTexture(string savePath, string id = null)

(デバッグ用)指定したフォントのテクスチャをPNG画像として保存します。

Sample Code

// In Initialize()
// Load texture 'player.png' from Content/image/player.png and register as 'player'
// Loaded into "Default" group (permanent)
Ton.Gra.LoadTexture("image/player", "player");

// Load texture into specific group "Stage1"
Ton.Gra.LoadTexture("image/enemy", "enemy", "Stage1");

// Create Animation State
var anim = new TonAnimState { 
    width = 32, height = 32, FrameCount = 4, FrameDuration = 100,
    IsLoop = true
};


// In Update()
// Update animation state
anim.Update(gameTime); 

if (player.IsDamaged)
{
    // Apply Screen Shake (Duration 0.5s, Magnitude 5px, Frequency 20Hz)
    Ton.Gra.ShakeScreen(0.5f, 5.0f, 20.0f);
}


// In Draw()
// Simple Draw at (100, 100). Size assumed 32x32 from src(0,0).
var tex = Ton.Gra.LoadTexture("player", "player"); // LoadTexture returns cached texture if already loaded
if (tex != null)
{
    Ton.Gra.Draw("player", 100, 100, 0, 0, tex.Width, tex.Height);
}

// Draw with Parameter (Flip Horizontal, Red Tint, 50% Alpha)
var param = new TonDrawParam() { FlipH = true, Color = Color.Red, Alpha = 0.5f };
Ton.Gra.Draw("player", 200, 100, 0, 0, 32, 32, param);

// Draw Animation
Ton.Gra.DrawAnim("player_sheet", 300, 100, anim);

// Draw Text using default font
Ton.Gra.DrawText("Hello World", 10, 10);
// Draw Text with custom font
Ton.Gra.DrawText("Title Text", 10, 50, "TitleFont");

// Fill Screen with semi-transparent black
Ton.Gra.FillRect(0, 0, 640, 360, new Color(0, 0, 0, 128));

// Apply Sepia Filter to Main Screen (Sets state for this frame's post-processing)
Ton.Gra.SetScreenFilter(new TonFilterParam(ScreenFilterType.Sepia, 1.0f));

// Layer System Example (Manual RenderTarget)
// 1. Switch to a render target (automatically created if not exists)
Ton.Gra.SetRenderTarget("EffectLayer");
    Ton.Gra.Clear(Color.Transparent); // Clear layer
    Ton.Gra.Draw("char", 0, 0); 
    Ton.Gra.DrawText("Hello Filter", 0, 50); // Text can be filtered too!

// 2. Revert to main screen
Ton.Gra.SetRenderTarget();

// 3. Set filter to the layer
Ton.Gra.SetScreenFilter("EffectLayer", new TonFilterParam(ScreenFilterType.Distortion, 0.5f));

// 4. Draw the layer to screen
Ton.Gra.Draw("EffectLayer", 100, 100, 0, 0, Ton.Gra.GetTextureWidth("EffectLayer"), Ton.Gra.GetTextureHeight("EffectLayer"));

// Draw Additive Blending (e.g. for particles)
Ton.Gra.SetBlendState(TonBlendState.Additive);
Ton.Gra.Draw("sparkle", 400, 200, 0, 0, 16, 16);
Ton.Gra.SetBlendState(TonBlendState.AlphaBlend); // Revert