如何在SpriteKit中检测线上的接触

问题描述 投票:0回答:1

我在 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;

您可以假设我想创建一个线性激光器,当节点接触它时,它的健康状况会降低。 其他问题:我如何为形状着色?在我的场景中它是透明的,尽管颜色是红色的。

非常感谢

objective-c sprite-kit collision
1个回答
1
投票

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

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

至:

SKShapeNode *yourline = [SKShapeNode shapeNodeWithRectOfSize:rectangle.size];

现在您将能够看到红线。之前的问题是你从未布置过“yourline”的大小,而只是对其进行了初始化。实际节点及其物理体的大小可以不同,因此必须同时指定它们。你只说明了物理体的大小。希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.