ページ 11

FF13のようなコマンドリストのエラー原因

Posted: 2019年12月07日(土) 11:44
by kannazaki_
初めて使うのでもし失礼があったらすみません

今回、FF13のような
・すべてのコマンドが表示されるコマンドウィンド
・そのウィンドから"コマンド実行"を選択するとコマンドを選んだ数だけスキルを発動する

という戦闘を作ってみたいと思いました。しかし、
this._actions.some is not a function at Game_Actor.Game_Battler.isChanting
というエラーが吐かれてしまいます。

また、Game_Actor.Game_Battler.isChanting の呼び出し部分をコメントアウトしても、今度は
攻撃したことを知らせるウィンドもアニメーションも表示されず、てきのHPも減少しない

という不具合が発生してしまいました。
この原因について考えてみましたが自分の知識不足で特定できませんでした。
なので、皆さん有識者の力を借りたいと思い投稿しました
添付ファイルにフローチャートを示します
また、以下にBattleManager.pushGameAction を示します(自作メソッド)

BattleManager.pushGameAction = function(targetIndex){
this._selectedCommand.forEach(function(item){
//Action型変数のセット
var action = new Game_Action($gameParty.members()[0]);
if(item.datatype === "Skill"){
action.setSkill(item.id);
action._targetIndex = targetIndex;
$gameParty.members()[0].setLastBattleSkill($dataSkills[item.id]);
}else{//アイテム
action.setItem(item.id);
if($dataItems[item.id] < 7){
action.setItem(item.id);
action._targetIndex = targetIndex;
}else{
action.setItem(item.id);
action._targetIndex = targetIndex;
$gameParty.setLastItem($dataItems[item.id]);
}
}
//this._actionBattlersへの格納
var actor = $gameParty.members()[0];
actor._actions = action;
actor._actionState = 'waiting';
this._actionBattlers.push(actor);
}, this);
this.startActorTurn();
};



★現状
★コマンドウィンドは表示される
★pushGameActionメゾットにおいてウィンドに対応するコマンドがあることを確認
★Game_Battler._actionsにスキルやアイテムは登録されていた
★_targetIndexは-1だった

❤知りたいこと
❤どのようなことがこのコードに足りていないか
❤なぜこの不具合は生じたか
❤今後コマンドウィンドの改造を行う際に気をつけるべきこと


皆様の知識を是非貸していただきたいです。お願いいたします

Re: FF13のようなコマンドリストのエラー原因

Posted: 2019年12月07日(土) 14:07
by 剣崎 宗二
_actionsはArrayであるべきなのに単体オブジェクトをセットしているのが理由かと考えます。
(.someはデフォルトではArrayが保有する関数です)

actor._actions = action;
を変更し、

actor._actions = [action];
或いは
actor._actions.push(action);
をお試しください。 (何度も行う事も踏まえると恐らく後者が望ましいです)

Re: FF13のようなコマンドリストのエラー原因

Posted: 2019年12月08日(日) 18:39
by kannazaki_
解決しました
ありがとうございます