GameMaker 日本語掲示板

スクリプトに引数として配列を渡した時の挙動について / 1

4 コメント
views
16 フォロー
1
ディーン 2020/12/26 (土) 03:15:09

2.3から仕様が変わったのかと思って簡単に調べました。

IDE:2.3.1.542
Rutime:2.3.1.409
Windows

var _arr1 = [1, 0, 0];
var _arr2 = _arr1;

_arr2[1] = 1;

show_debug_message(string(_arr1));
show_debug_message(string(_arr2));

結果

[ 1,0,0 ]
[ 1,1,0 ]

もし参照になっている場合、_arr2の要素に更新をかけると参照されている_arr1も更新されます。
結果としては元々の仕様通り、配列は値渡し(コピー)になってました。

通報 ...
  • 2
    サクレ 2020/12/26 (土) 17:43:36 >> 1

    返信、検証ありがとうございます。

    どうも1,2次元配列と3次元配列でスクリプトでの扱いに違いがあるみたいで、そこでつまづいています。
    3次元配列を使ってこのようなコードを書いてみたのですが、

    //オブジェクト Createイベント
    for(i=2; i>-1; i--){
    	for(var j=2; j>-1; j--){
    		for(var l=2; l>-1; l--){
    			_firld[i][j][l] = 0;
    		}
    	}
    }
    Scr_Return_Array(_firld);
    
    //スクリプト
    function Scr_Return_Array(_a){
    	 _a[0][0][0]=123;
    }
    

    このように書くとオブジェクトの_firld配列は変更されないはずなのですが、実際には_firld[0][0][0]に123が書き込まれてしまいます。
    2次元配列でほぼ同じコードとスクリプトを書くと元の配列に変更は加えられませんでした。
    3次元配列をスクリプトに参照ではなく値渡しする方法がわからず困っています。解決法を教えていただければ幸いです。