Ios Sprite套件Xcode中的固定地板
我似乎无法在精灵套件中获得不可移动的固定地板/墙壁 我有一个场景,其中有一个SKNode作为地板,当用户按下屏幕时,一个块从触摸的位置掉落到地板上。这很好,但当用户添加另一个(比如20个街区左右)时,地板突然旋转。 这是我所在楼层的代码: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
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