实现游戏对象的特定跳跃行为

时间:2016-06-21 09:48:26

标签: swift sprite-kit game-physics

我正在尝试创建类似Doodle Jump的练习。

对于那些不了解游戏的人;你有一个跳跃在砖块上的玩家,这些砖块位于随机的地方,如果它们位于他上方并且在他们落在他们身上时就不会碰撞它们。

我在实现原始涂鸦跳线的跳跃行为方面遇到了麻烦,如下所述。

我已经为玩家和砖块设置了碰撞位掩码为none。每当玩家登陆砖块时(当'didBeginContact'被触发时玩家高于砖块)我对玩家施加冲动,但因为碰撞被多次检测到,所以冲动真的很大而玩家跳跃真的很高(我希望他的速度有限)。

我尝试了这个(当检测到碰撞时调用此函数):

func playerCollidedWithBrick(brick: Brick) {
    if player.position.y > brick.position.y && brick.physicsBody?.velocity.dy <= 0 {
        //the player is above the brick and is falling
        player.physicsBody?.applyImpulse(CGVectorMake(0, 20))
    }
}

然而玩家不会跳过其他砖块而不是他先跳下的砖块 - 而不是我想要的。

我希望他跳下他登陆的任何砖块,但速度有限。我也喜欢对他施加冲动的效果 - 当他落在砖上时有点像弹簧效果。

我怎么能实现这个目标?任何想法或建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

为什么不在Brick类中放置一个自定义属性来指定玩家是否已经击中了那块砖

var playerHitBrick: Bool = false

func playerCollidedWithBrick(brick: Brick) {
    if player.position.y > brick.position.y && brick.physicsBody?.velocity.dy <= 0 && !brick.playerHitBrick {
        //the player is above the brick and is falling
        brick.playerHitBrick = true
        brick.runAction(SKAction.waitForDuration(1.0), completion: { brick.playerHitBrick = false })
        player.physicsBody?.applyImpulse(CGVectorMake(0, 20))
    }
}
这样,当玩家第一次击中砖块时会触发,但在玩家离开砖块时不会计算后续击中次数