GameMaker 日本語掲示板

構造体引数

0 コメント
views
17 フォロー

構造体を引数にするとちょっとだけ便利かもと思い共有

オブジェクトの画像を回転させて表示したい時にdraw_sprite_ext関数を使うのですが、
角度のみを変えたいのに他の余計な引数の入力があって面倒です。

var angle = 30;
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,angle,image_blend,image_alpha);

そんな時に構造体を引数にした新しい関数を作成すると少しだけ便利になります。

function draw_sprite_with_struct(params)
{
        //params構造体にspriteという名前の変数が定義されていない場合はsprite_index代入。定義されていれば構造体のspriteを代入。
    var sprite = params[$ "sprite"] ?? sprite_index;
    var subimg = params[$ "sugimg"] ?? image_index;
    var xx = params[$ "x"] ?? x;
    var yy = params[$ "y"] ?? y;
    var xscale = params[$ "xscale"] ?? image_xscale;
    var yscale = params[$ "yscale"] ?? image_yscale;
    var rot = params[$ "rot"] ?? image_angle;
    var col = params[$ "col"] ?? image_blend;
    var alpha = params[$ "alpha"] ?? image_alpha;
    
    draw_sprite_ext(sprite,subimg,xx,yy,xscale,yscale,rot,col,alpha);
}

この関数は特定の引数の値のみを構造体として用意するだけで画像を描画できるようになります。

//角度のみ変更して表示するパターン
var params = {rot : 45}
draw_sprite_with_struct(params);

//Scaleのみを変更して表示するパターン(一時変数なし)
draw_sprite_with_struct({xscale : 2,yscale : 2});

ただしデメリットがあります。
① 引数名はFeatherの補間がないのでタイプミスしやすく、引数名を覚えてないといけない。
② タイプミスしても、エラーにはならない。

ただ①に関してはJSDocを利用すれば多少は改善できます。
関数定義の行番号の横にマウスを持っていくと、羽マークが現れて、クリックすると自動でJSDocが生成されます。
params以降の部分に必要な引数の名前を列挙しておけば、関数呼び出しの際にFeatherが表示してくれます。

/**
 * @param {struct} params (sprite,subimg,x,y,xscale,yscale,rot,col,alpha)
 */
function draw_sprite_with_struct(params)
{
}

ちなみに標準の関数にも構造体を引数にする関数がすでに存在します。

var params = {sound : seTest, loop : false}
audio_play_sound_ext(params);
生高橋
作成: 2023/06/05 (月) 18:16:33
最終更新: 2023/06/06 (火) 10:24:30
通報 ...