GameMaker 日本語掲示板

8bitビットマスキングでの計算値変換について

2 コメント
views
16 フォロー

8bitビットマスキングを使用してオートタイリングを行っていて
ビットマスク処理後の計算値をタイルのインデックス番号に揃えるために変換する必要があるのですが、
2 → 1, 8 → 2, 10 → 3...
のような処理が必要です。

今のところswitch文で処理を行うことを考えているのですが、
このような変換処理に有用な方法はありますでしょうか。

追記
現状このような変換方法にしました。
効率の良い方法があれば教えていただけると嬉しいです。

var _array = [2, 8, 10, ...];
var _leng = array_length(_array);
var i = 0;
------------------
var _tile_index //ビットマスク後の計算値を収納

repeat(_leng) //配列をindex=0からリピートして該当する値を探す
{
	if (_tile_index == array_get(_array,i))
	{
		_tile_index = i + 1;
		break;
	}
	else i++;
}
menon
作成: 2023/02/03 (金) 02:05:48
最終更新: 2023/02/03 (金) 13:42:34
通報 ...
1
生高橋 2023/02/03 (金) 20:31:18

GameMaker最新版の2023.1から指定した値を配列の中身から探してインデックスを取得するarray_get_index関数が追加されました。
もし配列の中身に重複がなければ使えると思います。

サンプルコードです。

var _array = [2, 8, 10];
var _tile_index = choose(2,8,10);
var _new_tile_index = array_get_index(_array,_tile_index) + 1;
show_debug_message(_tile_index);
show_debug_message(_new_tile_index);
2

そのような関数が追加されていたのですね!
重複もないので使えそうです。
ありがとうございます。