Objective c 如何在SpriteKit中检测线路上的触点

Objective c 如何在SpriteKit中检测线路上的触点,objective-c,sprite-kit,collision,Objective C,Sprite Kit,Collision,在SpriteKit中,我的场景顶部有一条透明线。节点可以通过它而不发生碰撞(但发生接触)。 我创建了一个细矩形而不是直线,但是当一个节点与这个矩形接触时,节点的行为会完全改变(这很奇怪)。 问题在哪里 CGRect rectangle = CGRectMake(0, 0, self.frame.size.width, 2); SKShapeNode *yourline = [[SKShapeNode alloc] init]; yo

在SpriteKit中,我的场景顶部有一条透明线。节点可以通过它而不发生碰撞(但发生接触)。 我创建了一个细矩形而不是直线,但是当一个节点与这个矩形接触时,节点的行为会完全改变(这很奇怪)。 问题在哪里

CGRect rectangle = CGRectMake(0, 0, self.frame.size.width, 2);

            SKShapeNode *yourline = [[SKShapeNode alloc] init];   



            yourline.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rectangle.size];
            yourline.fillColor =[SKColor redColor];
            yourline.physicsBody.categoryBitMask = topEdgeCategory;

            yourline.physicsBody.dynamic = YES;
            yourline.position = CGPointMake(self.frame.size.width/2,self.frame.size.height-3);
            yourline.physicsBody.friction = 0;
            yourline.physicsBody.linearDamping = 0;
            yourline.physicsBody.restitution = 1.0f;               

            [self addChild:yourline];


    self.physicsBody.categoryBitMask = edgeCategory;        

    // change gravity settings of the physics world
    self.physicsWorld.gravity = CGVectorMake(0, 0);
    self.physicsWorld.contactDelegate = self;
你可以假设我想要创建一个线性激光器,当一个节点接触到它时,它的健康度降低。 其他问题:如何给形状着色?在我的场景中,它是透明的,尽管颜色是红色


非常感谢

我没有足够的信息回答第一个问题,但我可以回答第二个问题。 您需要更改:

SKShapeNode *yourline = [[SKShapeNode alloc] init];  
致:


现在你可以看到红线了。以前的问题是,你从来没有列出“yourline”的大小,只是初始化了它。实际节点及其物理实体可以是不同的大小,因此必须同时指定它们。你只说了物理体的大小。希望这有帮助

请包括联系人代表的实现。此解决方案对您有效吗?如果没有,有什么问题?没有,没有名为“shapeNodeWithRectOfSize”的函数。我只是设置了SKShapeNode的“路径”,然后将collisionBitMask设置为0。现在成功了,对我来说成功了。您使用的是什么版本的xcode?
SKShapeNode *yourline = [SKShapeNode shapeNodeWithRectOfSize:rectangle.size];