1

私はスプライト アートを扱っており、衝突検出用のポリゴン (頂点の配列) を生成する必要があります。

getPixel(x, y)ピクセルの色を取得するために使用できるメソッドがあります。派手な色の検出などは必要ありません。単色のピクセルと透明なピクセルだけです。脳が溶け始める前に私が始めたことは次のとおりです。

boolean[] hasColor = new boolean[size];

for (int i = 0; i < size; i++) {
    int row;
    row = i % width;
    if ((pixmap.getPixel(i, row) != 0) || (pixmap.getPixel(row, i) != -256)) {
        hasColor[i] = true;
    } else {
        hasColor[i] = false;
    }
}

これにより、どのピクセルが空で、どのピクセルがそうでないかを追跡する必要があります。でも、ここからどこへ行けばいいのかわからない。

助けになるアルゴリズムや何かがありますか? 誰かが入力を提供できますか?

4

1 に答える 1

0

あなたが持っているのはラスターアートワークです。

必要なのはベクター アウトラインです。

ベクターからラスターへの変換は簡単ですが、ラスターからベクターへの変換は簡単です。

考えられるワークフローの 1 つを次に示します。

  1. アートワークを白黒画像に変換します (ピクセル カラーの存在/非存在マトリックスなど)。
  2. Adobe Illustrator の「ライブ トレース」機能を使用して、この画像をベクトル化します。
  3. アウトライン ポリゴンを読みやすい形式にエクスポートします。
  4. これを衝突検出の入力として使用します。

別のアプローチを次に示します。

A) 次のように、アウトラインが六角形のように見えると仮定します。

       *****
      *     *
     *       *
    *         *
     *       *
      *     *
       *****

B) ピクセルの何パーセントが六角形の内側にあるかを確認することによって計算される、輪郭の良さとして「適合」を定義します (上に示した規則的な形である必要はありません)。C) 最適なフィットが見つかるまで (または疲れるまで)、頂点の位置を変更します。

ステップ (C) は、もちろん、最も難しいものです。さらに、スプライトにさらに頂点が必要な場合は、代わりに八角形/n 角形から始める必要がある場合があります。

于 2013-03-24T23:54:28.823 に答える