GameMaker 日本語掲示板

便利な自作スクリプトを教えてください

24 コメント
views
17 フォロー

例えば以下の引数の文字or数値を連結させて表示するdebug_logスクリプト

debug_log() {
    var str = "";
    for(var i = 0; i < argument_count; i++) {
        str += string(argument[i]);
        str += " ";
    }

    show_debug_message(str);
} 

利用法

var x = 10;
debug_log("x:",x);

実行結果

x : 10

これはどっかの受け売りですが、こんな感じで便利にしているスクリプトがあればぜひ教えてください。

生高橋
作成: 2020/12/10 (木) 20:24:05
最終更新: 2020/12/10 (木) 20:26:49
通報 ...
2

gamemakerのround()は銀行丸めですが、四捨五入したいとき。

/// @desc scr_math_round();
/// @param {number} number

return	(argument0 + 0.5) div 1;
3
生高橋 2020/12/11 (金) 03:54:57 >> 2

銀行丸めがなんのかわからなくてググりました。
gamemakerのroundそうなってるんですね。これ結構計算処理変わってくるのでびびってますw

4
asa 2020/12/11 (金) 18:10:10 修正

x座標をグリッドのセンターにスナップさせて返すスクリプト
これのy座標版も作って、オブジェクトをグリッド(タイル)の中心に置くときとかに使います
GRID_SIZEは定数です(32とか)

/// @ desc scr_x_to_grid_center();
/// @param {num} x
/************************************************************
desc
指定したx座標に一番近いグリッドセンターのx座標を返す

return : number
************************************************************/
return  argument0 div GRID_SIZE * GRID_SIZE + GRID_SIZE/2;
5

インスタンスの情報を表示するスクリプト
デバッグのために、drawイベントで使います
表示する項目は適宜追加したりして使ってます。

/// @ desc scr_dev_instance_info();
/// @param {num} x
/************************************************************
desc
インスタンスの情報を表示する

return : n/a
************************************************************/
draw_text(x, y+10, "id: "+string(id));
draw_text(x, y+20, "loc: "+string(x)+","+string(y));
draw_circle(x, y, 2, false);
6
生高橋 2020/12/16 (水) 01:29:32 >> 5

こういうの毎回打ち直してたりしてました...
関数のコメントの部分参考になります

8
show_debug_message("id="+string(id)+" loc="+string(x)+","+string(y));

など、よく使うのをsnippetに登録するのも便利ですね

9
生高橋 2020/12/18 (金) 01:11:15 >> 6

snippetの存在も完全に忘れてましたw

10
ぽんでり 2021/01/24 (日) 20:53:33

簡単ですいませんがビューの真ん中の座標を返すスクリプト

/===============================================================================
描画の対象となるビューのX方向の中央にスプライトやテキストを描画するための
X座標を返すスクリプト。引数に対象となるビューの番号と描画対象物の横幅を入れる。
================================================================================
/

function center_xpos(view_number, width){
var xpos = view_get_wport(view_number) /2 - width /2
return xpos
}

14

こういうのってつくっておくと開発するときめっちゃ捗るので大事です

11
ぽんでり 2021/01/24 (日) 20:55:05

あれ、皆様みたいに枠内にソースを入れるのってどうすれば良いのでしょう??

12

バッククォートを3つ
コード
バッククォートを3つ

でこうなります

abc
13
ぽんでり 2021/01/24 (日) 22:50:03

ありがとうございます!

15
生高橋 2021/02/04 (木) 14:58:07

GMSの便利な5つのスクリプト(英語動画)

この中のapproach関数はいろんなソースコードで見ますね。

16
asa 2021/02/11 (木) 01:37:57 修正

トップダウンビューで360度の角度を方向(方角)に変換したい時などに使えます。

// directionを4方向(0-3)に変換する場合
round(direction / 90) mod (360 / 90);

// directionを8方向(0-7)に変換する場合
round(direction / 45) mod (360 / 45);
17
ぽんでり 2021/03/12 (金) 02:27:20

上に書いたビューのX方向(ヨコ方向)の真ん中を返すスクリプト、念の為argumentを使うように直しておきます。おかしくなるかもしれないので。(そういうので引っかかることありますよねえ)

/// @description center_xpos(view_number, drawing_width) return center x-position.
/// @param view_number
/// @param drawing_width

	/*===============================================================================
		描画の対象となるビューのX方向(ヨコ)の中央にスプライトやテキストを描画するための
		X座標を返すスクリプト。引数に対象となるビューの番号と描画対象物の横幅を入れる。
	================================================================================*/
	
function center_xpos(argument0, argument1){
	var view_number = argument0;
	var drawing_width = argument1;
	
	var xpos = view_get_wport(view_number) /2 - drawing_width /2
	return xpos;
}
18
ぽんでり 2021/03/12 (金) 02:36:19

ついでに似たやつ。プロジェクトのとっかかりに配置バランスを見たりするのに使います。

/// @description draw_center_v_line(view_number,color)
/// @param view_number
/// @param color

	/*===============================================================================
		ビューのヨコ中央にタテ線を描画するためのスクリプト。
		引数に対象となるビューの番号と色を入れる。
		色は c_XX でビルトイン定義されているものか、make_color_rgb() で定義したものを使う。
			※別スクリプト、cener_xpos()が必要
	================================================================================*/
function draw_center_v_line(argument0, argument1){
	var view_number = argument0;
	var color = argument1;
	var line_thickness = 1;	//垂直ラインの線幅
	var xpos = center_xpos(view_number, line_thickness);
	
	draw_line_width_color(xpos, 0, xpos, view_get_hport(view_number), line_thickness, color, color);
}
19
生高橋 2021/09/15 (水) 23:42:58

指定した数値が範囲内かどうかを返す関数

function in_range(val,min,max) 
{
  return val >= min && val <= max;
}
20

小数点以下を指定の桁数で丸める関数

function round_decimal(_value,_decimal_places){
	return round(_value / _decimal_places) * _decimal_places;
}

1.2345678 のような小数点以下の桁数が長い数値を、指定の桁数でカットできます。
round_decimal(1.2345678, 0.1) → 1.2
round_decimal(1.2345678, 0.01) → 1.23
round_decimal(1.2345678, 0.001) → 1.234

更にこの関数は小数点に限らず、例えば5刻みで数値を丸めるなどもできます。
round_decimal(12, 5) → 10
round_decimal(19, 5) → 20

21
生高橋 2021/09/17 (金) 00:06:45 >> 20

後者の例でめっちゃ使ってたんですけど関数化してなかったやつです!
そういえば小数点を丸めるのにも使えるのか!

22
asa 2022/06/10 (金) 10:50:47 修正

指定した座標とspriteで、原点とBBOXを描画する関数

/// @func scr_dev_draw_bbox();
/// @param x {number}
/// @param y {number}
/// @param sprite {sprite_index}
function scr_dev_draw_bbox(_x=x, _y=y, sprite=sprite_index)
{
	draw_rectangle(_x, _y, _x, _y, false);
	
	var _spr_ltx = _x - sprite_get_xoffset(sprite);
	var _spr_lty = _y - sprite_get_yoffset(sprite);
	var _bb_ltx = _spr_ltx + sprite_get_bbox_left(sprite);
	var _bb_lty = _spr_lty + sprite_get_bbox_top(sprite);
	var _bb_rbx = _spr_ltx + sprite_get_bbox_right(sprite);
	var _bb_rby = _spr_lty + sprite_get_bbox_bottom(sprite);
	draw_rectangle(_bb_ltx, _bb_lty, _bb_rbx, _bb_rby, true);
}
23
asa 2023/06/27 (火) 18:47:29 修正

指定xy位置がspriteの中央位置になるように表示します
(spriteの原点を無視します)

原点がバラバラの複数の画像を上下左右中央揃えで表示するのに使ってます

// 指定xy位置がspriteの中央位置になるように表示する
/// @param {Asset.GMSprite} sprite
/// @param {Real} image_index
/// @param {Real} x
/// @param {Real} y
/// @param {Real} image_xscale
/// @param {Real} image_yscale
/// @param {Real} image_angle
/// @param {Real} image_blend
/// @param {Real} image_alpha
function scr_draw_sprite_ext_vcentered(_spr, _idx, _x, _y, _xscl, _yscl, _angle, _color, _alpha)
{
	var _offsetx = (sprite_get_xoffset(_spr) - sprite_get_width(_spr)/2) * _xscl;
	var _offsety = (sprite_get_yoffset(_spr) - sprite_get_height(_spr)/2) * _yscl;
	draw_sprite_ext(_spr, _idx, _x+_offsetx, _y+_offsety, _xscl, _yscl, _angle, _color, _alpha);
}

2023/06/28: 拡大率を反映させるよう修正

24
生高橋 2023/07/03 (月) 02:15:53

指定範囲を0 ~ 1の間に正規化する関数

//Normalizeの略
function norm(value,minValue,maxValue)
{
	return (value - minValue) / (maxValue - minValue);
}