ページ 12

【解決済み】Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 16:14
by zzz
イベントスクリプトでSceneManager.push(Scene_GameEnd);と書いているのですが【タイトルへ戻る】を選択した時にタイトルを飛ばして指定したマップへ飛ばすことはできますか?

Scene_GameEndやScene_Titleを見てもどこをいじれば良いのか分からず質問させて頂きました。

※補足です。
イベント中に並列処理(キー入力)SceneManager.push(Scene_GameEnd);を動かしています。
キー入力でイベントを強制終了させて、自作スタート画面へ移動したいのでこういう処理を行っています。

どうぞ宜しくお願いします。

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 16:44
by biv36htspH7k5cC
zzz さんが書きました:イベントスクリプトでSceneManager.push(Scene_GameEnd);と書いているのですが【タイトルへ戻る】を選択した時にタイトルを飛ばして指定したマップへ飛ばすことはできますか?

Scene_GameEndやScene_Titleを見てもどこをいじれば良いのか分からず質問させて頂きました。

※補足です。
イベント中に並列処理(キー入力)SceneManager.push(Scene_GameEnd);を動かしています。
キー入力でイベントを強制終了させて、自作スタート画面へ移動したいのでこういう処理を行っています。

どうぞ宜しくお願いします。
下記だと、解決できない事がありましたら、教えて下さい。

コード: 全て選択

◆画面の色調変更:(0,0,0,255), 1フレーム
◆選択肢の表示:タイトルへ, やめる (ウィンドウ, 中, #1, #2)
:タイトルへのとき
  ◆場所移動:フィールド1 (14,20)
  ◆
:やめるのとき
  ◆画面の色調変更:(0,0,0,0), 1フレーム
  ◆
:分岐終了

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 16:54
by zzz
お答えいただきましてありがとうございます!

コード: 全て選択

◆画面の色調変更:(0,0,0,255), 1フレーム
◆選択肢の表示:タイトルへ, やめる (ウィンドウ, 中, #1, #2)
:タイトルへのとき
  ◆場所移動:フィールド1 (14,20)
  ◆
:やめるのとき
  ◆画面の色調変更:(0,0,0,0), 1フレーム
  ◆
:分岐終了
こちらではイベント中(メッセージ表示中)なので選択肢の表示ができませんでした。
引き続き回答の方をお待ちしております。

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 18:26
by biv36htspH7k5cC
zzz さんが書きました:お答えいただきましてありがとうございます!

コード: 全て選択

◆画面の色調変更:(0,0,0,255), 1フレーム
◆選択肢の表示:タイトルへ, やめる (ウィンドウ, 中, #1, #2)
:タイトルへのとき
  ◆場所移動:フィールド1 (14,20)
  ◆
:やめるのとき
  ◆画面の色調変更:(0,0,0,0), 1フレーム
  ◆
:分岐終了
こちらではイベント中(メッセージ表示中)なので選択肢の表示ができませんでした。
引き続き回答の方をお待ちしております。
大変察しが悪く申し訳ないのですが、下記のような処理をされていると考えて良いのでしょうか?

▼イベント1
出現条件:スイッチ1:ON
トリガー並行処理

コード: 全て選択

◆条件分岐:ボタン[決定]が押されている
  ◆スクリプト:SceneManager.push(Scene_GameEnd);
  ◆
:分岐終了
▼イベント2(会話)

コード: 全て選択

◆スイッチの操作:#0001 並列処理 = ON
◆文章:なし, ウィンドウ, 下
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
◆文章:なし, ウィンドウ, 下
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
◆文章:なし, ウィンドウ, 下
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
◆文章:なし, ウィンドウ, 下
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
◆スイッチの操作:#0001 並列処理 = OFF
これですと、会話中の間に決定キーを押すとゲームを終了するかの選択肢が出ますが、スクリプトの代わりに「選択肢の表示」をしても表示されませんね。

こういう想定で合っていますか?
できましたら、並行処理のイベント内容や、どういうイベントでどのタイミングで出したいのか、具体的な例となるイベント処理を出していただけると理解が早まります。

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 19:54
by zzz
お答えありがとうございます!
▼イベント1
出現条件:スイッチ1:ON
トリガー並行処理

コード: 全て選択

◆条件分岐:ボタン[決定]が押されている
  ◆スクリプト:SceneManager.push(Scene_GameEnd);
  ◆
:分岐終了
▼イベント2(会話)

コード: 全て選択

◆スイッチの操作:#0001 並列処理 = ON
◆文章:なし, ウィンドウ, 下
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
◆文章:なし, ウィンドウ, 下
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
◆文章:なし, ウィンドウ, 下
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
◆文章:なし, ウィンドウ, 下
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
:  :おしゃべり中。おしゃべり中。おしゃべり中。
◆スイッチの操作:#0001 並列処理 = OFF
これですと、会話中の間に決定キーを押すとゲームを終了するかの選択肢が出ますが、スクリプトの代わりに「選択肢の表示」をしても表示されませんね。

こういう想定で合っていますか?
できましたら、並行処理のイベント内容や、どういうイベントでどのタイミングで出したいのか、具体的な例となるイベント処理を出していただけると理解が早まります。
はい、そういう想定で合っています。
イベント1(メッセージを表示させている会話文)
イベント2(キー入力でSceneManager.push(Scene_GameEnd);を処理)
と言うふうに動かしています。

文章中に好きなタイミングでInput.isTriggered('ok')からSceneManager.push(Scene_GameEnd);を呼び出せるように並列処理にしています。

やりたい事はSceneManager.push(Scene_GameEnd);でタイトルへ戻るを選択した時に指定した別マップへ移動すると言うことです。
でもどうすれば良いの分からず困っています。
そもそもが可能なのかどうかも分からないので質問しました。
もしScene_GameEndやScene_Titleを改造する事で対処できるなら教えてもらえると助かります。

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 21:49
by トリアコンタン
こんにちは!
Scene_GameEndを改修する場合
「Scene_GameEnd.prototype.commandToTitle」を以下の例に沿って修正します。

コード: 全て選択

(function() {
    'use strict';

    Scene_GameEnd.prototype.commandToTitle = function() {
        this.fadeOutAll();
        // 場所移動(mapId, X, Y, 向き[2:下 4:左 6:右 8:上])
        $gamePlayer.reserveTransfer(8, 10, 10, 2);
        // 移動先シーンをMapに変更
        SceneManager.goto(Scene_Map);
    };
})();
プラグインとして使用する場合は、上記をJSファイルとして保存してプラグイン管理画面から取り込んでください。

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 22:32
by zzz
こんばんは!教えて頂きましてありがとうございます!
思い描いていた処理ができました♪
トリアコンタン さんが書きました:こんにちは!
Scene_GameEndを改修する場合
「Scene_GameEnd.prototype.commandToTitle」を以下の例に沿って修正します。

コード: 全て選択

(function() {
    'use strict';

    Scene_GameEnd.prototype.commandToTitle = function() {
        this.fadeOutAll();
        // 場所移動(mapId, X, Y, 向き[2:下 4:左 6:右 8:上])
        $gamePlayer.reserveTransfer(8, 10, 10, 2);
        // 移動先シーンをMapに変更
        SceneManager.goto(Scene_Map);
    };
})();
プラグインとして使用する場合は、上記をJSファイルとして保存してプラグイン管理画面から取り込んでください。
なのですが、移動先でも自動実行で表示している会話文の処理が継続されてしまいました。
こちらのイベントを消去する方法も教えていただきたいです。
すみませんがどうぞ宜しくお願いします。

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 22:48
by Plasma Dark
Game_Map に killRunningEvent 的なメソッドを生やして、その中で実行中のインタプリタを初期化、そいつを呼べば実行中のイベントを中断できるんじゃないかと思います。

ところで、 Scene_GameEnd のタイトルに戻る処理を上書きすると、普通にメニューからタイトルに戻りたい時にもそっちの処理に引っ張られそうなものですが、それは大丈夫でしょうか。

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 23:16
by zzz
こんばんは!
はい、メニューからタイトルに戻るも同じ処理で問題ありません。
Plasma Dark さんが書きました:Game_Map に killRunningEvent 的なメソッドを生やして、その中で実行中のインタプリタを初期化、そいつを呼べば実行中のイベントを中断できるんじゃないかと思います。

ところで、 Scene_GameEnd のタイトルに戻る処理を上書きすると、普通にメニューからタイトルに戻りたい時にもそっちの処理に引っ張られそうなものですが、それは大丈夫でしょうか。
killRunningEvent やインタプリタというものが何か分からないのですみません。
updateが関係あるのかもと思って色々調べているのですが分からなくて。°(´∩ω∩`)°。

Re: Scene_GameEnd、タイトルへ戻る処理について

Posted: 2020年3月10日(火) 23:53
by トリアコンタン
『killRunningEvent』というのは新しく作ろうとしている『実行中のイベントを強制中断させるメソッド』の命名の一例かと思います。(作る側が命名するので別の名前でもOKです)

『インタプリタ』というのは、ツクール内部でイベント命令を実行する仕組みのことです。
コアスクリプトのrpg_objects.jsに『Game_Interpreter』という名前で定義されています。

具体的には『$gameMap』の『_interpreter』という変数が実行しています。これが『インタプリタ』です。

上記を踏まえて、イベント処理の強制終了を組み込んだ一例が以下になります。

コード: 全て選択

(function() {
    'use strict';

    Scene_GameEnd.prototype.commandToTitle = function() {
        this.fadeOutAll();
        // 場所移動(mapId, X, Y, 向き[2:下 4:左 6:右 8:上])
        $gamePlayer.reserveTransfer(8, 10, 10, 2);
        // イベントを実行中であれば中断
        $gameMap.killRunningEvent();
        // 表示中のメッセージや選択肢をクリア
        $gameMessage.clear();
        // 移動先シーンをMapに変更
        SceneManager.goto(Scene_Map);
    };

    // Game_Map に killRunningEvent 的なメソッドを生やす
    Game_Map.prototype.killRunningEvent = function() {
        // イベントが実行中であれば強制終了
        if (this.isEventRunning()) {
            this._interpreter.terminate();
        }
    };