我无法通过碰撞检测来处理我的两个对象。这是我目前的代码:
_firstPosition = CGPointMake(self.frame.size.width * 0.817f, self.frame.size.height * .40f);
_squirrelSprite = [SKSpriteNode spriteNodeWithImageNamed:@"squirrel"];
_squirrelSprite.position = _firstPosition;
_atFirstPosition = YES;
[self addChild:_squirrelSprite];
SKAction *wait = [SKAction waitForDuration:3.0];
SKAction *createSpriteBlock = [SKAction runBlock:^{
SKSpriteNode *lightnut = [SKSpriteNode spriteNodeWithImageNamed:@"lightnut.png"];
BOOL heads = arc4random_uniform(100) < 50;
lightnut.position = (heads)? CGPointMake(257,600) : CGPointMake(50,600);
[self addChild: lightnut];
SKAction *moveNodeUp = [SKAction moveByX:0.0 y:-700.0 duration:1.3];
[lightnut runAction: moveNodeUp];
}];
SKAction *waitThenRunBlock = [SKAction sequence:@[wait,createSpriteBlock]];
[self runAction:[SKAction repeatActionForever:waitThenRunBlock]];
我最初是按照这个答案:Sprite Kit Collision Detection但是当我将物理身体设置为我的松鼠和坚果时,他们就会摔倒。有没有办法不搞乱物理(我很高兴目前在应用程序中的一切如何工作)并且只是让它当一个物体接触另一个物体时游戏将结束?有没有办法只在精灵周围设置半径?感谢您提供任何帮助或信息。
答案 0 :(得分:4)
碰撞检测需要物理实体。如果你不想要引力,要么将物理世界的gravity
设置为零,要么关闭每个物理体上的affectedByGravity
属性。
答案 1 :(得分:1)
您可以使用毕达哥拉斯定理来确定两个精灵节点之间的距离。以下是如何执行此操作的示例:
CGFloat dx = sprite1.position.x - sprite2.position.x;
CGFloat dy = sprite1.position.y - sprite2.position.y;
CGFloat distance = sqrt(dx*dx+dy*dy);
// Check if the two nodes are close
if (distance <= kMaxDistance) {
// Do something
}