ใน Cocos2D ฉันจะตรวจสอบการชนกับรูปร่างที่ผู้ใช้วาดเองตามอำเภอใจได้อย่างไร


10

ฉันต้องการตรวจจับการปะทะกันระหว่างสไปรต์และรูปร่างที่ผู้ใช้สร้างขึ้นของการจัดเรียงบางอย่าง

ตัวอย่างเช่น. มี 3 วัตถุบนหน้าจอ ผู้ใช้ใช้นิ้วของพวกเขาและวาดรูปร่างผิดปกติประมาณ 2 ของวัตถุ ฉันต้องการตรวจจับวัตถุ 2 ชิ้นนั้น

รูปร่างของผู้ใช้ในสีม่วงวัตถุของเกมเป็นสีเขียวและสีแดง

ฉันจะใช้วิธีนี้อย่างมีประสิทธิภาพโดยใช้ Cocos2D ได้อย่างไร

คำตอบ:


10

มีวิธีแก้ปัญหาที่ง่ายมากสำหรับตัวอย่างนั้น

ฉันสมมติว่าคุณมีรูปร่างตามอำเภอใจเป็นเพียงชุดของคะแนน

วาดรังสีจากวัตถุแต่ละชิ้นในทิศทางใด ๆ หากจำนวนครั้งที่ตัดกันส่วนของเส้นตรงบนรูปร่างของคุณเป็นเลขคู่ (รวมถึงศูนย์) แสดงว่าคุณอยู่นอกรูปร่าง

หากจำนวนครั้งที่คุณตัดกันเป็นคี่คุณอยู่ภายในวัตถุ

การชนกันของส่วนของ Ray / Line เป็นวิธีการที่ง่ายในการค้นหา / ติดตั้ง


3

แน่นอนว่าฉันต้องคิดให้ดีสำหรับเกม Star Catch อาจมีวิธีที่ดีกว่าในการทำ แต่นี่คือวิธีที่ฉันทำ ฉันพบอัลกอริทึมออนไลน์จริง ๆ (ขออภัยฉันจำแหล่งที่มาไม่ได้) ฉันค้นหาการตรวจหาจุดภายในรูปหลายเหลี่ยม

ฉันสร้าง NSMutableArray เพื่อเก็บคะแนนของฉัน ฉันเพิ่มคะแนนในอุปกรณ์สัมผัสของฉัน

- (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;
}

แจ้งให้เราทราบหากสิ่งนี้มีประโยชน์


2

หนังสือ "การตรวจจับการชนกันแบบเรียลไทม์" มีส่วนเกี่ยวกับการตรวจจับการชนกันของบรรทัด / ส่วน ตัวอย่างผ่าน Google หนังสือ: http://ow.ly/2gjQf


0

สำหรับการตรวจสอบการชนกันของพิกเซลจะมีชุดการสอนที่ดีในเว็บไซต์นักพัฒนา XNA
http://creators.xna.com/th-th/tutorial/collision2dperpixeltransformed

การเพิ่มประสิทธิภาพหนึ่งที่คุณสามารถใช้ที่ไม่ได้ใช้ในบทเรียนเหล่านั้น (ผิดปกติพอ) คือในกรณีส่วนใหญ่จะต้องตรวจสอบเฉพาะโครงร่างประหยัดรอบอันมีค่า .

แก้ไขเพื่อเพิ่ม: คำตอบหมัด, อ่านคำถามผิด บทช่วยสอนยังคงค่อนข้างดีแม้ว่าคุณจะต้องการอ่านข้อมูลต่อพิกเซลแช่แข็ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.