SpriteKit Swift:如何在点击时使sprite跳转到位?

时间:2015-09-01 14:38:19

标签: swift sprite-kit skphysicsbody

所以我一直在制作游戏并且有一个目前正在运行的小精灵。每当用户点击屏幕躲避障碍物时,我都需要让他跳起来。我跳起后还需要他回到地面的起点。

2 个答案:

答案 0 :(得分:6)

你可以尝试这样的事情!

import SpriteKit

class GameScene: SKScene {
    var player: SKSpriteNode?

    override func didMove(to view: SKView) {
        player = self.childNode(withName: "player") as? SKSpriteNode
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for t in touches { self.touchDown(atPoint: t.location(in: self)) }
    }

    func touchDown(atPoint pos: CGPoint) {
        jump()
    }

    func jump() {
        player?.texture = SKTexture(imageNamed: "player_jumping")
        player?.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 500))
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        for t in touches { self.touchUp(atPoint: t.location(in: self)) }
    }

    func touchUp(atPoint pos: CGPoint) {
        player?.texture = SKTexture(imageNamed: "player_standing")
    }

}

在播放器的属性检查器窗口中,确保选择“动态”&#39;和&#39;受重力影响&#39;只有选项,否则跳跃后它不会掉到地上.. :)

我不认为物理对于一个简单的游戏来说会有点过头了,正如有人在上一个回答中所说的那样......对于iPhone或iPad硬件来说,它并不是什么大不了的事,它们具有疯狂的计算能力

enter image description here

答案 1 :(得分:3)

对于像这样的游戏来说,使用物理技术是过度的。即使2D马里奥游戏也不使用物理学,所以我怀疑你是否会需要它。

作为一个非常简单的实现,您可以使用SKAction s。

的序列
// move up 20
let jumpUpAction = SKAction.moveByX(0, y:20 duration:0.2)
// move down 20
let jumpDownAction = SKAction.moveByX(0 y:-20 duration:0.2)
// sequence of move yup then down
let jumpSequence = SKAction.sequence([jumpUpAction, jumpDownAction])

// make player run sequence
player.runAction(jumpSequence)

那应该有用。我可能在浏览器中输入了错误的内容。

你可以调整它以使跳跃看起来更自然。也许在跳跃过程中添加一些步骤来改变上升/下降的速度,使其看起来像是在加速。等...