こんにちは。
反撃についてわからない事があるので質問させていただきます。
現在制作中のゲームで、反撃率を100%に設定したアクターが物理攻撃をされた場合、ダメージを受けずに反撃をしているのですが、これをダメージを受けたうえで反撃するようにするにはどのようにすればよいでしょうか?
【解決済み】追加能力値の反撃率について
【解決済み】追加能力値の反撃率について
最後に編集したユーザー ビービー [ 2016年9月18日(日) 15:04 ], 累計 1 回
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
Re: 追加能力値の反撃率について
色々やって見てはいるものの”ダメージを受けたうえで反撃”という事がなかなかできず困っています。
お知恵をお貸しください。
いちおうここまでやってみたことを書いておきます。
rpg_managers.jsをこのように書き換えてみました。
別パターンもやってみました。
とやってみて、”攻撃を受けたうえで反撃する”という事自体はこれでできていました。
しかしダメージ表示がおかしく、敵がアクターを攻撃したタイミングで、アニメーションはアクターに表示されるんですがダメージ表示が出ず、その後反撃で受けるはずのダメージ数値が攻撃をしたはずの敵に教示され、そのあとで反撃アニメーションがはじまり何の数値も出ずに終了します。
敵とアクターのHPを見るとダメージ表示がおかしいだけで内部では正常に動作しているようなのです。
ちなみにバトルログも問題なかったです。
どうすればダメージ表示を”最初の攻撃を受けた側””反撃を受けた側”とちゃんと表示できるようになるのでしょうか?
よろしくお願いします。
お知恵をお貸しください。
いちおうここまでやってみたことを書いておきます。
rpg_managers.jsをこのように書き換えてみました。
コード: 全て選択
BattleManager.invokeAction = function(subject, target) {
this._logWindow.push('pushBaseLine');
// if (Math.random() < this._action.itemCnt(target)) {
// this.invokeCounterAttack(subject, target);
// } else if
// を切り取って、
if (Math.random() < this._action.itemMrf(target)) {
this.invokeMagicReflection(subject, target);
} else {
this.invokeNormalAction(subject, target);
}
subject.setLastTarget(target);
this._logWindow.push('popBaseLine');
this.refreshStatus();
};
BattleManager.invokeNormalAction = function(subject, target) {
var realTarget = this.applySubstitute(target);
this._action.apply(realTarget);
this._logWindow.displayActionResults(subject, realTarget);
// ここにコピー
if (Math.random() < this._action.itemCnt(target)) {
this.invokeCounterAttack(subject, target);
}
};
コード: 全て選択
BattleManager.invokeAction = function(subject, target) {
this._logWindow.push('pushBaseLine');
if (Math.random() < this._action.itemCnt(target)) {
// ここを下の方から持ってきて追加
this.invokeNormalAction(subject, target);
//-----------------------------------------------
this.invokeCounterAttack(subject, target);
} else if (Math.random() < this._action.itemMrf(target)) {
this.invokeMagicReflection(subject, target);
} else {
this.invokeNormalAction(subject, target);
}
subject.setLastTarget(target);
this._logWindow.push('popBaseLine');
this.refreshStatus();
しかしダメージ表示がおかしく、敵がアクターを攻撃したタイミングで、アニメーションはアクターに表示されるんですがダメージ表示が出ず、その後反撃で受けるはずのダメージ数値が攻撃をしたはずの敵に教示され、そのあとで反撃アニメーションがはじまり何の数値も出ずに終了します。
敵とアクターのHPを見るとダメージ表示がおかしいだけで内部では正常に動作しているようなのです。
ちなみにバトルログも問題なかったです。
どうすればダメージ表示を”最初の攻撃を受けた側””反撃を受けた側”とちゃんと表示できるようになるのでしょうか?
よろしくお願いします。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
Re: 追加能力値の反撃率について
調べてみました。
どうやらBattleManager.updateActionメソッドは1回の実行につき1体分の処理しか想定しておらず、
invokeNormalActionとinvokeCounterAttackを同時に実行してしまうと
ダメージ表示対象が上書きされたりHPダメージがリセットされてしまったりするようです。
そこで、カウンター発生時はupdateActionを2回実行するようにし、
1回目はinvokeNormalAction、2回目はinvokeCounterAttackを実行するようにしてみました。
addとかdeleteとか書いてあるところが、追加、削除した部分です。
add startとadd endは、その間の行が追加した部分です。
this._counterは新しく追加した変数です。元のBattleManagerにはありません。
以上、まだ微妙に納得しきれない部分がありますが、こんな感じでいかがでしょうか。
どうやらBattleManager.updateActionメソッドは1回の実行につき1体分の処理しか想定しておらず、
invokeNormalActionとinvokeCounterAttackを同時に実行してしまうと
ダメージ表示対象が上書きされたりHPダメージがリセットされてしまったりするようです。
そこで、カウンター発生時はupdateActionを2回実行するようにし、
1回目はinvokeNormalAction、2回目はinvokeCounterAttackを実行するようにしてみました。
コード: 全て選択
BattleManager.updateAction = function() {
// add start
if (this._counter) {
this.invokeCounterAttack(this._counter.subject, this._counter.target);
this._counter = null;
return;
}
// add end
var target = this._targets.shift();
if (target) {
this.invokeAction(this._subject, target);
} else {
this.endAction();
}
};
BattleManager.invokeAction = function(subject, target) {
this._logWindow.push('pushBaseLine');
if (Math.random() < this._action.itemCnt(target)) {
this._counter = {subject:subject, target:target}; // add
this.invokeNormalAction(subject, target); // add
//this.invokeCounterAttack(subject, target); // delete
} else if (Math.random() < this._action.itemMrf(target)) {
this.invokeMagicReflection(subject, target);
} else {
this.invokeNormalAction(subject, target);
}
subject.setLastTarget(target);
this._logWindow.push('popBaseLine');
this.refreshStatus();
};
add startとadd endは、その間の行が追加した部分です。
this._counterは新しく追加した変数です。元のBattleManagerにはありません。
以上、まだ微妙に納得しきれない部分がありますが、こんな感じでいかがでしょうか。
Re: 追加能力値の反撃率について
調べていただきありがとうございます。
試してみたところダメージを受けたうえで反撃するようにすることができました。
これにて解決とさせていただきます。
本当にありがとうございました。
試してみたところダメージを受けたうえで反撃するようにすることができました。
これにて解決とさせていただきます。
本当にありがとうございました。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/