通过 Spritenode
Passing through Spritenode
我有一个hero/player,我希望他能够通过objects/obstacle,当我通过时,删除障碍物。工作正常,有点。
我用这个代码来解决我的障碍
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];
}
好的,您已经设置了 BitMasks,这是一个开始。
查看是否有联系人:
- 确保场景界面前面有
<SKPhysicsContactDelegate>
- 使用
didBeginContact
方法查看是否发生碰撞
- 同样设置位掩码:
- CategoryBitMask - 标识对象,其他对象的 contactTest 和碰撞位掩码与之匹配
- ContactTestBitMask - 如果碰撞中对象的 categoryBitMask 与此匹配,将调用 didBeginContact
- CollisionBitMask - 它与什么发生碰撞
所以只需以正确的方式设置它们并在 didBeginContact
中使用按位运算符来测试...
我有一个hero/player,我希望他能够通过objects/obstacle,当我通过时,删除障碍物。工作正常,有点。
我用这个代码来解决我的障碍
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];
}
好的,您已经设置了 BitMasks,这是一个开始。
查看是否有联系人:
- 确保场景界面前面有
<SKPhysicsContactDelegate>
- 使用
didBeginContact
方法查看是否发生碰撞 - 同样设置位掩码:
- CategoryBitMask - 标识对象,其他对象的 contactTest 和碰撞位掩码与之匹配
- ContactTestBitMask - 如果碰撞中对象的 categoryBitMask 与此匹配,将调用 didBeginContact
- CollisionBitMask - 它与什么发生碰撞
所以只需以正确的方式设置它们并在 didBeginContact
中使用按位运算符来测试...