ページ 11

敵IDの取得について

Posted: 2017年8月07日(月) 19:40
by kag
rpg_managers.js の BattleManager.displayStartMessages の部分で、
敵の出現コメントと一緒にその敵のデーターベースのID番号を表示したいです!
色々試してみましたが取得できませんでした!

Re: 敵IDの取得について

Posted: 2017年8月07日(月) 19:49
by しぐれん
まず問題を分けましょう。
敵のIDをconsole.log()で出力はできましたか?
また、適当な数字を仮に画面に出すのはどうでしょうか?
敵のIDが取れないなら代わりに「234」のような適当な数字を画面に出すのも有効な手です。
それから次に進んでみてはどうでしょうか?

なお、画面に表示を出す部分はBattleManager内でthis._logWindow.push()などで表示します。
logWindowは少し複雑なのでご注意を。

Re: 敵IDの取得について

Posted: 2017年8月07日(月) 20:04
by kag
$gameMessage.add(TextManager.emerge.format(name));
ここの()の中に適当な数字を入れたらその数字が出てきますね
ここに敵のIDの番号を入力できたら理想的です!

Re: 敵IDの取得について

Posted: 2017年8月07日(月) 20:56
by しぐれん
敵の管理番号は.enemyId()で取得できます。

調べましたが、本体スクリプトを改造する必要があります。

コード: 全て選択

BattleManager.displayStartMessages = function() {
    $gameTroop.enemyNames().forEach(function(name) {
        $gameMessage.add(TextManager.emerge.format(name));
    });
    if (this._preemptive) {
        $gameMessage.add(TextManager.preemptive.format($gameParty.name()));
    } else if (this._surprise) {
        $gameMessage.add(TextManager.surprise.format($gameParty.name()));
    }
};
この部分が出現時に敵モンスターの名前を表示する処理ですが、これは名前の一覧だけですので敵のIDなどの情報が欠落しています。
.enemyNames()をmembers()にして、Game_Enemy型に対してforEachする必要があります。
改造して元と同じ動きになるよう改造すると、大体こんな感じです。

コード: 全て選択

BattleManager.displayStartMessages = function() {
    $gameTroop.members().forEach(function(enemy) {
        $gameMessage.add(TextManager.emerge.format(enemy.name()));
    });
    if (this._preemptive) {
        $gameMessage.add(TextManager.preemptive.format($gameParty.name()));
    } else if (this._surprise) {
        $gameMessage.add(TextManager.surprise.format($gameParty.name()));
    }
};
名前表示部分は把握しているようなので、enemy.enamyId() +':'+enemy.name() のような記述にして試してみてください。

Re: 敵IDの取得について

Posted: 2017年8月07日(月) 21:28
by kag
なるほど
.enamyIdと入力しても表示されないのはそういう事だったのですね
教えていただき有難うございます!

BattleManager.displayStartMessages = function () {
$gameTroop.members().forEach(function (enemy) {
$gameMessage.add(enemy.enamyId() + ':' + enemy.name());
});
if (this._preemptive) {
$gameMessage.add(TextManager.preemptive.format($gameParty.name()));
} else if (this._surprise) {
$gameMessage.add(TextManager.surprise.format($gameParty.name()));
}
};

ただ、しぐれん様のを参考にしこのように書き換えましたが、undefined is not a functionと出てしまいます
どこがいけないのでしょうか?

Re: 敵IDの取得について

Posted: 2017年8月07日(月) 21:50
by しぐれん
Visual Studio Codeでステップ実行して試してみるのがいいと思います。
導入用の資料はネットにあるので、調べてみてください。
ツクールMV vscodeあたりでググると出てきます。

Re: 敵IDの取得について

Posted: 2017年8月07日(月) 22:52
by まっつUP
kag様

enamyIdと言う名の関数はないので
enemy.enemyId()でいくと思います。
追記:誤字であることに気付いてませんでした。

Re: 敵IDの取得について

Posted: 2017年8月08日(火) 06:49
by kag
何故か上手くいかないと思ったらenemy.enemyId()の部分を誤字していました!
直したらちゃんとIDが表示されました!
教えて頂いてありがとうございます :!: