穿过Spritenode

时间:2015-01-01 23:57:10

标签: objective-c sprite-kit collision-detection skspritenode

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

我将此代码用于我的障碍

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];

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

我该如何解决这个问题?

提前致谢

COLLISION

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

1 个答案:

答案 0 :(得分:0)

好的,所以你已经设置了BitMasks,这是一个开始。

查看某些内容是否有联系人:

  1. 确保场景在界面
  2. 前面有<SKPhysicsContactDelegate>
  3. 使用didBeginContact方法查看是否发生了碰撞
  4. 同样设置bitMasks:
    • CategoryBitMask - 标识对象,其他对象的contactTest和碰撞bitMasks匹配到它
    • ContactTestBitMask - 如果碰撞中的对象的categoryBitMask与此匹配,则会调用didBeginContact
    • CollisionBitMask - 与
    • 发生冲突的内容
  5. 所以只需设置正确的方法并使用didBeginContact内的按位运算符来测试......