के साथ साइड ए स्क्वायर को निर्धारित करें, इसलिए ऐप के लिए मैं काम कर रहा हूं, मेरे पास दो क्यूब टकराव हैं। मैं इसे मानक तरीके से जांचता हूं। ऐप मुझे बताता है कि जब वे मेरी "didBeginContact" विधि में टकराते हैं।स्प्राइटकिट -
-(void)didBeginContact:(SKPhysicsContact *)contact {
if (contact.bodyA.categoryBitMask == WALL_CATEGORY && contact.bodyB.categoryBitMask == CHARACTER_CATEGORY) {
CGPoint point = contact.contactPoint;
}
}
तो मुझे पता है जहां टकराव होता है, लेकिन क्योंकि यह दो वर्गों है यह कोनों सहित ओर के साथ किसी भी बिंदु पर हो सकता है। तो मैं कैसे जांच करूंगा कि बाएं/दाएं/ऊपर/नीचे टकराव विशेष रूप से है?
संपादित करें: सही उत्तर: ऐसा करने का सबसे साफ तरीका नहीं हो सकता है लेकिन यह काम करता है। उम्मीद है कि यह भविष्य में किसी की मदद करेगा।
m_lNode = [SKNode node];
m_lNode.position = CGPointMake(-(CHARACTER_SIZE/2), 0);
m_lNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(1, m_character.size.height)];
m_lNode.physicsBody.allowsRotation = NO;
m_lNode.physicsBody.usesPreciseCollisionDetection = YES;
m_lNode.physicsBody.categoryBitMask = CHARACTER_L_CATEGORY;
m_rNode = [SKNode node];
m_rNode.position = CGPointMake((CHARACTER_SIZE/2), 0);
m_rNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(1, m_character.size.height)];
m_rNode.physicsBody.allowsRotation = NO;
m_rNode.physicsBody.usesPreciseCollisionDetection = YES;
m_rNode.physicsBody.categoryBitMask = CHARACTER_R_CATEGORY;
m_tNode = [SKNode node];
m_tNode.position = CGPointMake(0, (CHARACTER_SIZE/2));
m_tNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(m_character.size.width , 1)];
m_tNode.physicsBody.allowsRotation = NO;
m_tNode.physicsBody.usesPreciseCollisionDetection = YES;
m_tNode.physicsBody.categoryBitMask = CHARACTER_T_CATEGORY;
m_bNode = [SKNode node];
m_bNode.position = CGPointMake(0, -(CHARACTER_SIZE/2));
m_bNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(m_character.size.width, 1)];
m_bNode.physicsBody.allowsRotation = NO;
m_bNode.physicsBody.usesPreciseCollisionDetection = YES;
m_bNode.physicsBody.categoryBitMask = CHARACTER_B_CATEGORY;
[m_character addChild:m_tNode];
[m_character addChild:m_bNode];
[m_character addChild:m_lNode];
[m_character addChild:m_rNode];
-(void)didBeginContact:(SKPhysicsContact *)contact {
if (contact.bodyA.categoryBitMask == WALL_CATEGORY) {
switch (contact.bodyB.categoryBitMask) {
case CHARACTER_T_CATEGORY:
NSLog(@"Top");
m_isHitTop = true;
break;
case CHARACTER_B_CATEGORY:
NSLog(@"Bottom");
m_isHitBottom = true;
break;
case CHARACTER_L_CATEGORY:
NSLog(@"Left");
m_isHitLeft = true;
break;
case CHARACTER_R_CATEGORY:
NSLog(@"Right");
m_isHitRight = true;
break;
}
}
}
कुछ प्रासंगिक कोड जोड़ा गया। यह मेरा कोड है इसलिए अन्य चीजों के साथ चर है लेकिन आपको इसे समझने में सक्षम होना चाहिए।
आपकी पहली विधि वास्तव में अच्छी तरह से काम करती है, मुझे नहीं पता कि मैंने इसके बारे में क्यों नहीं सोचा। धन्यवाद! – CMilby
क्या आपको यह सही जवाब के रूप में चिह्नित करने पर ध्यान देता है अगर इससे आपकी मदद मिली? – hamobi