パラメータが巻き戻る現象についての考察
現状の処理として、
・シナリオ、エネミー、フィールドイベント
が全て同時に実行されるような作りをしている場合、最後に実行された処理によって全て上書きされる可能性が高い。
例えば
- チャットバトルでエネミーと戦う
- スキルをトリガーとしてプレイヤーのatk+1する
の2つが同時に動くとすると、
- エネミーにスキル攻撃する
- エネミーが反撃してダメージを受ける & シナリオのトリガー(スキル使用)によってプレイヤーのatkを+1する
- プレイヤーのatkが上昇し、HPのダメージは無かったことになる
ダメージを受けてHPの低下が反映された後に、atk+1という順になればいいけれど、それぞれが同時に動くため、どっちが先に処理が終わったとしても、最後に反映された変更で上書きされてしまう。
a. HP8 ATK1 ( ダメージ2が反映された方 )
b. HP10 ATK2 ( atk+1が反映された方 )
で、ダメージ処理"a"はあったが、その後の"b"が上書きしちゃっている。
ここで、"b"が実行されるまでに十分な時間(ダメージを受けて、それをローカルに取得して反映されるまでの500ms程度)があれば、おそらく問題ない。
ユーザー側の暫定対処法
- 同時に実行させない
- スキルをトリガーとした処理でパラメータ増加させる前に「メッセージ」を挟むなど時間を少し開ける
WoRの実装としての対処法
- 差分だけ送信する。パラメータの変化があった部分だけ送信(atk+1という情報のみ)してサーバー側でマージするようにすれば対処可能かもしれない…
0コメント