Di Cocos2D, bagaimana cara memeriksa tabrakan terhadap bentuk yang dibuat pengguna secara sewenang-wenang?


10

Saya ingin mendeteksi tabrakan antara sprite dan bentuk yang dibuat pengguna.

Sebagai contoh. Ada 3 objek di layar. Pengguna mengambil jari mereka dan menggambar bentuk abnormal di sekitar 2 objek. Saya perlu mendeteksi 2 objek tersebut.

bentuk pengguna dalam warna ungu, objek game berwarna hijau dan merah

Bagaimana cara saya mendekati ini secara efisien menggunakan Cocos2D?

Jawaban:


10

Ada solusi yang sangat mudah untuk contoh khusus itu.

Saya berasumsi bentuk sewenang-wenang Anda hanya serangkaian poin.

Gambarlah sinar dari masing-masing benda Anda ke segala arah. Jika berapa kali memotong segmen garis pada bentuk Anda genap (termasuk nol), Anda berada di luar bentuk.

Jika berapa kali Anda berpotongan aneh, Anda berada di dalam objek.

Tabrakan segmen garis / sinar adalah algoritma yang cukup mudah ditemukan / diimplementasikan.


3

Tentu, saya harus memikirkannya untuk game Star Catch saya. Mungkin ada cara yang lebih baik untuk melakukannya tetapi ini adalah bagaimana saya melakukannya. Saya benar-benar menemukan algoritma online (maaf saya tidak ingat sumbernya) Saya melakukan pencarian untuk mendeteksi titik di dalam poligon.

Saya membuat NSMutableArray untuk mempertahankan poin saya. Saya menambahkan poin di layar sentuh saya.

- (BOOL) testNodeInLoop:(CCNode *)node {

    CGPoint prev;

    // This is more accurate point for the node
    CGPoint absPoint = [node convertToWorldSpace:CGPointZero];

    float x = absPoint.x;
    float y = absPoint.y;

    BOOL isIn = NO;

    CGPoint cp;

    for(int i = 0, j = [points count] - 1; i < [points count]; j = i++) {
        [[points objectAtIndex:i] getValue:&cp];
        [[points objectAtIndex:j] getValue:&prev];

        if( ((cp.y > y) != (prev.y > y)) && (x < (prev.x -cp.x) * (y - cp.y) / (prev.y - cp.y) + cp.x)) {
            isIn = !isIn;
        }
    }
    return isIn;
}

Beri tahu saya jika ini bermanfaat.



0

Untuk pemeriksaan tabrakan pixelwise ada seri tutorial yang bagus di situs pengembang XNA.
http://creators.xna.com/en-US/tutorial/collision2dperpixeltransformed

Satu optimasi yang dapat Anda gunakan yang tidak digunakan dalam tutorial tersebut (anehnya) adalah bahwa dalam kebanyakan kasus hanya garis besar yang perlu diperiksa, menghemat siklus berharga. .

Diedit untuk menambahkan: Jawaban buruk, salah membaca pertanyaan. Tutorialnya masih lumayan bagus jika Anda ingin membaca tentang per pixel coldet.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.