ゲーム制作ツール › RPGツクールVX_Ace › 【RGSS3】コンストラクタとデストラクタを使いたい場合【応用編】
-
-
2015年7月10日 23:40
RGSS3でコンストラクタやデス トラクタの処理をしたいときの方法を先ほど説明しました。
しかし、この方法では、ウィンドウのX印を押されたときにデストラクタが動きません。その問題で フリーズする恐れすらあるのです。 今回はそれを制御し、確実にデストラクタを呼ばせる処理を行います。
#==============================================
# ◆ Exit モジュール
#————————–
module Exit
# ————————-
# ◆ 処理実行
# ————————-
begin
@@hook = Win32API.new(‘Exit’,’hookExit’,’v’,’l’)
@@exit = Win32API.new(‘Exit’,’getToExit’,’v’,’l’)
@@quit = Win32API.new(‘Exit’,’Quit’,’v’,’v’)
@@reset = Win32API.new(‘Exit’,’getToReset’,’v’,’l’)
@@clear = Win32API.new(‘Exit’,’clearReset’,’v’,’v’)
rescue Exception
raise if $TEST
raise( LoadError , “cannot read modules.(Exit.dll)”)
end
@@hook.call()@duration = 120
# ————————-
# ◆ 終了を監視する
# ————————-
def self.toexit
raise SystemExit.new(0) if @@exit.call() == 1
end
# ————————-
# ◆ F12リセットを監視する
# ————————-
def self.toreset
raise RGSSReset if @duration && @duration <= 0 if @@reset.call() == 1
if @duration && @duration > 0
@duration -= 1
@@clear.call()
end
end
# ————————-
# ◆ 本当の終了処理
# ————————-
def self.quit
@@quit.call()
end
# ————————-
# ◆ リセットカウントをクリア
# ————————-
def self.clearreset(wait = false)
@@clear.call() @duration = wait ? 120 : 0
end
end
# ————————-
# ◆ 終了監視をセット
# ————————-
class << Graphics
alias __rkn_exit_uodate__ update unless \@
def Graphics.update
__rkn_exit_uodate__
Exit.toexit
Exit.toreset
end
end
alias __rkn_rgss_main__ rgss_main unless \@
def rgss_main(&block)
__rkn_rgss_main__(&block)
ensure
Exit.quit
endこの処理はできるだけ前のセクションで実行してください。
さもないと、デストラクタを呼び損ねてフリーズなんてことが現れるかもしれません。これで使っているソースコードはこちらです。VS2013以降でコンパイルできます。 VS2013の導入方法は、半生様の記事DLLを作ろう にて詳しく記載されています。 そちらも合わせてご覧ください。
このナレッジに返信するにはログインしてください。