通过 Spritenode

Posted

技术标签:

【中文标题】通过 Spritenode【英文标题】:Passing through Spritenode 【发布时间】:2015-01-01 23:57:09 【问题描述】:

我有一个英雄/玩家,我希望他能够通过物体/障碍物,当我这样做时,删除障碍物。很好用,有点。

我将此代码用于我的障碍

SKSpriteNode *Obstacle = [SKSpriteNode spriteNodeWithColor:[UIColor blackColor] size:CGSizeMake(40, 40)];
Obstacle.name = @"speedBoost";
Obstacle.position = CGPointMake(self.ObstacleX + 100,0);
Obstacle.physicsBody = [SKPhysicsBody Obstacle.size];
Obstacle.physicsBody.contactTestBitMask = ObstacleCategory;
Obstacle.physicsBody.collisionBitMask = 0;
Obstacle.physicsBody.dynamic = NO;
[self.world Obstacle];

所以当我的英雄从侧面穿过物体时,障碍物被删除并且工作正常 但是当我的英雄从障碍物上方或下方穿过障碍物时,英雄会在障碍物被删除之前停止

我该如何解决这个问题?

提前致谢

碰撞

if ([firstBody.node.name isEqualToString:@"hero"] && [secondBody.node.name isEqualToString:@"obstacle"]) 
    [self obstacle];

【问题讨论】:

你的英雄的碰撞位掩码是什么 您如何检测联系人?障碍物的物理体不是动态的... 【参考方案1】:

好的,您已经设置了 BitMask,这是一个开始。

查看某事是否有联系:

    确保场景在界面前面有<SKPhysicsContactDelegate> 使用didBeginContact方法查看是否发生碰撞 同样设置位掩码: CategoryBitMask - 识别对象,其他对象的contactTest和collision bitMask与之匹配 ContactTestBitMask - 如果碰撞中对象的 categoryBitMask 与此匹配,将调用 didBeginContact CollisionBitMask - 它与什么碰撞

所以只需设置正确的方法并在didBeginContact 中使用按位运算符来测试...

【讨论】:

以上是关于通过 Spritenode的主要内容,如果未能解决你的问题,请参考以下文章

如何用另一个替换 SpriteNode

将大小(约束)添加到 SpriteNode

通过位置确定精灵的名称

你如何确定一个 spritenode 是不是不等于 nil?

SpriteNode 不遵循 cgpath

在 SpriteNode 上重复操作