Ios Sprite套件Xcode中的固定地板

Ios Sprite套件Xcode中的固定地板,ios,xcode,sprite-kit,collision,sknode,Ios,Xcode,Sprite Kit,Collision,Sknode,我似乎无法在精灵套件中获得不可移动的固定地板/墙壁 我有一个场景,其中有一个SKNode作为地板,当用户按下屏幕时,一个块从触摸的位置掉落到地板上。这很好,但当用户添加另一个(比如20个街区左右)时,地板突然旋转。 这是我所在楼层的代码: SKSpriteNode *floorNode = [[SKSpriteNode alloc] initWithColor:[SKColor clearColor] size:CGSizeMake(self.size.width*2, 10)]; floorN

我似乎无法在精灵套件中获得不可移动的固定地板/墙壁

我有一个场景,其中有一个SKNode作为地板,当用户按下屏幕时,一个块从触摸的位置掉落到地板上。这很好,但当用户添加另一个(比如20个街区左右)时,地板突然旋转。 这是我所在楼层的代码:

SKSpriteNode *floorNode = [[SKSpriteNode alloc] initWithColor:[SKColor clearColor] size:CGSizeMake(self.size.width*2, 10)];
floorNode.position = CGPointMake(CGRectGetMidX(self.frame), -5);
floorNode.name = @"floor";
floorNode.zPosition = 1;

floorNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:floorNode.size];
floorNode.physicsBody.affectedByGravity = NO;
floorNode.physicsBody.dynamic = NO;
floorNode.physicsBody.usesPreciseCollisionDetection = YES;

return floorNode;
对不起,我对雪碧套装还不太熟悉。有人知道我的代码出了什么问题吗

编辑:我添加了一些图片,使问题更加清楚。因为它也发生在这个屏幕上。你看到的那些黑色球体像佳能球一样从左向右飞行。我增加了球体的数量以显示问题的发生。代码如下:

- (SKNode *)newEditButton {
    SKLabelNode *editButtonNode = [SKLabelNode labelNodeWithFontNamed:@"chalkduster"];
    editButtonNode.text = @"EDIT CASTLE";
    editButtonNode.fontSize = 19;
    editButtonNode.fontColor = [SKColor darkGrayColor];
    editButtonNode.position = CGPointMake(CGRectGetMidX(self.frame) + 110, CGRectGetMidY(self.frame) + 30);
    editButtonNode.name = @"edit_button";
    editButtonNode.zPosition = 2;

    editButtonNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(140, 40)];
    editButtonNode.physicsBody.usesPreciseCollisionDetection = YES;
    editButtonNode.physicsBody.dynamic = NO;
    editButtonNode.physicsBody.affectedByGravity = NO;

    SKAction *hover = [SKAction sequence:@[[SKAction moveByX:0 y:6.0 duration:0.9],
                                           [SKAction moveByX:0 y:-6.0 duration:0.9]]];
    SKAction *hoverForever = [SKAction repeatActionForever:hover];
    [editButtonNode runAction:hoverForever];

    return editButtonNode;
}

- (SKNode *)newPlayButton {
    SKLabelNode *playButtonNode = [SKLabelNode labelNodeWithFontNamed:@"chalkduster"];
    playButtonNode.text = @"SLAUGHTER";
    playButtonNode.fontSize = 19;
    playButtonNode.fontColor = [SKColor darkGrayColor];
    playButtonNode.position = CGPointMake(CGRectGetMidX(self.frame) - 110, CGRectGetMidY(self.frame) + 30);
    playButtonNode.name = @"play_button";
    playButtonNode.zPosition = 2;

    playButtonNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(140, 40)];
    playButtonNode.physicsBody.usesPreciseCollisionDetection = YES;
    playButtonNode.physicsBody.dynamic = NO;
    playButtonNode.physicsBody.affectedByGravity = NO;

    SKAction *hover = [SKAction sequence:@[[SKAction moveByX:0 y:6.0 duration:0.9],
                                           [SKAction moveByX:0 y:-6.0 duration:0.9]]];
    SKAction *hoverForever = [SKAction repeatActionForever:hover];
    [playButtonNode runAction:hoverForever];

    return playButtonNode;
}
5-10秒后,每当球体与之碰撞时,名为Slaught和edit castle的按钮开始旋转。但它似乎与物理无关,因为如果它向左旋转,它的旋转方向总是向左。如果它开始向右旋转,它的旋转方向总是正确的


不过看起来很有趣!但不是我想要的-

你不知道,但你在告诉SpriteKit从炮弹到标签,从积木到地板应用碰撞

这是因为将SKPhysicsBody.collisionBitMask保留为其默认值,即观察所有对象的碰撞

:

因此,请:

floorNode.physicsBody.collisionBitMask = 0

您是否尝试过使用EdgeloopFromRect:CGRect+SKPhysicsBody*Body?边没有体积或质量,并且始终被视为“动力学”属性等于“否”。边可能仅与基于体积的物理体碰撞。您的意思是:floorNode.physicsBody=[SKPhysicsBody WithEdgeLoopFromRect:floorNode.frame];这似乎没有什么区别。谢谢你的建议!我已经对我的问题进行了编辑,以清除一个位,使标签边缘循环,这样做会删除标签周围的矩形,因此不可能发生冲突。此外,向地板添加边循环没有任何区别,但是标签是SKLabelNodes,而地板只是一个SKNode。但使用边循环两者都不能正常工作。
floorNode.physicsBody.collisionBitMask = 0