2

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

4

1 に答える 1

2

あなたはできる。ただし、 CGImageを使用すると簡単に見えます。

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

CGImage (コードはこちら)のピクセル データに直接アクセスする必要があります。次に for ループを使用して、ピクセル データを配列ブール値に読み込みます。

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() メソッドは明らかに存在しません。ピクセル値を抽出するためにサンプル コードが提供するものに置き換えるだけです。ピクセルが存在するかどうかを保存しています(基本的に、ピクセルが不透明度> 0かどうかを確認してください)

このグリッドを取得したら (プログラムの最初に一度生成し、結果の 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% コンパイル可能ではないかもしれませんが、アイデアが得られることを願っています。これは簡単に変更できますが、不透明度と比較する代わりに、ピクセルの色値と比較するだけです。生の色データを取得するには、こちらを参照してください。

于 2009-09-06T17:57:31.683 に答える