【解決済み】isNearTheScreen () の画面の距離

アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

【解決済み】isNearTheScreen () の画面の距離

投稿記事by MEIKOI » 2021年5月30日(日) 12:50

こんにちは。
isNearTheScreen ()を利用して
画面外に出た並列イベントに処理をしているのですが

実際どれくらい離れた時に判定されているか、マス数で測ると
デフォルトのゲームの状態で、画面外10マスで画面から離れたと判定されています。

10マスと言えば、ちょっと自分的には遠すぎるので
例えば、これを5マス位で画面外ですよ!っと判定したいのですが
どのようにすれば、判定の距離を変更できるでしょうか。

一応、コアスクリプトを眺めていてrpg_objectの
Game_CharacterBase.prototype.isNearTheScreenを
上書きするプラグインを作ればよいのかと思ったのですが
(検討違いかもしれませんが・・・)

コードの書き方がわかりません^^;
牛歩のような学習能力で申し訳ないのですが
教えていただけると助かります。
よろしくお願いいたします。

コピペで作ってみたコードは下記です。

コード: 全て選択

(() => {
    'use strict'
    const _Game_CharacterBase.isNearTheScreen = Game_CharacterBase.prototype.isNearTheScreen;
    Game_CharacterBase.prototype.isNearTheScreen = function() {
    var gw = Graphics.width;
    var gh = Graphics.height;
    var tw = $gameMap.tileWidth();
    var th = $gameMap.tileHeight();
    var px = this.scrolledX() * tw + tw / 2 - gw / 2;
    var py = this.scrolledY() * th + th / 2 - gh / 2;
    return px >= -gw && px <= gw && py >= -gh && py <= gh;
    };
})();
最後に編集したユーザー MEIKOI on 2021年5月31日(月) 08:48 [ 編集 1 回目 ]

アバター
WTR
記事: 560
登録日時: 2015年12月22日(火) 19:14

Re: isNearTheScreen () の画面の距離

投稿記事by WTR » 2021年5月30日(日) 14:41

10マスは水平方向ですね。垂直は8マスで false になるかと思います。
最後の return のとこで使われている gw と gh の(絶対値を)小さくすれば true 判定範囲が狭まるかと。

コード: 全て選択

(() => {
    'use strict'
    Game_Event.prototype.isNearTheScreen = function() {
        var gw = Graphics.width;
        var gh = Graphics.height;
        var tw = $gameMap.tileWidth();
        var th = $gameMap.tileHeight();
        var px = this.scrolledX() * tw + tw / 2 - gw / 2;
        var py = this.scrolledY() * th + th / 2 - gh / 2;
        gw -= 5 * tw;
        gh -= 3 * th;
        return px >= -gw && px <= gw && py >= -gh && py <= gh;
    };
})();

こんなんでどうでしょ。
gw を 5マス分小さく
gh を 3マス分小さく
一応 Game_CharacterBase ではなく Game_Event の isNearTheScreen にしました。
Game_CharacterBase を書き換えるとプレイヤーとか乗り物の挙動も変わってしまうので。
実際には isNearTheScreen は Game_Event でしか使ってなさそうなのでどっちでもいいかもしれませんが。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: isNearTheScreen () の画面の距離

投稿記事by MEIKOI » 2021年5月30日(日) 17:31

WTR様

こんにちは!いつも教えて頂いきありがとうございます。
プラグイン読み込んでみました。うまくいきました!
数値の設定方法教えて頂いたので適切な広さで調節していきたいと思います!
Game_Eventで処理するんですね。オブジェクトな思考がわからないんで・・・(笑)
いつまでたってもこの仕組み難しく感じます( ;∀;)
ゲーム作りながら慣れていきます。
感謝いたしますm(_ _ )m

ちなみに、this.scrolledX()ってのは、コレ何なんでしょうか??
アバター
WTR
記事: 560
登録日時: 2015年12月22日(火) 19:14

Re: isNearTheScreen () の画面の距離

投稿記事by WTR » 2021年5月30日(日) 18:02

scrolledX() / scrolledY() は、画面のスクロール補正を含めた画面上の位置…
となんともよくわからない説明ですね。
Game_Player も同じscrolledX() / scrolledY() を持っているので
実際にマップを歩き回りながら確かめてみるとイメージが掴めるかもしれません。

デフォルトの 816 x 624 の画面サイズ (タイル換算で 17 x 13) でプレイヤーがマップを歩き回ると
$gamePlayer.scrolledX() は 0 ~ 16
$gamePlayer.scrolledY() は 0 ~ 12
の範囲の値を取ります。
画面の左上隅にいるとき (0, 0) で、右下隅にいるとき (16, 12) になる。
プレイヤーは移動のときスクロールしても画面からはみ出ないようになってるので通常はこの範囲に収まります。
(マップのスクロールを使ってプレイヤーを画面外に押しやればこの範囲を超えます)
scrolledX() / scrolledY() が負の値を取ったり、画面サイズ ÷ タイルサイズ 以上の値を取ったら画面外にいる…というようなものですね。

イベントも同じです。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: isNearTheScreen () の画面の距離

投稿記事by MEIKOI » 2021年5月30日(日) 22:16

WTR様

丁寧に説明して下さりありがとうございます。
わかりやすく、scrolledの役割は理解できました。
今回も問題解決の手助けして頂きお世話になりました。
感謝いたします。m(_ _)m

“MV:質問” へ戻る