したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

RTX専用スレ

577Mystle </b><font color=#FF0000>(M.B.S.4s)</font><b>:2003/10/03(金) 12:20
>>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での位置決定法は、同一スキルコードがあればその直下、同一スキルコードがなければ
同一スキルクラスの最下段に挿入、というものでした。
とても重かったため止めました(挿入処理の重さは、排他制御でのパフォーマンス低下に直結)

スキルコードレベルでのソートを放棄すればスキルを使用した順にバーは出せますが、たとえば
ブレス-キリエ-ブレス-キリエ、のように同一スキルが分散する現象を回避できなくなります。

まぁ、一段落ついたら、高速なアルゴリズムでも探してみようかな、と思いますです。




掲示板管理者へ連絡 無料レンタル掲示板