我想检测一个正方形SkShapeNode
和一个圆圈SkShapeNode
之间的碰撞。它基本上可以工作,但似乎hitbox /物理实体并不真正与节点形状对齐。它似乎是随机的10-20分。与SKShapeNode(SpriteKit)奇怪的碰撞检测
这是我的代码:
SKShapeNode* circle= [SKShapeNode shapeNodeWithCircleOfRadius:7.0];
circle.physicsBody= [SKPhysicsBody bodyWithCircleOfRadius:7.0];
circle.physicsBody.usesPreciseCollisionDetection= YES;
circle.physicsBody.categoryBitMask= catCircle;
circle.physicsBody.contactTestBitMask= catSquare;
circle.position= CGPointMake(x, y);
[self addChild:circle];
SKShapeNode* square= [SKShapeNode shapeNodeWithRect:rect];
square.position= position;
square.physicsBody= [SKPhysicsBody bodyWithRectangleOfSize:rect.size];
square.physicsBody.categoryBitMask= catSquare;
square.physicsBody.contactTestBitMask= catCircle;
square.physicsBody.dynamic= YES;
square.physicsBody.usesPreciseCollisionDetection= YES;
[self addChild:square];
我通过移动正方形形状(圆形保持位置)触发碰撞:
[square runAction:[SKAction moveTo:somePoint duration:2]];
我在didBeginContact
通过removeAllActions
取消行动一旦检测到碰撞。
这是它的样子:
正如你可以看到,广场上确实不停止一旦倒是圈,但在此之前/之后的几个问题。
我在做什么错?
其实,这不是问题。例如,正如你在上面看到的那样,在触及圆圈之前(上方广场),击球也会发生,并且广场停止。 然后,我想要做的是用方块“拍”圆,但在某些情况下,方块在视觉上击中圆圈,但只是通过它而没有碰撞检测。 – user826955
所以我认为这取决于你接近圆的地方,你会得到不同的行为,就好像圆圈的边界不是以它自己的对象为中心,或者更可能是广场不是中心。这可能指向你如何更新方块的位置 – Rob85
我同意,它看起来像物理体* *不*代表节点形状。但是,我似乎无法在节点或物理主体类中找到适当的方法来调整它。 另外,我发现的碰撞检测教程都没有做任何事情,除了我所做的。 – user826955