質問1
モジュールを使って色々と管理しやすくしようと思っているのですが、
下記のコードでは、(Zキー)モジュールAの中からモジュールBを生成(グローバル変数に追加)すると、エラーが発生します。
一方で、(Xキー)モジュールBの中からモジュールAを生成すると成功します。
回避策→(Cキー)のように、グローバルで命令を作ることで回避している状態です。
回避策→インクルードする順番を入れ替えると大丈夫なので、お互いに生成するようなモジュールは避ける。
このエラーは、モジュールAとBの宣言の順番が影響しているのでしょうか?
(想定していること)
プレイヤーモジュール(A)の中から弾モジュール(B)を生成する場合、先に弾モジュールをincludeしておかないと生成できなかった。
質問2
そもそも、別のモジュールから、グローバル配列変数に対してnewmodするのは、良くないのかと思いますが、ゲーム制作でモジュール化する場合、どのような管理方法が良いのでしょうか?
プレイヤーモジュールとか、弾モジュールとか、アイテムモジュール、敵モジュールなど、増えてきたのですが、オブジェクト指向とまではいかなくても、ある程度モジュール化することで見やすくなりました。
HSPの仕様上で気を付けることがあれば教えてください。
;モジュールA========================================= #module mod_A val #modfunc add_mod_b newmod var_mod_b@,mod_B;→エラー return #modfunc add_mod_b2 add_mod_b_global;→正常。グローバル命令を呼ぶ。やっていることは同じはず return #global ;モジュールB========================================= #module mod_B val #modfunc add_mod_a newmod var_mod_a@,mod_A;→正常 return #global ;メインプログラム==================================== newmod var_mod_a,mod_A newmod var_mod_b,mod_B *main redraw 0 color 0,0,0:boxf stick keys ;ZキーでモジュールAの中からモジュールBを生成→エラー!! ;#Error 35 in line〇〇(???) ;-->モジュール変数が指定されていません if keys&2048:add_mod_b var_mod_a(0) ;XキーでモジュールBの中からモジュールAを生成→正常に追加可能 if keys&4096:add_mod_a var_mod_b(0) ;CキーでモジュールAの中からグローバル命令でモジュールBを生成→正常に追加可能 if keys&8192:add_mod_b2 var_mod_a(0) ;デバッグ pos 0,0:color 255,255,255 mes "mod_A:"+length(var_mod_a) mes "mod_B:"+length(var_mod_b) await 1000/60:redraw 1 goto *main ;グローバル命令==================================== #deffunc add_mod_b_global newmod var_mod_b,mod_B return