Swift 如何制造一个不';t不断地加速物体,使其快速旋转
所以我想制造一个力,在场景中移动一个物理物体,而不是不断地加速它们。就像几何短跑一样。所以,当我使用重力时,它就像坠落一样,但我不希望它像那样加速 希望你能理解,这有点难以解释。Swift 如何制造一个不';t不断地加速物体,使其快速旋转,swift,sprite-kit,game-physics,skphysicsbody,skphysicsworld,Swift,Sprite Kit,Game Physics,Skphysicsbody,Skphysicsworld,所以我想制造一个力,在场景中移动一个物理物体,而不是不断地加速它们。就像几何短跑一样。所以,当我使用重力时,它就像坠落一样,但我不希望它像那样加速 希望你能理解,这有点难以解释。 感谢您在SKPhysicsBody术语中,这是力(持续施加)和脉冲(瞬时施加)之间的区别: 您可以选择应用力或脉冲: 根据应用力与处理下一个模拟帧之间经过的模拟时间量,应用力的时间长度。因此,要对实体应用连续力,需要在每次处理新帧时进行适当的方法调用。力通常用于连续效果 冲量会使物体的速度发生瞬时变化,这与经过的模
感谢您在SKPhysicsBody术语中,这是
力
(持续施加)和脉冲
(瞬时施加)之间的区别:
您可以选择应用力或脉冲:
- 根据应用力与处理下一个模拟帧之间经过的模拟时间量,应用力的时间长度。因此,要对实体应用连续力,需要在每次处理新帧时进行适当的方法调用。力通常用于连续效果
- 冲量会使物体的速度发生瞬时变化,这与经过的模拟时间无关。脉冲通常用于物体速度的即时变化
因此,为了给你的身体施加一个脉冲,从而避免持续加速,请使用该方法。在游戏场景中,添加一个新的
jump()
方法,该方法从touchesbeated
调用。使用触摸开始
和触摸结束
设置触摸屏幕时跟踪的bool。您可以使用场景的didbeagin
方法跟踪玩家何时落地(或与障碍物碰撞等)
大概是这样的:
class GameScene: SKScene, SKPhysicsContactDelegate {
var person = SKSpriteNode()
var isJumping = Bool()
var isTouching = Bool()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
isTouching = true
jump()
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
isTouching = false
}
func jump(){
if isTouching == true {
if isJumping == false {
person.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 600))
isJumping = true
}
}
}
func didBegin(_ contact: SKPhysicsContact) {
let bodyA = contact.bodyA.node
let bodyB = contact.bodyB.node
// Collided with ground
if bodyA?.physicsBody?.categoryBitMask == 2 && bodyB?.physicsBody?.categoryBitMask == 1 {
isJumping = false
jump()
}
}
}
类游戏场景:SKScene,skphysiccontactdelegate{
var person=SKSpriteNode()
var isJumping=Bool()
var isTouching=Bool()
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
isTouching=true
跳转()
}
覆盖函数touchesend(touchs:Set,带有事件:UIEvent?){
isTouching=false
}
func jump(){
如果isTouching==true{
如果isJumping==false{
person.physicsBody?applyImpulse(CGVector(dx:0,dy:600))
是真的吗
}
}
}
func didbegen(uu联系人:skphysiccontact){
让bodyA=contact.bodyA.node
设bodyB=contact.bodyB.node
//与地面相撞
如果bodyA?.physicsBody?.categoryBitMask==2和bodyB?.physicsBody?.categoryBitMask==1{
isJumping=false
跳转()
}
}
}
所以我使用了applyImpulse并将平台和玩家摩擦力设置为0,这样就不会影响这一点。