【解決済み】【RGSS3】Game_InterpreterクラスのFiber.yieldで1フレームのウェイトが掛かる仕組みが分かりません

DEDEN
記事: 58
登録日時: 2018年8月25日(土) 15:06

【解決済み】【RGSS3】Game_InterpreterクラスのFiber.yieldで1フレームのウェイトが掛かる仕組みが分かりません

投稿記事by DEDEN » 2021年1月07日(木) 17:30

現在スクリプト勉強中です
Game_Interpreterクラスのwaitメソッドの様に他クラスでも指定フレームだけウェイトをかけたいと思い仕組みを解析していたのですが
どうにもInterpreterクラスはファイバーを作成して常にresumeでrunメソッドを呼び出しているのは分かったのですが
そこからFiber.yieldをするとどうも1フレームのウェイトが掛かるようで
親ファイバーはupdateメソッドなのでしょうがFiber.yieldでここに戻ってきてるとすればupdateメソッドは常に1フレームのウェイトが自動で掛かっているのでしょうか?
他クラスでこの仕様を再現しようとしてもtimesのブロックで何度Fiber.yieldをしてもウェイトは掛かりません
ブロック内に何らかの処理をいれると止まりますが画面そのものが止まってしまいます
これではsleepやGraphic.waitと同じで使えません
waitメソッドを呼び出したインスタンスだけ待機して他の制御はそのまま動くという仕組みはどう作ればいいのでしょうか
最後に編集したユーザー DEDEN on 2021年1月08日(金) 21:32 [ 編集 1 回目 ]

奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 【RGSS3】Game_InterpreterクラスのFiber.yieldで1フレームのウェイトが掛かる仕組みが分かりません

投稿記事by 奏ねこま » 2021年1月07日(木) 21:38

Game_Interpreter.runの中でFiber.yieldするとGame_Interpreter.updateに制御が戻ります。
Game_Interpreter.updateを抜けてGame_Map.updateに戻り、
Game_Map.updateを抜けてScene_Map.updateに戻ります。
Scene_Map.updateではGraphics.updateが実行され、ここで1フレーム進みます(ヘルプのGraphicsの項を参照)。

Game_Interpreter.waitのような仕組みを持つクラスを新しく作りたいのであれば
Game_Interpreterと同じ作りをした上でGame_Map.updateもしくはScene_Map.updateから
そのクラスのupdateを呼ぶようにしたら良いのではないでしょうか。
DEDEN
記事: 58
登録日時: 2018年8月25日(土) 15:06

Re: 【RGSS3】Game_InterpreterクラスのFiber.yieldで1フレームのウェイトが掛かる仕組みが分かりません

投稿記事by DEDEN » 2021年1月08日(金) 21:32

奏ねこま様
ありがとうございます
お陰様で仕組みを理解して理想の機能を実装することができました
Graphics.updateの仕様はすっかり忘れていました…お恥ずかしい限りです

“VX / Ace:質問” へ戻る