レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
RTX専用スレ
-
>>575
実験モツカレデス-
結論から申し上げますと、仕様通りの動作です。
実は、上に伸びるバーと下に伸びるバーではソート順が異なります
○上に伸びるバー:自分頭上、タゲ頭上、退避エリア(OuterGraphY/Y2 < 0 の場合)
○下に伸びるバー:自分足元、タゲ足元、退避エリア(OuterGraphY/Y2 > 0 の場合)
/*
RTXでは画面内の全てのタイマーバーを(表示位置に拠らず)ひとつのコンテナ(std::set)に格納して
います。(setの要素である)タイマーバー構造体のメンバとしてソートキー(DWORD)を保有し、これは
上位WORDがスキルクラス(デフォは CLS_SPR=0x0000 〜 CLS_MONS=0x0008; [Sort]設定で可換)で、
下位WORDはスキルID(SM_SWORD=0x0002 〜 POT_VERSERK=0x0151)と なっています。
ソート作業(というかタイマー発動時の序列決定)はコンテナ単位で行われていますが、バーの描画は
上に伸びるバーは最下段から、下に伸びるバーは最上段から行いますから、結果として
バーの伸び方向で見た目上のソートは逆順になります。
*/
早い話、頭上や画面下の退避エリアに表示されたバーは最下段のキーが若く、足元や画面上の
退避エリアに表示を設定したバーは最上段のキーが若くなります。
というわけで、この動作は現在のところ仕様です。
各表示部位ごとに再ソートを行うことで伸び方向に拠らずソート順を一意にすることは可能
ですが、それに要する時間的リソースは現実的ではない模様。
/*
ソートキーをsigned intにして、上方向に伸びるバーのソートキーには絶対値をそのままにマイナスを
つける、という方法も考えましたが、退避キーで頭上→画面上隅に移動、のように伸び
方向が随時変化する場合に対応できません。_| ̄|○ダレカ イイ アイデア アル?
*/
出した順を保持しない現状についてですが、
旧RoTimerでの位置決定法は、同一スキルコードがあればその直下、同一スキルコードがなければ
同一スキルクラスの最下段に挿入、というものでした。
とても重かったため止めました(挿入処理の重さは、排他制御でのパフォーマンス低下に直結)
スキルコードレベルでのソートを放棄すればスキルを使用した順にバーは出せますが、たとえば
ブレス-キリエ-ブレス-キリエ、のように同一スキルが分散する現象を回避できなくなります。
まぁ、一段落ついたら、高速なアルゴリズムでも探してみようかな、と思いますです。
|
|
|
掲示板管理者へ連絡
無料レンタル掲示板