Ios7 SpriteKit中两个SKSpriteNode之间的碰撞检测?

Ios7 SpriteKit中两个SKSpriteNode之间的碰撞检测?,ios7,xcode5,sprite-kit,collision-detection,Ios7,Xcode5,Sprite Kit,Collision Detection,我必须检测两个SKSpriteNode(墙,人)之间的碰撞,这是SKNode背景的子节点。背景节点是主SKScene游戏场景类的子节点。当我想使用该方法检测碰撞时 - (void) didBeginContact:(SKPhysicsContact *)contact { SKPhysicsBody *firstBody, *secondBody; if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitM

我必须检测两个SKSpriteNode()之间的碰撞,这是SKNode背景的子节点。背景节点是主SKScene游戏场景类的子节点。当我想使用该方法检测碰撞时

- (void) didBeginContact:(SKPhysicsContact *)contact {
    SKPhysicsBody *firstBody, *secondBody;

    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
    {
        firstBody = contact.bodyA;
        secondBody = contact.bodyB;
    }
    else  {
        firstBody = contact.bodyB;
        secondBody = contact.bodyA;
    }
    NSLog(@"contact happened");
}
-(void)didBeginContact:(skphysiccontact*)联系人{
SKPhysicsBody*第一个Body,*第二个Body;
if(contact.bodyA.categoryBitMask

但是没有发现碰撞检测。请帮助。

您可能遇到以下两个问题之一:

  • 您没有设置
    SKPhysicsWorld
    对象的
    contactDelegate
    属性

  • 您没有正确设置类别和联系人测试位

  • 下面是如何设置类别和触点测试位:

    #define kCategoryOne (1 << 0)
    #define kCategoryTwo (1 << 1)
    
    bodyA.categoryBitMask = kCategoryOne;
    bodyA.contactTestBitMask = kCategoryTwo;
    
    bodyB.categoryBitMask = kCategoryTwo;
    bodyB.contactTestBitMask = kCategoryOne;
    

    #定义kCategoryOne(1您可能遇到以下两个问题之一:

  • 您没有设置
    SKPhysicsWorld
    对象的
    contactDelegate
    属性

  • 您没有正确设置类别和联系人测试位

  • 下面是如何设置类别和触点测试位:

    #define kCategoryOne (1 << 0)
    #define kCategoryTwo (1 << 1)
    
    bodyA.categoryBitMask = kCategoryOne;
    bodyA.contactTestBitMask = kCategoryTwo;
    
    bodyB.categoryBitMask = kCategoryTwo;
    bodyB.contactTestBitMask = kCategoryOne;
    

    #定义kCategoryOne(1)感谢您的回复。SKPhysicContactDelegate是不兼容的背景类型。其中我的背景是SKNode类。self.physicsWorld.contactDelegate=self.prepareBackgroundObj;此处显示警告消息。您需要将contact delegate设置为实现
    didBeginContact
    方法的对象,并且需要该对象t的类
    @interface
    声明包含
    协议。使用类别的#defines是一个错误的选择,这样做时会丢失类型检查。更好的选择是使用NS#u选项创建位掩码,但如果我们在后台节点中使用protocol,则会显示错误消息“在对象类型背景上找不到属性physicsWorld"感谢您的回复。SKPhysicContactDelegate是不兼容的背景类型。其中,我的背景是SKNode类。self.physicsWorld.contactDelegate=self.prepareBackgroundObj;此处显示警告消息。您需要将联系人委托设置为实现
    didBeginContact
    方法的任何对象,并且需要该对象的类
    @interface
    声明以包含
    协议。使用类别的#defines是一个错误的选择,这样做时会丢失类型检查。更好的选择是使用NS#u选项创建位掩码,但如果我们在后台节点中使用协议,则会显示错误消息“在对象类型背景上找不到属性physicsWorld”