我正在使用Apple的SpriteKit和SKPhysics构建游戏,该游戏使用基于用户输入在屏幕上移动的方块。我遇到了碰撞问题,因为如果它们碰撞,方块会移动到位。例如,如果所有块都向右移动,则同一“行”上的任何块都需要彼此相邻堆叠,而不是重叠或垂直移动位置。截至目前,他们将改变他们的垂直方向。这是我的代码:
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
self.physicsBody.dynamic = YES;
self.physicsBody.allowsRotation = NO;
self.physicsBody.affectedByGravity = NO;
我还缺少其他任何设置吗?
答案 0 :(得分:1)
问题可能来自您的collisionBitMask类别。为了解决这个问题,您需要首先为块创建类别'物理机构如下:
struct PhysicsCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let block : UInt32 = 0b1
}
然后设置块'设置如下。
block.physicsBody?.categoryBitMask = PhysicsCategory.block
block.physicsBody?.collisionBitMask = PhysicsCategory.None
这可以防止spritekit自动执行碰撞计算。
答案 1 :(得分:0)
如果你是通过用户输入移动你的精灵(例如SKAction的moveTo),那么你很可能不会使用物理来移动你的精灵。在这种情况下,你应该将物理体的速度设为0-这将使精灵在与另一个物体接触时完全僵硬。
尝试:
self.physicsBody.velocity = CGVectorMake(0, 0);
您应该将此代码放在更新循环中。