ゲーム制作ツール RPGツクールVX_Ace 【RGSS3】コンストラクタとデストラクタを使いたい場合【応用編】


This topic contains 0件の返信, has 1件の返信, and was last updated by  ライシェス 9 年 5 ヶ月.

  • 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を作ろう にて詳しく記載されています。 そちらも合わせてご覧ください。

このナレッジに返信するにはログインしてください。