長方形以外のホットスポットを作成し、クリックを検出する


7

不規則なホットスポットのあるゲーム(たとえば、リスク、またはParadoxのHearts of IronやCrusader Kingsなどの戦略ゲーム)については、どのようにしてください

  1. コードで、不規則な形状の非長方形のホットスポット(マップ上のテリトリーのように?)を定義しますか?

  2. ホットスポットを追跡してゲームにインポートするには、どのツールを使用できますか?

  3. 誰かがそのようなホットスポット内をクリックしたかどうかを検出するためのアルゴリズムは何ですか?

回答:


9

ベクトル/ポリゴンアプローチ以外に、これを行う別の方法はビットマップを使用することです。

ビットマップの各「色」が地域(フランス、ベルギーなど)を表す場合、ビットマップのどのピクセルがクリックされたかを調べ、色を調べ、その色が対象の地域を表しているかどうかを判断するだけです。特定の色で重複する領域を表現したり、色を領域のビットマスクとして扱うこともできます。

ツールに関しては、アーティスト/コンテンツプロデューサーにピクセル編集ツールでビットマップを作成してもらいます。たとえば、PhotoshopまたはGimpを使用している場合、さまざまな地域(フランス、ベルギーなど)を名前付きレイヤーまたは1つのレイヤーとして表すことができますが、色に基づいて地域を区別できます。次に、画像/レイヤーをゲーム内部の目的に適した形式に変換するツールを作成します。

ゲームの内部フォーマットは、行ごとにランレングス圧縮されている可能性が非常に高いです(http://en.wikipedia.org/wiki/Run-length_encodingを参照)。この方法で非常に優れた圧縮率を実現できるはずです。行の隣接するピクセルは同じ領域に属することが非常に多いからです。次に、アルゴリズムは、マウスの現在のy座標について、その行をトラバースし、その行が属する実行、したがって対応する領域を特定します。


似たようなものを書こうとしていたのですが、これはポリゴンで遊ぶよりもはるかに簡単です。
aaaaaaaaaaaa

ええ、あなたもピクセル完璧な精度を取得します。ポリゴンをいじるのはごちゃごちゃです。
Michael Coleman

2
+1(簡単で高速なソリューションであるため)。ただし、より多くのデータを使用し、ポリゴンアプローチほど解像度に依存しない場合があります。
bummzack 2010

ここにテクニックの正確な説明があります:xnaresources.com/default.asp?page
Tutorial

inkscapeのようなベクトルプログラムを使用してマスクを作成できます。これにより、たとえば* .bmp
Exilyth

7

ホットスポットを、画像をオーバーレイする一連のポリゴンとして定義する必要があります。次に、ユーザーがマップをクリックしたときに、ポリゴン(クリック可能なホットスポット)のリストを調べて、クリックポイントが(もしあれば)どのポイントの内側にあるかを確認します。

また、HTMLのイメージマップがどのように行われるかを調べることもできます。HTMLで作業するわけではありませんが、基本的にはHTMLを実装したいものです。ホットスポットを長方形、円、および多角形(必要なもの)として定義できます。

これは、いくつかのアイデアを提供する可能性があるHTMLイメージマップを説明するWebページです。http//www.javascriptkit.com/howto/imagemap.shtml

ポイントがポリゴンにあるかどうかを判断するアルゴリズムに関するWikipediaの記事は次のとおりです。http//en.wikipedia.org/wiki/Point_in_polygon



1

この種のものでは、マスクとして使用される画像を使用し、透明/不透明または黒/白のピクセルを使用します。マスクは描画されませんが、概念的にはマスクがカバーするマップ領域上に「配置」されます。

クリックしたら、まず画像の境界ボックスをチェックします。外の場合、プレーヤーは領域をクリックしませんでした。内側にある場合は、ピクセルを確認してください。透明/黒の場合、プレーヤーは領域をクリックしていません。そうでなければ、彼はそうしました。

メモリ使用量が深刻な問題である場合は、ハーフサイズの画像を使用して、適切な画面を画像座標変換に適用できます。ピクセルパーフェクトな検出は得られませんが、この場合はおそらく必要ありません。

また、透明/不透明にする場合は、マスクをPNG(またはその他のロスレス圧縮スキーム)として保存するか、高いしきい値(アルファ> 0ではなくアルファ> 128)を使用します。そうでない場合、JPEGアーティファクトによって一部の透明ピクセルがそれほど透明に表示されない可能性があります(alpha = 0ではなくalpha = 1または2など)。


-1、これはjpaverのメソッドのかなり無駄なバージョンです。

1
詳細により異なります。通常、ボタンの画像をマスクとして再利用するため、このメソッドは、jpaverのメソッドよりも少ないメモリを使用することになります。
ggambett
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.