2016-10-10 13 views
2

私が開発しているゲーム用のSVG生成マップがあります。私はオープンソースのゲームに問題はなく、HTMLやSVGなどのオープンなWebテクノロジーを使用しています。そこに問題はありません。SVGから重要なデータを隠す

しかし、同時に、私はプレイヤーが全世界の地図を見るか、リバースエンジニアリングすることができないようにしたい(真の探検を維持するために)。今のところ私はシークレットでありバージョン管理されていないシードを使ってマップを生成します。アルゴリズムが知られているにもかかわらず、好奇心を持ったプレイヤーはオープンソースコードを使って「ゲームのような世界」を生み出すことができますが、それは正確なものではありません。これは「グローバル」問題を解決します。

しかし、SVGは1つのボロノイ図としてページに表示されるので、すべてのデータ(ポイントの座標は気にしません)は抽出可能です。 SVGからリソース、土地タイプ、生物種、気候などのデータを取得して、集落の良好な場所を見つける上で手を差し伸べることができます。

これを防ぐ方法はありますか?私が考えたので、プレイヤーはビジョンが限られている次のいずれか

  • すべての全体ボロノイ図(ちょうど目に見える部分)をレンダリングするが、それは行うことは潜在的に難しいことができない(多分、まだそれに見ていません) 、
  • だけで、私は両方のアプローチの利点を見ることができ、正しく行われていれば、それも全部/レンダリングをレンダリングしていない(パフォーマンスを向上させることができ

見える場所にSVGグラフにリソース/土地タイルデータを挿入しますより少ないデータで)、パフォーマンスに影響を与えることなくより大きな世界につながります。

問題を解決するための他のアイデアやプログラミング/アーキテクチャーアプローチはありますか?

(私はそれが助け念のVue.js、d3.js、SVG-パン・ズームとLaravelのバックエンドを使用しています。)

+0

ゲームの世界でユーザーの現在の座標を部分的にレンダリングするだけで何かをしているようです。3Dゲームプログラミングでは、クォッドツリーと呼ばれるテクニックを使用して部分的にレンダリングすることがよくあります。現在の位置をツリー内でマップし、ツリー内の現在の位置に基づいてキャンバスにレンダリングできるように、最大​​x/y値などの最小限の世界パラメータを格納できます。 – Alex

+2

私の最初のコメントを除いて、クライアントにダウンロードされたすべてのアセットを一度に欲しがらないようにするには、何らかのプログレッシブレンダリングを行うことができます。ユーザーが世界をさらに行き来する(さらに深くツリー内で)、その後、キャンバスを更新するためにこれらのアセットを提供し続けることができます。これはまたあなたの最初の読み込み時間を減らしますが、プレーヤーが遅い接続にある場合にも欠点を持っていることに気づくでしょう - ボトルネックになる可能性はありますが、確かに可能です – Alex

+0

@Alex私は数学的にvoronoiセルユーザーの現在のレベルの深いネイバーは、画面に表示されているものだけを表示します(パフォーマンスが大幅に向上しました)。私はそれらをユーザーから隠し、プレーヤーの周りに円形レンダリングゾーンを配置して「視界」を作成しました。また、プログレッシブレンダリングは、ゲームが非常に遅いペースで行われ、旅行は文字通り実生活で何時間も何日もかかるので、行く方法です。誰もインターネットが遅いです。 :)それは大きな妥協です。申し訳ありませんが長い返信は、私はそれを受け入れる答えとしてあなたのコメントを再フォーマットできる場合。 –

答えて

-2

あなたが与えたアイデアは完璧ですが、それを実現するために、あなたが必要努力して時間を費やす。

私は提案があります。ほとんどのユーザーにとっては機能しますか。おそらく、一部のユーザーがそれを「ハックする」でしょう。しかし、私はそれが時代の95%の間働くと信じています。

左上の点0,0から右下の点まで非常に大きな四角形を作成できます。長方形は白くなり、他のすべての図形になります。

この方法で、誰かがSVGをダウンロードする場合、私たちは何も見ません。ちょうど大きな白い長方形。

ゲームのHTMLでは、このセレクタを非表示にするためにCSSセレクタを追加できます。

この方法に従うと、ほとんどのユーザー(写真編集ソフトウェアを持たない)は地図を見ることができません。

HTMLで要素を検査する方法を知っているユーザーは、マップを参照することがあります。しかし、私は、白い箱を見る彼らのほとんどが、何かが背後にあるとは信じません。

これは他のより守備的な方法を行う前に行うことができる簡単な一時的なアプローチだと思います。

関連する問題