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

技術情報交換スレ

129Mystle </b><font color=#FF0000>(M.B.S.4s)</font><b>:2004/12/12(日) 17:19
RTXの3D計算には新型、旧型の2種類の方法があり、用途に応じ使い分けています。
まず新型から。

ROでは地面に配置されたり除去されたりするオブジェクトが大きく分けて3種類ありまして
・キャラクタオブジェクト (PC、NPC、敵)
・スキルオブジェクト (範囲魔法で敷設されるやつ)
・アイテムオブジェクト (ドロップアイテム)

まず基底となるオブジェクトクラスがあり、ここでゲーム内座標、スクリーン描画座標、通しID
(キャラでいうアカウントID)、種別ID(キャラでいう職業ID)、スプライトナンバーなどが定義されています。

ここからキャラクタ、スキル、アイテムの各オブジェクトクラスが派生しており、例えばキャラクタオブジェクトなら
さらに、移動速度や直前の立ち位置、状態変化、髪型、詠唱バークラスへのポインタ、などなど
をメンバとして持っています。

基底クラスにはコンストラクタ/デストラクタしか無いようですが、キャラオブジェクトには移動や詠唱開始などの
メンバ関数もたくさんあります(呼ぶとアクションがみられる)。

プレイ中は、画面上に表示されているオブジェクトの数だけこれらクラスのインスタンスが生成されて
おり、そのすべてがキャラ/スキル/アイテムの3つのコンテナ(std::list)で管理されています。

RTXはこれらコンテナをダイレクトに読みに行くことで、パケットとは無関係に、任意の瞬間に画面上の
全てのオブジェクトの情報へアクセスすることを可能にしています。

これには、その瞬間におけるオブジェクトの(計算済み)描画座標も含まれており、したがって
このクラスさえ解析できれば、キャラや敵の動きに完璧に同期した描画をするのは容易です。

支援スレではVer6の4T4lYjSM氏がかなり真実に迫られています。氏の呼ばれるところの
CoordInfo なる構造体は、実はROの座標管理クラスにほかならず、例えば現パッチなら、
CoordInfo+12から前述のコンテナが置かれているのです。
(ちなみにCoordInfo+4は親ポインタ(to MapInfo)、CoordInfo+0はメンバ関数のベクタテーブル)

余談ですがPvPではこのコンテナの一部が無効化されます(=PvPで色々動かない理由)。




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