我正在尝试创建类似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))
}
}
然而玩家不会跳过其他砖块而不是他先跳下的砖块 - 而不是我想要的。
我希望他跳下他登陆的任何砖块,但速度有限。我也喜欢对他施加冲动的效果 - 当他落在砖上时有点像弹簧效果。
我怎么能实现这个目标?任何想法或建议表示赞赏。
答案 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))
}
}
这样,当玩家第一次击中砖块时会触发,但在玩家离开砖块时不会计算后续击中次数