ページ 11

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

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

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

Posted: 2021年1月07日(木) 21:38
by 奏ねこま
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を呼ぶようにしたら良いのではないでしょうか。

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

Posted: 2021年1月08日(金) 21:32
by DEDEN
奏ねこま様
ありがとうございます
お陰様で仕組みを理解して理想の機能を実装することができました
Graphics.updateの仕様はすっかり忘れていました…お恥ずかしい限りです