【问题标题】:SpriteKit didBeginContact issue with 2 non dynamic bodiesSpriteKit didBeginContact 问题与 2 个非动态主体
【发布时间】:2014-06-17 11:05:59
【问题描述】:

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

生成块代码:

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!");

}

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

【问题讨论】:

  • 两个非动态物体永远不会产生接触事件。既然您已经弄清楚了,并且从您的评论中我认为它正在起作用,我想知道您的问题是什么?

标签: ios7 sprite-kit


【解决方案1】:

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

在我的 touchesBegan 方法中,我将要移动的块设置为 Dynamic,它会触发 didBeginContact。这是我的 touchesBegan 方法:

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

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

我还设置了block.physicsBody.collisionBitMask = 0,它允许方块穿过其他方块。如果这至少对其他人有所帮助,那么值得提出这个问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多