[GameMaker: Studio] ds_gridのdisk系命令の範囲

gms_ds_grid_set_disk_1

以前の記事でも紹介しましたが、ds_gridへの読み書きは矩形だけではなく円形でもアクセスできます。

しかしこの“円”にはちょっとしたクセがあり、必ず水平および垂直の1行1列だけが指定半径サイズとなり、4方向それぞれに1つずつ飛び出てしまいます。

ちょっとわかりにくいですが部分的に抜き出すとこんな感じになります。

□□□□■□□□□ ← ここが半径
□□■■■■■□□

□□□□■□□□□ ← ここが半径
□■■■■■■■□
□■■■■■■■□

□□□□■□□□□ ← ここが半径
□■■■■■■■□
■■■■■■■■■
■■■■■■■■■

指定半径としてはこの飛び出た部分がぴったりですが、飛び出た部分以外は視覚的には一回り小さくなってしまいます。

これは円周を計算した結果としては正確なのでGM:Sのバグというわけではありません。
もし見た目が綺麗な“円”になるようにして、飛び出た部分の左右も範囲に含めてしまうと、その部分は計算上は半径をオーバーしているということになるためです。

半径に関わらず飛び出る箇所は水平垂直の各端の4箇所と決まっているため、半径を1つ大きくして、この4箇所のみ個別に処理することで一応は理想的な円形で扱うことは可能です。

“円”の計算自体は簡単なのでdisk系命令を使わずに自分でやってしまうというのも一つの手です。