Class: TonGraphics
2D画像の描画、テキスト描画、図形描画、ポストエフェクトなどを提供します。
基本的にすべての描画座標は「仮想解像度」に基づきます。
仮想的なウィンドウに描画し、最後に実際のウィンドウに拡大/縮小して描画します。
これにより、仮想解像度と実際の解像度を分離することができます。
※画像の登録ID、フォントID、レンダーターゲット名などのリソースキーは大文字小文字を区別しません。
※テクスチャリソースは「コンテンツグループID」によって管理され、グループ単位での手動/自動メモリ解放が行われます。
Structures
基本的な描画オプション指定用クラスです。
float Alpha: 不透明度 (0.0~1.0)。(既定値 1.0)Color Color: 乗算する色。(既定値 White)bool FlipH: 左右反転するか。(既定値 false)bool FlipV: 上下反転するか。(既定値 false)
より詳細な描画オプション指定用クラスです。
float ScaleX: X軸方向の拡大率。(既定値 1.0)float ScaleY: Y軸方向の拡大率。(既定値 1.0)float Angle: 回転角度(ラジアン)。(既定値 0.0)float Alpha: 不透明度。(既定値 1.0)Color Color: 乗算する色。(既定値 White)bool FlipH: 左右反転するか。(既定値 false)bool FlipV: 上下反転するか。(既定値 false)float MosaicSize: モザイクサイズ(注: 現在の実装では詳細パラメータとしてのモザイクは未サポートの可能性があります)。
アニメーション制御用クラスです。
bool IsLoop: ループ再生するか。(既定値 true)int FrameCount: アニメーションの総フレーム数。int FrameDuration: 1フレームの表示時間(ms)。float Timer: 現在のフレーム経過時間(秒)。(Read Only)int CurrentFrame: 現在のフレームインデックス。(Read Only)float TimeAfterFinished: アニメーション終了後の経過時間(秒)。(Read Only)bool IsFinished: アニメーション再生が完了しているか(非ループ時のみ有効)。(Read Only)int x1, y1: 画像上の切り出し開始座標(左上)。int width, height: 1フレームの幅と高さ。AnimDirection direction: アニメーションの並び方向。(LeftToRight または TopToBottom)void Update(GameTime gameTime): アニメーションの時間を進めます。必ずシーンのUpdate()メソッド内で毎フレーム呼び出してください。呼び出さないとアニメーションが停止したままになります。void Reset(): アニメーション状態(タイマー、フレーム、終了時間)を初期化します。static TonAnimState CreateLoop(int width, int height, int frameCount, int duration, double totalSeconds, int x1 = 0, int y1 = 0): 時刻からフレームを計算した状態を生成します。Update不要でDraw内で完結する簡易アニメーション用。
スクリーンフィルター指定用クラスです。
ScreenFilterType Type: フィルタの種類。- None: なし
- Greyscale: グレースケール
- Sepia: セピア
- ScanLine: 走査線(スキャンライン)
- Mosaic: モザイク
- Blur: ブラー(ぼかし)
- ChromaticAberration: 色収差
- Vignette: ビネット(周辺減光)
- Invert: 階調反転
- Distortion: 歪み(揺らぎ)
- Noise: ノイズ
- EdgeDetect: エッジ検出
- RadialBlur: ラジアルブラー(放射状ぼかし)
- Posterize: ポスタライズ(階調変更)
- FishEye: 魚眼レンズ
float Amount: 適用強度。フィルタの種類によって意味合いが異なりますが、概ね 0.0~1.0 の範囲で指定します(Blurなどはピクセル単位の強度になる場合もあります)。
描画の合成モードを定義するクラスです。以下の静的プロパティが主に使用されます。
TonBlendState.AlphaBlend: 通常の透過合成 (既定値)TonBlendState.Additive: 加算合成 (光の表現など)TonBlendState.NonPremultiplied: アルファ乗算済みでない画像の合成TonBlendState.Opaque: 不透明 (上書き)
Properties
現在ロードされているテクスチャ(フォント、レンダーターゲット含む)の推定メモリ使用量(バイト)を取得します。
Methods
画像を読み込み、キャッシュします。
path: コンテンツパス(Content/image/からの相対パス、拡張子なし)keyName: 登録名(必須)contentId: コンテンツグループID。指定したIDごとにリソースがグループ化されます。"Default"グループは自動解放されません。(既定値 "Default")
指定したコンテンツグループのリソースをすべて解放し、破棄します。
※"Default"グループは解放できません。
contentId: アンロード対象のコンテンツグループID
未使用リソースグループの自動破棄(キャッシュアウト)までの時間を設定します。
デフォルトは300秒(5分)です。
この時間を過ぎても使用されなかった非デフォルトグループ(contentId != "Default")は、定期的なメモリクリーンアップ時に破棄されます。
指定した画像(またはレンダーターゲット)の幅を取得します。見つからない場合は0を返します。
指定した画像(またはレンダーターゲット)の高さを取得します。見つからない場合は0を返します。
現在の描画先(画面またはレンダーターゲット)を指定色で塗りつぶしてクリアします。
注意: 描画処理は遅延実行(バッチ処理)されるため、Draw メソッドの後に Clear を呼ぶと、
Draw で予約した内容ごと消去されてしまう(あるいは Clear の上に描画されるなど、意図しない挙動になる)場合があります。
必ず フレームの最初(描画を行う前) に呼び出してください。
color: クリアする色(省略時はColor.Black)
登録済みの画像を描画します。
imageName: 画像の登録IDtoX,toY: 描画先座標 (左上基準)fromX,fromY: 描画元画像の切り出し開始位置(左上)w,h: 描画するサイズ(幅・高さ)param: 描画オプション
以下のオーバーロードが存在します。
Draw(string imageName, int toX, int toY, TonDrawParam param = null): 画像全体をそのサイズのまま、指定座標に描画します。
画像をアスペクト比を維持しつつ、画面全体を覆うように拡大して描画します(Aspect Fill)。
余白ができないように、中央寄せで配置され、上下または左右のはみ出した部分はクリップされます。
imageName: 画像の登録IDparam: 描画オプション(色や反転など)
詳細なパラメータを指定して画像を描画します(中心座標基準)。
imageName: 画像の登録IDtoX,toY: 描画座標 (中心基準)fromX,fromY: 描画元画像の切り出し開始位置(左上)w,h: 描画するサイズparam: 拡張描画オプション(回転、スケール、反転など)
アニメーション定義に基づいて画像の一部を切り出して描画します。
imageName: 画像の登録IDx,y: 描画座標 (左上基準、整数)anim: アニメーション状態param: 描画オプション
アニメーション描画の詳細版です(中心座標基準)。
imageName: 画像の登録IDx,y: 描画座標 (中心基準)anim: アニメーション状態param: 拡張描画オプション
テキストを描画します。
text: 文字列x,y: 描画座標color: 文字色(nullの場合はWhite)scale: 拡大率(既定値 1.0)fontId: フォントID(nullの場合はデフォルトフォント)
以下のオーバーロードが存在します。
DrawText(string text, int x, int y): 白、等倍、デフォルトフォントDrawText(string text, int x, int y, string fontId): 白、等倍、指定フォントDrawText(string text, int x, int y, float scale): 白、指定倍率、デフォルトフォントDrawText(string text, int x, int y, string fontId, float scale): 白、指定倍率、指定フォントDrawText(string text, int x, int y, string fontId, Color color): 指定色、等倍、指定フォント
テキストを回転・拡大縮小して描画します(中心座標基準)。
text: 文字列x,y: 描画座標(中心)color: 文字色scale: 拡大率rotation: 回転角度(ラジアン)fontId: フォントID
フォントファイル(.spritefont)を読み込みます。
デフォルトのフォントを使用する場合は ID に "default" を指定してください。
path: コンテンツパス(例: "font/default")name: 登録ID
塗りつぶされた矩形を描画します。
x,y: 座標w,h: 幅と高さcolor: 色
矩形の枠線を描画します。
x,y: 座標w,h: 幅と高さcolor: 色thickness: 線の太さ(デフォルト: 1)
2点間の直線を描画します。
start: 開始点end: 終了点color: 色thickness: 線の太さ(デフォルト: 1)
9パッチ画像を使用して角丸矩形(ウィンドウ枠など)を描画します。
imageName: 9パッチ画像の登録IDx,y: 座標w,h: 全体の幅と高さpw,ph: 角パーツの幅と高さ(9分割の隅のサイズ)
画面全体を振動させます。
seconds: 持続時間(秒)ratioX: 横方向の揺れの強さ (0.0 ~ 1.0)ratioY: 縦方向の揺れの強さ (0.0 ~ 1.0)frequency: 振動数 (回/秒)。デフォルト: 20.0f
描画時のアンチエイリアス(スムージング)の有効・無効を切り替えます。
ドット絵をくっきり表示したい場合は false に設定してください。
注意: 設定は 次回の描画バッチ(SetBlendStateやSetRenderTargetの呼び出し、または次フレームの開始時)から
有効になります。描画の途中で切り替える場合は注意してください(直後の描画に反映されない場合があります)。
enabled:true=有効(滑らか),false=無効(ドット重視)。初期値はtrueです。
画面またはレンダーターゲットにフィルター(ポストエフェクト)を適用します。
注意: メインスクリーン(targetName=null)へのフィルタは そのフレームの全描画が完了した後(ポストエフェクトとして)、
レンダーターゲットのフィルタは そのターゲットを描画する際 に適用されます。
複数のフィルタを適用したい場合は、AddScreenFilter を使用するか、SetScreenFilter を呼んだ後に
AddScreenFilter を追加してください。(SetScreenFilter は既存のフィルタをクリアします)
targetName: 適用するターゲット名。nullを指定するとメインスクリーンに適用されます。param: フィルターのパラメータ
以下のオーバーロードが存在します。
void SetScreenFilter(TonFilterParam param): メインスクリーンに適用します。
画面またはレンダーターゲットにフィルターを追加します。
既存のフィルターリストの末尾に追加され、順番に適用されます(マルチパスフィルタ)。
targetName: 適用するターゲット名。param: フィルターのパラメータ
以下のオーバーロードが存在します。
void AddScreenFilter(TonFilterParam param): メインスクリーンに追加します。
指定したターゲットに設定されている全フィルターを解除します。
targetName: ターゲット名(nullの場合はメインスクリーン)。
描画の合成モードを変更します(加算合成など)。呼び出すと現在のバッチが描画され、新しいバッチが開始されます。
blend: TonBlendState (Additive, AlphaBlendなど)
現在設定されているブレンドステートを取得します。
描画先を切り替えます。nullを指定すると仮想画面(メインスクリーン)に戻ります。
targetName: レンダーターゲットの登録ID
新しいレンダーターゲット(オフスクリーン描画領域)を作成します。
登録した targetName は、Draw メソッドなどの imageName
としてそのまま指定でき、テクスチャとして描画可能です。
targetName: レンダーターゲット(画像)の登録IDwidth,height: サイズ
作成したレンダーターゲットをメモリから解放します。
targetName: 登録ID
(デバッグ用)指定したフォントのテクスチャをPNG画像として保存します。
savePath: 保存パス(相対パス可)id: フォントID(nullの場合はデフォルトフォント)
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