スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

途切れた航路図の補完

現在航路図の補完を実装中です。
これまでの補完なしの場合の航路図を繋げるかどうかの判定は以下のものです。
・移動距離が地図座標(横約4800ドット)で7ドット以上移動した場合その位置を記録する
・記録した位置の距離が15ドット未満の場合線として繋ぐ

間隔が15ドット以上の場合線が繋げられず、航路図が途切れます。
途切れる主な原因としては以下のものです。
・大航海時代Onlineのウインドウになにか他のウインドウが重なっていて画像解析に失敗

今回間隔が15ドット以上でもできるだけ航路図を繋げるため、以下の条件を追加します。
・間隔が15ドット以上の場合、途切れる前の移動ベクトルと途切れた先の移動ベクトルを比べ、
 角度差が16度以内なら線として繋ぐ
・繋げる間隔の最大は2000ドットとする

補完なし

補完あり

上が補完なし、下が補完ありとなります。
角度差が16度を越える場合補完されませんが、途切れるのはほとんどの場合
まっすぐ走っている状態であるため、問題ないと思っています。
尚、補完するかどうかの指定を設定ダイアログに含める予定です。

テーマ : 大航海時代Online - ジャンル : オンラインゲーム

Ctrl+右クリックで出るメニューに項目追加

海域変動システムの手動設定がやりづらいという報告が結構きているので、
Ctrl+右クリックで出るメニューに項目を追加することにしました。
以下のような感じになります。

メニュー追加

これで大航海時代Onlineの入港許可地図を見ながら直観的に設定できるのではないかと思います。
尚、大航海時代Onlineのアップデートが近いため、公開はアップデート後になる予定です。

テーマ : 大航海時代Online - ジャンル : オンラインゲーム

更なるCPU使用率の低減と安定化

現状でもそれほどCPUに負担をかけない交易MAP C#ですが、
個人的に気になる点があるのでそれを修正しました。

気になる点は以下のものです。
・文字列の表示をDirectXのDXライブラリに丸投げのため、表示する文字数が多くなるとCPUを多く消費してしまう
・航路図の描画で画面外の描く必要のない線を多く描いてしまっている

航路図はバウンディングボックスを細かくすることで描画負荷を軽減することにしました。
バウンディングボックスを可視化すると以下のようになります。

バウンディングボックス


文字列の描画でネックはアイテムリストです。
以下のように変更しました。

アイテムリスト


パッと見違いがあまり分からないかもしれませんが、
DirectXとWindowsコントロールのハイブリッド描画となっています。
うまくその他の部分に溶け込むように配置できたかなと思います。
この部分を大きく変えたため、動作チェックに時間がかかってしまいました。

危険海域変動システムの可視化

危険海域変動システムが実装されたときから少しづつ可視化を実装してたのですが、陸地のマスクをどうするかで結構迷いました。

地図のマスクを作りステンシルバッファに描画後、海域を矩形でフィルする、というのがスマートな気がしてたのですが、VRAMの使用量が単純に倍に増えてしまうという問題があります。

基本的にCPU、GPU共に利用率を最低限にし、大航海時代Onlineの動作に迷惑をかけないアプリケーションにするのが設計段階からの個人的な決めごとだったりするので、VRAMの使用量をあまり増やしたくなかったのです。

最終的には海域毎にマスク付きのテクスチャを作成するという方法で実装しています。
海域に陸地がない場合はそのまま矩形でフィルし、広い海域等で少しだけ島がある場合もマスク付きテクスチャを作成せず、単純に矩形でフィルするだけになっています。(ラパ・ヌイ等)
なので太平洋にある島は色が赤くなったり青くなったりします。

マスク有りとなしでは以下のような感じです。
マスク有り

マスクなし

尚、設定用のドクロアイコンはどうも評判が良くないのでなにか違うものに変更するかもしれませんが、適当なアイコンが思い浮かばないのでしばらくはこのままでいくと思います。

テーマ : 大航海時代Online - ジャンル : オンラインゲーム

コンパス解析のアルゴリズム

コンパス解析は基本的にオリジナル交易MAPと同じものです。
北を指す黄色の矢印がどこにあるかを画像から解析します。
最終的に256ヵ所の点から場所を探しますが、点の位置は以下のような感じになっています。

コンパス 

解析は以下のように行われます
・1つ飛ばしに黄色の場所を探します(最大128回の検索)
・見つかった場所以外に黄色の場所がないか探します(+-5で最大10回の検索)
・最小と最大を足して2で割った場所を角度とします
・2で割ると小数が出ることがあり、この場合512段階の分解能となります


・10で黄色が見つかる
・最小として9で黄色が見つかる
・最大として12で黄色が見つかる
・(9+12)/2=10.5となり、10.5を角度とする

テーマ : 大航海時代Online - ジャンル : オンラインゲーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。