这可能已经得到了解答,但我找不到任何例子。是否有一种有效的方法来检测节点之间的精灵工具包中的冲突。我已经尝试使用此代码在节点之间进行检测。
if ([leftArrow intersectsNode:gravitySquare])
{
//blah blah blah
}
else if ([rightArrow intersectsNode:gravitySquare])
{
//blah blah blah
}
并且这有效但我的角色“gravitySquare”有时可以通过右箭头和左箭头的边缘而没有结果(我假设这是因为节点的速度)。有没有办法实现物理机构检测碰撞而不会对彼此产生任何实际影响,我的意思是仍然相互通过。
编辑:
我在实现文件中添加了这些字段
static const int gravitySqrCategory = 1;
static const int arrowsCategory = 2;
我将此添加到重力方节点
gravitySquare.physicsBody.categoryBitMask = gravitySqrCategory;
gravitySquare.physicsBody.contactTestBitMask = arrowsCategory;
gravitySquare.physicsBody.collisionBitMask = arrowsCategory;
我将这些添加到两个箭头节点
leftArrow.physicsBody.categoryBitMask = arrowsCategory;
leftArrow.physicsBody.contactTestBitMask = gravitySqrCategory;
leftArrow.physicsBody.collisionBitMask = gravitySqrCategory;
rightArrow.physicsBody.categoryBitMask = arrowsCategory;
rightArrow.physicsBody.contactTestBitMask = gravitySqrCategory;
rightArrow.physicsBody.collisionBitMask = gravitySqrCategory;
这是开始接触的方法
-(void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;
firstBody = contact.bodyA;
secondBody = contact.bodyB;
if(firstBody.categoryBitMask == arrowsCategory || secondBody.categoryBitMask == arrowsCategory)
{
NSLog(@"hit");
}
}
我还将此添加到.h文件
<SKPhysicsContactDelegate>
额外信息:
我有左右箭头,我用skactions移动所以我原本不需要为它们设置物理身体我只是在重力方块上有一个物理体,所以它可以上下飞行。但是现在我将物理体添加到箭头上,它使得正方形在切线中飞来飞去,甚至没有触及尖峰,我很少在接触时得到“击中”nslog。