如何检测 SKSpriteNode 接触但不反应?
Posted
技术标签:
【中文标题】如何检测 SKSpriteNode 接触但不反应?【英文标题】:How to detect SKSpriteNode Contact but do not react? 【发布时间】:2015-08-03 08:17:55 【问题描述】:我有两个 SKSpriteNode 第一个 Hero
+(id)hero
NSMutableArray *walkFrames = [NSMutableArray array];
SKTextureAtlas *heroAnimatedAtlas = [SKTextureAtlas atlasNamed:@"HeroImages"];
int numImages = (int)heroAnimatedAtlas.textureNames.count;
for (int i=1; i <= numImages; i++)
NSString *textureName = [NSString stringWithFormat:@"hero%d", i];
SKTexture *temp = [heroAnimatedAtlas textureNamed:textureName];
[walkFrames addObject:temp];
Hero *hero = [Hero spriteNodeWithTexture:walkFrames[0]];
hero.heroWalkingFrames = walkFrames;
hero.name =@"Hero";
hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hero.size];
hero.physicsBody.categoryBitMask = heroCategory;
hero.physicsBody.categoryBitMask = obstacleCategory | groundCategory | homeCategory | ~goodiesCategory;
return hero;
第二个是硬币
SKSpriteNode *coin = [SKSpriteNode spriteNodeWithImageNamed:@"coin"];
coin.size = CGSizeMake(10,10);
coin.position = CGPointMake(100,100);
coin.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:coin.size];
coin.physicsBody.contactTestBitMask = coinCategory;
coin.physicsBody.dynamic=NO;
coin.name = @"coin";
[self.world addChild:coin];
我可以通过
获得碰撞检测if([contact.bodyA.node.name isEqual: @"coin"] || [contact.bodyB.node.name isEqual: @"coin"])
//[self LevelComplete];
SKNode* coinNode ;
if ([contact.bodyA.node.name isEqual: @"coin"])
coinNode=contact.bodyA.node;
else
coinNode=contact.bodyB.node;
[coinNode removeFromParent];
NSLog(@"Coin touched");
现在我的问题是每次英雄跳跃并触摸硬币时它会下降到地面而不是继续跳跃并达到应有的高度,我知道我在这里遗漏了一些东西但不知道它是什么,所以任何人都可以请告诉我正确的方向来纠正这种效果。
【问题讨论】:
【参考方案1】:创建一个额外的“nilCategory”并设置你的硬币的碰撞位掩码..
coin.physicsBody.collisionBitMask = nilCategory;
【讨论】:
以上是关于如何检测 SKSpriteNode 接触但不反应?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测 SKSpriteNode 和 SKView SpriteKit 之间的冲突
如何检测精灵节点上特定位置的 SKSpriteNode 之间的冲突?