玩家控制的节点忽略碰撞
Player controlled node ignoring collisions
我有一个由玩家控制的 SKShapeNode。我想将此节点保留在父节点内。所以我创建了边并使用 SKPhysicsBody 和碰撞位掩码来防止我的节点移动到其父节点之外。
当我尝试通过更新每一帧的位置来移动节点时,它只是忽略了边缘。这是使用的功能:
func move(direction: MoveDirection, withTimeInterval timeInterval: TimeInterval) {
var x, y: CGFloat
switch direction {
case .North:
x = 0
y = movementSpeed * CGFloat(timeInterval)
case .South:
x = 0
y = -movementSpeed * CGFloat(timeInterval)
case .East:
x = movementSpeed * CGFloat(timeInterval)
y = 0
case .West:
x = -movementSpeed * CGFloat(timeInterval)
y = 0
}
let sprite = spriteComponent.sprite
sprite.position = CGPoint(x: sprite.position.x + x, y: sprite.position.y + y)
}
移动效果很好,但节点可以无处不在,只是不关心边缘(我打开 skView.showPhysics 所以我可以看到它们)。
但是,如果我替换行:
sprite.position = CGPoint(x: sprite.position.x + x, y: sprite.position.y + y)
作者:
sprite.physicsBody?.applyForce(CGVector(dx: x, dy: y))
碰撞工作正常。
感觉如果我们想让它们发生碰撞,就必须使用物理学来移动它们。但是我在 Apple 的文档中没有看到任何关于此限制的信息。那么这种行为是预期的吗?还是我错过了什么?
奖励积分:
在Apple提供的TaskBot游戏中,通过设置node.position(代码有点...复杂,不太确定)来改变(或似乎)玩家的位置。如果有人可以给我提示?
谢谢!
如果您手动移动 SKSpriteNode,将不会发生碰撞,因为您通过说 "Put this node there no matter what" 覆盖了物理引擎。
如果您希望物理引擎可靠地产生碰撞,那么您将只需要使用物理引擎通过力或冲量来移动您的对象。
如果您手动将节点移动到会产生碰撞的位置,物理引擎将尝试将其移开,但如果您继续尝试移动节点,结果将不可预测。
我有一个由玩家控制的 SKShapeNode。我想将此节点保留在父节点内。所以我创建了边并使用 SKPhysicsBody 和碰撞位掩码来防止我的节点移动到其父节点之外。
当我尝试通过更新每一帧的位置来移动节点时,它只是忽略了边缘。这是使用的功能:
func move(direction: MoveDirection, withTimeInterval timeInterval: TimeInterval) {
var x, y: CGFloat
switch direction {
case .North:
x = 0
y = movementSpeed * CGFloat(timeInterval)
case .South:
x = 0
y = -movementSpeed * CGFloat(timeInterval)
case .East:
x = movementSpeed * CGFloat(timeInterval)
y = 0
case .West:
x = -movementSpeed * CGFloat(timeInterval)
y = 0
}
let sprite = spriteComponent.sprite
sprite.position = CGPoint(x: sprite.position.x + x, y: sprite.position.y + y)
}
移动效果很好,但节点可以无处不在,只是不关心边缘(我打开 skView.showPhysics 所以我可以看到它们)。
但是,如果我替换行:
sprite.position = CGPoint(x: sprite.position.x + x, y: sprite.position.y + y)
作者:
sprite.physicsBody?.applyForce(CGVector(dx: x, dy: y))
碰撞工作正常。
感觉如果我们想让它们发生碰撞,就必须使用物理学来移动它们。但是我在 Apple 的文档中没有看到任何关于此限制的信息。那么这种行为是预期的吗?还是我错过了什么?
奖励积分:
在Apple提供的TaskBot游戏中,通过设置node.position(代码有点...复杂,不太确定)来改变(或似乎)玩家的位置。如果有人可以给我提示?
谢谢!
如果您手动移动 SKSpriteNode,将不会发生碰撞,因为您通过说 "Put this node there no matter what" 覆盖了物理引擎。
如果您希望物理引擎可靠地产生碰撞,那么您将只需要使用物理引擎通过力或冲量来移动您的对象。
如果您手动将节点移动到会产生碰撞的位置,物理引擎将尝试将其移开,但如果您继续尝试移动节点,结果将不可预测。