ios7 - SpriteKit didBeginContact 与 2 个非动态物体的问题

标签 ios7 sprite-kit

我正在尝试创建一个带有可以移动的 block 的游戏,它们都属于同一类别BitMask。除非我将物理主体设置为动态,否则 didBeginContact 不会触发。如何检测属于同一类别的两个 block 之间的碰撞?

生成区 block 的代码:

float blkX = 34;
    float blkY = 64;

    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 6; j++){
            block = [SKSpriteNode spriteNodeWithImageNamed:blocksArray[(arc4random()%5)]];
            block.position = CGPointMake(blkX, blkY);
            block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:block.size];
            block.physicsBody.usesPreciseCollisionDetection = YES;
            block.physicsBody.dynamic = NO;
            block.physicsBody.categoryBitMask = blockCategory;
            block.physicsBody.contactTestBitMask = blockCategory;
            block.physicsBody.collisionBitMask =  blockCategory;
            [block setName:@"block"];
            [_bgLayer addChild:block];
            blkX += 48;
        }
        blkX = 34;
        blkY += 48;
    }

我正在使用 SKPhysicsContactDelegate 并在我的 init 方法中有以下两行:

self.physicsWorld.contactDelegate = self;
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0);

我的 didBeginContact 方法:

-(void)didBeginContact:(SKPhysicsContact *)contact{
SKPhysicsBody *firstBody, *secondBody;

firstBody = contact.bodyA;
secondBody = contact.bodyB;

NSLog(@"We Collided!");

}

任何帮助表示赞赏。谢谢!

最佳答案

我确实想出了一些对处于类似情况的人有效的方法:

在 TouchBegan 方法中,我将要移动的 block 设置为 Dynamic,这确实会触发 didBeginContact。这是我的 TouchBegan 方法:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    self.selectedNode = [self nodeAtPoint:[[touches anyObject] locationInNode:self]];
    [self.selectedNode.physicsBody setDynamic:YES];
}

然后您在touchesEnded方法中再次将其关闭。

我还设置了block.physicalsBody.collisionBitMask = 0,它允许该 block 移动穿过其他 block 。如果这至少对另一个人有帮助,那么这个问题就值得提出!

关于ios7 - SpriteKit didBeginContact 与 2 个非动态物体的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24262176/

相关文章:

objective-c - iOS7 使用 hidesBottomBarWhenPushed 时奇怪的动画

ios - 显示键盘时 UIAlertView 消息未正确显示

ios - 在 iOS 7 中强制横屏和自动旋转

ios - UILabel - 已弃用方法的替代方法 "adjustsLetterSpacingToFitWidth"

ios - SKSpriteNode 在 isUserInteractionEnabled false 时不让触摸通过

ios - 为什么游戏逻辑更喜欢 update() 而不是 didFinishUpdate?

swift - 将玩家分数添加到 SpriteKit 中的社交框架消息中

swift - SKEmitterNode iOS 8 vs iOS 9 如何获得相同的结果?

ios7 - 在 iOS 7 中动画 UINavigationBar(如 Safari)

swift - 子类节点,但想检测场景中的触摸