gpt4 book ai didi

ios - SpriteKit : better way to temporarily change velocity on sprite?

转载 作者:行者123 更新时间:2023-11-28 13:15:19 25 4
gpt4 key购买 nike

假设节点 A 以原始速度矢量 (0, 9.8) 移动。与节点 B 发生碰撞后,节点 A 应该暂时向后移动,例如向量为 (0, -2),但在 0.2 秒后,恢复其原始速度。换句话说,节点 A 在继续其原始轨迹之前应该模拟来自节点 B 的碰撞效果。

这需要在四个方向上发生,所以我们不能依赖重力(它只能在一个方向上起作用)。

我们计划做这样的事情:

func didBeginContact(contact: SKPhysicsContact!) {
let collision:UInt32 = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask)

let dx = nodeB?.physicsBody?.velocity.dx
let dy = nodeB?.physicsBody?.velocity.dy

nodeB.runAction(
SKAction.sequence([
SKAction.runBlock {
nodeB?.physicsBody?.applyImpulse( CGVectorMake(0, -2.0))
},
SKAction.waitForDuration(0.2)
]),
completion: {
nodeB?.physicsBody?.velocity.dx = dx
nodeB?.physicsBody?.velocity.dy = dy
}
)

但是,这看起来很乱。使用 Swift 有更好的方法吗?

最佳答案

当您有复杂的代码时,使用中间变量是个好主意。

let dx = nodeB?.physicsBody?.velocity.dx
let dy = nodeB?.physicsBody?.velocity.dy

let waitAction = SKAction.waitForDuration(0.2)

let runAction = SKAction.runBlock({ () -> Void in
nodeB?.physicsBody?.applyImpulse( CGVectorMake(0, -2.0))
return
})

let sequenceAction = SKAction.sequence([runAction,waitAction])

nodeB?.runAction(sequenceAction, completion: { () -> Void in
nodeB?.physicsBody?.velocity.dx = dx!
nodeB?.physicsBody?.velocity.dy = dy!
})

关于ios - SpriteKit : better way to temporarily change velocity on sprite?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29242987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com