ユーザ定義関数をエクスポートする機能があるけれどバグ
がある。
特に ユーザ定義関数に Child を設けた場合に、これをエクスポートすると UTF-8 で保存されていない場合がある。このファイルを外部関数として IDE からロードすると親子関係は全て失われて勝手にグループとして扱われてしまう。ひどい場合はファイル自体が読み込めなくてブランクとして扱われてしまう。
関連:GM:S 1.4用、ユーザ定義関数の追加用テンプレ作成アプリ
解決策
スクリプトの親子関係を崩さないように既存のプロジェクトへ関数を安全にロードするためには、プロジェクトファイルを直接手動で編集して関数を登録したほうが安全かつ確実で速い。
- まず child を持つスクリプトをエクスポートする場合、ファイル名は一番先頭に来る「親」と同じ名前で保存すること。親と違う名前で保存すると、ロード時に無言で失敗して勝手にブランクファイル扱いとなり、更に child も全て消えた状態で開かれる。
- エクスポート後、手動で
UTF-8
で保存し直したほうが良い。ファイル内部に日本語を含めているとそうなるのかもしれないが、文字コード関連で保存時の処理が一部怪しい。UTF−8 で保存し直す手間が要らないファイルもある。よくわからない。 - プロジェクトファイルをエディタで開く。文字コードに気を付けて保存すること。かならず UTF-8 で開かれているかよく確認。
すでにスクリプトがなにか登録されている場合はデフォルトだと
<scripts name="scripts">
という行が
xxx.project.gml
ファイルの文中にある。無ければ
<paths name="paths"/>
で検索してこの行の下に以下を追記。
<scripts name="scripts"> <scripts name="任意のグループ名"> <script>scripts\スクリプトファイル名.gml</script> </scripts> </scripts>
まとめ
読み込んだらブランク扱いになる場合は以下二つの点をチェック。
- UTF-8 で保存しなおしたか
- ファイル名は親スクリプトと同じ名前になっているか
読み込みに成功したら
<scripts name="scripts"> <scripts name="Views"> <script>scripts\Scroll.gml</script> <script>scripts\Debug2.gml</script> <script>scripts\VSCROLL.gml</script> <script>scripts\EuclideanAlgorithm.gml</script> <script>scripts\InitRoundTurlet.gml</script> <script>scripts\InitSurface.gml</script> </scripts> </scripts>
こんな感じでどんどん追加できる。