全く同じ処理が何回も実行される場合に、その処理をサブルーチンにすることで、下のコード一行だけで、その処理全体を実行できる。
gosub @xxxxxx :main gosub @SUB_FADE_500MS gosub @SUB_FADE_500MS gosub @SUB_FADE_500MS gosub @SUB_FADE_500MS 0A93: end_custom_thread
:SUB_FADE_500MS 016A: fade 0 time 500 wait 500 016A: fade 1 time 0 return
上記コードは、
0.5秒でフェードアウト(暗転)し、その後一瞬でフェードアウトが解除される、
という処理を4回繰り返すスクリプトです。
上記のコードをサブルーチンを使わず記述すると下記のコードになります。
:main 016A: fade 0 time 500 wait 500 016A: fade 1 time 0 016A: fade 0 time 500 wait 500 016A: fade 1 time 0 016A: fade 0 time 500 wait 500 016A: fade 1 time 0 016A: fade 0 time 500 wait 500 016A: fade 1 time 0 0A93: end_custom_thread
サブルーチンを使わず記述したものが14行であるのに対し、
サブルーチンを使用して記述したものは11行です。
短くなってて嬉しいです。おしまい。
※gosubを使った場合必ずreturnで戻りましょう。
※gosubで飛べる回数は最大で8回です。下記コードのようなことをすると強制終了するそうです。
:main gosub @SUB_FADE_500MS_1 gosub @SUB_FADE_500MS_1 gosub @SUB_FADE_500MS_1 gosub @SUB_FADE_500MS_1 0A93: end_custom_thread
:SUB_FADE_500MS_1 gosub @SUB_FADE_500MS_2 return
:SUB_FADE_500MS_2 gosub @SUB_FADE_500MS_3 return
:SUB_FADE_500MS_3 gosub @SUB_FADE_500MS_4 return
:SUB_FADE_500MS_4 gosub @SUB_FADE_500MS_5 return
:SUB_FADE_500MS_5 gosub @SUB_FADE_500MS_6 return
:SUB_FADE_500MS_6 gosub @SUB_FADE_500MS_7 return
:SUB_FADE_500MS_7 gosub @SUB_FADE_500MS_8 return
:SUB_FADE_500MS_8 gosub @SUB_FADE_500MS_9 return
:SUB_FADE_500MS_9 016A: fade 0 time 500 wait 500 016A: fade 1 time 0 return