2009-08-06 25 views
2

ビューベースのアプリケーションで完全なピクセル衝突を実行することは可能ですか?私はサンプルコードを探していましたが運がありません...特定の色の衝突を表すためにカラービットマップを使用できますか?ピクセルの完全な衝突?

答えて

2

できます。あなたがCGImageを使っても簡単です。

ピクセル値を読み取ってヒットグリッド(基本的には2x2マトリックス)を構築し、それをゲームオブジェクトクラスに格納するために2Dブール値配列を作成することができます。

あなたは配列ブール値に画素データを読み出し、その後、ループに使用CGImage (the code is here)の画素データに直接アクセスする必要があるであろう:doesnの明らかに、

BOOL pixelGrid[xPixels][yPixels]; 
for (int i = 0; i < xPixels; i++) { 
    for (int j = 0; j < yPixels; j++) { 
     pixelGrid[i][j] = pixelIsOpaque(i, j); 
    } 
} 

方法pixelIsOpaque()上記」サンプルコードがピクセル値を抽出するために与えたもので置き換えてください。

このグリッドを作成したら(プログラムの最初にそれを生成し、結果の2D配列をゲームオブジェクトの中に格納します)、次にあなたはピクセルが存在するかどうかを保存しています衝突検出方法が必要です。

BOOL detectCollision(BOOL *pixelGrid1, BOOL *pixelGrid2) { 
BOOL result = NO; 
    for (int i = 0; i < xPixels; i++) { 
     for (int j = 0; j < yPixels; j++) { 
      if (pixelGrid1[i][j].opacity != 0 && pixelGrid2[i][j].opacity != 0]) { 
       result = YES; break; 
      } 

    } 
} 
return result; 
} 

私は100%のコンパイルではないかもしれないので、私はその場でこのコードを書いたが、私は、それはあなたのアイデアを与える願っています。 これを簡単に変更することはできますが、不透明度と比較するのではなく、元の色データを取得するためにピクセルの色の値と比較するだけです。see here

+0

+1優れた情報です。私は実際に自分自身の完全なピクセルの衝突に興味がありました。今週末にこれがうまくいくかどうか試してみるつもりです。私はパフォーマンスについて懸念していますが、それは後で取り組むことができる他の問題です。 – Tovi7