surface_create 関数で surface を作ったら、その surface を Draw の「ターゲット」に指定します。

このエントリーをはてなブックマークに追加

if !surface_exists(User_Defined_Surface) //常に確認、無ければ作る
{
    var sw,sh; sw=400; sh=200; // 矩形領域の大きさを定義
    User_Defined_Surface = surface_create(sw,sh); // Surface を作る
    surface_set_target(User_Defined_Surface); // ターゲットにセット
    draw_clear_alpha(c_blue,1); // ターゲットを draw で塗りつぶす
    draw_text(0,0, "Try Draw"); // 試しに文字も書いてみた
    surface_reset_target(); // ターゲットを解放
}
else // Application Surface への処理として
{
    draw_surface(User_Defined_Surface,mouse_x,0); // 指定 surface を描画
};

Draw 関数は通常だと Application Surface に対してターゲットが定められているので、ターゲット切り替えを行わない場合は常に Application Surface へ描画を行います。

ターゲットの切り替えは

    surface_set_target(User_Defined_Surface);

このように指定します。

これ以降、draw 関数は一時的にターゲットを surface に移して描画を行う機能となります。座標系もここからは一時的にターゲットが基準となり、ターゲットの矩形領域内における xy 座標を入力します。

surface への Draw が済んだら、速やかにターゲットを解放。

    surface_reset_target();

関数に引数は不要で、Application Surface にターゲットが返されました。

これで surface の作成は終了。GPU メモリ上にリソースとして surface が存在するようになりました。

次の step からは if else の内 else に処理が渡り

    draw_surface(User_Defined_Surface,mouse_x,0);

この draw_surface でユーザ定義 surface が application surface の上にレイヤーとして描画されます。surface の描画位置は毎回指定。

このサンプルではマウスのX座標にだけ追従する。

surface はゲーム実行中に GM:Studio の描画機能を使って GPU メモリ上へスプライト的なリソースとしてテクスチャを作成する機能とも言えます。

次のページへ

Leave a Reply

Your email address will not be published. Required fields are marked *