Sprite Kit 碰撞发生在精灵之外的几个点
Posted
技术标签:
【中文标题】Sprite Kit 碰撞发生在精灵之外的几个点【英文标题】:Sprite Kit collision happens several points outside the sprite 【发布时间】:2014-02-10 02:48:01 【问题描述】:我设置了一堆 SKSpriteNode。我的英雄节点不应该撞墙,如果撞墙,它会触发碰撞。这工作正常,但碰撞点并不完全在精灵的图像上。
这里是英雄的代码:
hero = [SKSpriteNode spriteNodeWithImageNamed:@"hero"];
hero.name = heroCategoryName;
hero.position = CGPointMake(100, CGRectGetMidY(self.frame));
hero.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:hero.frame.size.width];
hero.physicsBody.friction = 1.0f;
hero.physicsBody.restitution = 0.0f;
hero.physicsBody.linearDamping = 0.1f;
hero.physicsBody.allowsRotation = NO;
hero.physicsBody.categoryBitMask = heroCategory;
hero.physicsBody.contactTestBitMask = wallCategory;
hero.physicsBody.usesPreciseCollisionDetection = YES;
hero.physicsBody.mass = 0.2f;
[self addChild:hero];
这是墙壁:
SKSpriteNode *wall = [SKSpriteNode spriteNodeWithImageNamed:@"wall"];
wall.name = wallCategoryName;
wall.hidden = YES;
wall.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:wall.size];
wall.physicsBody.dynamic = NO;
wall.physicsBody.collisionBitMask = 0;
wall.physicsBody.usesPreciseCollisionDetection = YES;
wall.physicsBody.categoryBitMask = wallCategory;
wall.physicsBody.contactTestBitMask = heroCategory;
无论碰撞是在顶部、左侧还是右侧,都会发生这种情况。我已经走了,并确保我的图像都尽可能地被废话。我不确定它还能是什么。似乎身体的碰撞箱比应有的大。
【问题讨论】:
我一直在在模拟器中看到这个。这让我发疯了。我终于尝试了一个真正的设备,碰撞突然变得完美!您使用的是设备还是模拟器? 您似乎没有设置碰撞位掩码...如果您将英雄的碰撞位掩码设置为墙壁的位掩码,则英雄的精灵将自动配置为不通过它. 今晚我会在真机上试一试。 【参考方案1】:英雄精灵的尺寸是多少?如果是方形图片,则改如下
hero.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:hero.frame.size.width];
进入
hero.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:hero.frame.size.width/2.0f];
【讨论】:
你能解释一下为什么要除以 2 吗?该图像现在只是一张测试图像 - 60x68。 请参阅有关 bodyWithCircleOfRadius 的文档。身体的起源位于中心。 'r' 是圆的半径。以上是关于Sprite Kit 碰撞发生在精灵之外的几个点的主要内容,如果未能解决你的问题,请参考以下文章