私が開発しているゲーム用のSVG生成マップがあります。私はオープンソースのゲームに問題はなく、HTMLやSVGなどのオープンなWebテクノロジーを使用しています。そこに問題はありません。SVGから重要なデータを隠す
しかし、同時に、私はプレイヤーが全世界の地図を見るか、リバースエンジニアリングすることができないようにしたい(真の探検を維持するために)。今のところ私はシークレットでありバージョン管理されていないシードを使ってマップを生成します。アルゴリズムが知られているにもかかわらず、好奇心を持ったプレイヤーはオープンソースコードを使って「ゲームのような世界」を生み出すことができますが、それは正確なものではありません。これは「グローバル」問題を解決します。
しかし、SVGは1つのボロノイ図としてページに表示されるので、すべてのデータ(ポイントの座標は気にしません)は抽出可能です。 SVGからリソース、土地タイプ、生物種、気候などのデータを取得して、集落の良好な場所を見つける上で手を差し伸べることができます。
これを防ぐ方法はありますか?私が考えたので、プレイヤーはビジョンが限られている次のいずれか
- すべての全体ボロノイ図(ちょうど目に見える部分)をレンダリングするが、それは行うことは潜在的に難しいことができない(多分、まだそれに見ていません) 、 だけで、私は両方のアプローチの利点を見ることができ、正しく行われていれば、それも全部/レンダリングをレンダリングしていない(パフォーマンスを向上させることができ
見える場所にSVGグラフにリソース/土地タイルデータを挿入しますより少ないデータで)、パフォーマンスに影響を与えることなくより大きな世界につながります。
問題を解決するための他のアイデアやプログラミング/アーキテクチャーアプローチはありますか?
(私はそれが助け念のVue.js、d3.js、SVG-パン・ズームとLaravelのバックエンドを使用しています。)
ゲームの世界でユーザーの現在の座標を部分的にレンダリングするだけで何かをしているようです。3Dゲームプログラミングでは、クォッドツリーと呼ばれるテクニックを使用して部分的にレンダリングすることがよくあります。現在の位置をツリー内でマップし、ツリー内の現在の位置に基づいてキャンバスにレンダリングできるように、最大x/y値などの最小限の世界パラメータを格納できます。 – Alex
私の最初のコメントを除いて、クライアントにダウンロードされたすべてのアセットを一度に欲しがらないようにするには、何らかのプログレッシブレンダリングを行うことができます。ユーザーが世界をさらに行き来する(さらに深くツリー内で)、その後、キャンバスを更新するためにこれらのアセットを提供し続けることができます。これはまたあなたの最初の読み込み時間を減らしますが、プレーヤーが遅い接続にある場合にも欠点を持っていることに気づくでしょう - ボトルネックになる可能性はありますが、確かに可能です – Alex
@Alex私は数学的にvoronoiセルユーザーの現在のレベルの深いネイバーは、画面に表示されているものだけを表示します(パフォーマンスが大幅に向上しました)。私はそれらをユーザーから隠し、プレーヤーの周りに円形レンダリングゾーンを配置して「視界」を作成しました。また、プログレッシブレンダリングは、ゲームが非常に遅いペースで行われ、旅行は文字通り実生活で何時間も何日もかかるので、行く方法です。誰もインターネットが遅いです。 :)それは大きな妥協です。申し訳ありませんが長い返信は、私はそれを受け入れる答えとしてあなたのコメントを再フォーマットできる場合。 –