GameMaker 日本語掲示板

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

4 コメント
views
16 フォロー
3
SUPPY 2020/12/27 (日) 21:15:31 修正

3次元配列ちょこちょこいじってみました。
配列をコピーした場合でも同様の配列を参照してしまうみたいです。
なので、

// [引数]3次元配列(コピー元)
function array_copy3d(_a){
	var _b = array_create(0);	// コピー先

	var _length1 = array_length(_a);
	for(var i=0; i<_length1; i++){
		var _length2 = array_length(_a[i]);
		_b[i] = array_create(_length2)
		array_copy(_b[i], 0, _a[i], 0, _length2);
	}
}

このように配列の2次元目をコピーすると別の配列として参照できました。
(3次元目をコピーしてもいけますが、記述が長くなるので2次元目にしました)

コピー先をいじった後、元に返すのは、

	// _aコピー元	_bコピー先
	var _length1 = array_length(_a);
	array_copy(_a, 0, _b, 0, _length1);

	// 戻り値があるなら
	return _b;

でいけます。

GMSで3次元配列を扱うのはリスキーに思われるので、1次元配列の中に2次元配列を格納する
という手法も1つの策かと思われます。
参考になれば幸いです。

通報 ...
  • 4
    サクレ 2020/12/27 (日) 22:31:46 >> 3

    おおお、これで何とかなりそうです。ありがとうございます!!
    3次元配列が単純にコピーできないのは不具合なのかな・・・。