ページ 12

現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月05日(土) 08:45
by れたす
スキルの使用効果の欄でコモンイベントを読み込み、
コモンイベント内で敵のステートを判断して、特定のステートであれば変数を+1する。
といった処理を行いたいです。

現在は、添付画像の様になっているのですが
ここの一番上
 ◆条件分岐:#1がダウンになっている
の部分を、 ”現在の攻撃対象”がダウンになっている 処理に書き換えたいです。

条件分岐→敵キャラのプルダウンでは隊列の番号での指定 #1?~#8?しか無いため
どの敵に対して攻撃を加えても#1番目の敵のステートが参照されてしまっているよう様です。
MVの基本機能では、”現在の攻撃対象”を限定して、ステートを参照する方法は無いのでしょうか?
chaincheck.jpg

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月05日(土) 13:02
by れたす
攻撃した対象だけを特定できないので、攻撃する(スキル使用)の度にこれをコピーして編集した
#1~#8までのコモンイベントを走らせて、暫定でカウンターを8個別々に管理する様にしているのですが
結局、カウンターに格納した値を連携後のダメージを出すためにスキルの計算式に変数で返さねばならなく
殴った対象をどれか特定できないと、どの変数を返していいかコモンイベント上で判断できなくて詰んでます

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月05日(土) 21:36
by れたす
追記 中のjsを覗いてみた所、
BattleManager.startAction = function() {

BattleManager.updateAction = function() {
の中の
this._targets 辺りが現在対象に取っている敵ユニットくさいのですが、
これをどうやってコモンイベントに持ってくれば良いのか知識が及びません...
どなたか詳しい方教えてくださいな!

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月05日(土) 22:59
by ボウケンウサギ
ターゲット情報は、行動したキャラの ._lastTargetIndex に相手グループ内でのインデックスが格納されるみたい。

なので、
$gameTroop.members()[BattleManager._subject._lastTargetIndex]
とすると敵の情報が取得できる

あとは、
取得した敵情報から必要なステートがあるか確認させればいいはず。

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月05日(土) 23:56
by れたす
ありがとうございます。
頂いた内容を元に以下のようにしてみたのですが、実行してみるとエラーで止まってしまいました。

◆設定した項目
 通常攻撃(スキル001)で殴った対象が判別できているかどうか、使用効果にコモンイベントを入れて確認
 エディタ上で変数0014に、攻撃対象特定用という名前の変数を用意

◆コモンイベント
 ◆スクリプト v[0014] = $gameTroop.members()[BattleManager._subject._lastTargetIndex]
 ◆文章:なし, ウィンドウ, 下
  :   :\v[0014]
 ◆

◆結果
 通常攻撃 → ダメージ表示後に以下のエラーを吐いて停止

 ReferenceError
 v is not defined

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月06日(日) 01:51
by ボウケンウサギ
敵が攻撃した際には、味方パーティーのインデックスが取得されるので

味方攻撃時は、
$gameTroop.members()[BattleManager._subject._lastTargetIndex]

敵攻撃時は、
$gameParty.members()[BattleManager._subject._lastTargetIndex]

と変更する必要があります

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月06日(日) 02:05
by ボウケンウサギ
あと、
スクリプト中で変数に値を入れるには
$gameVariables.setValue(ID, 値)

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月06日(日) 03:46
by れたす
補足ありがとうございます。
その後、スクリプトがよくわからなかったので、普通に変数の代入でやってみました。

◆変数の操作 : #0014 攻撃対象特定用 = $gameTroop.members()[BattleManager._subject._lastTargetIndex]
◆文章:なし,ウィンドウ,下
:    :\v[0014]


攻撃後にとまらなくなりましたが、出力されたのは[object Object]というメッセージになってしまいました。

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月06日(日) 05:15
by ボウケンウサギ
javascriptで、オブジェクトの中身を知りたい場合は、

スクリプト内で
console.log($gameTroop.members()[BattleManager._subject._lastTargetIndex])
と書き、テスト実行中にF8キーを押してDeveloper Toolを呼び出し
Consoleタブを開くと見れるようになります

それで、
攻撃対象の状態は、取得したオブジェクトの._states に配列として格納されています。
この配列に状態のIDが入っているので、それを調べればよい


最終的には、
条件分岐のコマンドで、スクリプトを選択し、
$gameTroop.members()[BattleManager._subject._lastTargetIndex]._states.indexOf( 状態ID ) != -1
と書けばいい。

ただ、
これだと敵の攻撃時に呼び出すとエラーになるので、
敵にも同じ処理を行わせたい場合は、別途処理が必要

Re: 現在攻撃している敵の状態を条件分岐で参照する方法は?

Posted: 2015年12月06日(日) 06:28
by れたす
ありがとうございます。

見方から、敵へ攻撃する際のダウン状態チェックを以下の様に(ダウン状態のidは11)
$gameTroop.members()[BattleManager._subject._lastTargetIndex]._states.indexOf(11) != -1
変数の操作 連携カウンタ+=1
確認用に連携カウンタv[0001]を文章で出力

敵を2体出しても、これ1つで殴った相手を判別でき、正常に動作しカウンタが加算されているのを確認できました。

これをこのまま敵用に応用し、敵用のダウンスキルをつくり読み込むコモンイベントだけを以下の様に変更しました。
$gameParty.members()[BattleManager._subject._lastTargetIndex]._states.indexOf(11) != -1
変数の操作 連携カウンタ+=1
確認用に連携カウンタv[0001]を文章で出力

これを仕込んだスキルを敵に使わせたところ、以下の様なエラーを吐いて停止してしまいました。

◆エラー内容
TypeError
Failed to execute 'createLinearGradient' on 'CanvasRenderingContext2D': float parameter3 is non-finite.