实现游戏对象的特定跳跃行为
Achieving specific jumping behavior of a game object
我正在尝试创建类似 Doodle Jump 的东西来练习。
对于那些不了解游戏的人;你有一个玩家可以跳到随机位置的砖块上,如果它们在他上方则不会与它们发生碰撞,并且只要他落在它们上面就会跳起来。
我无法实现原始 Doodle 跳线的跳跃行为,如下所述。
我已将玩家和砖块的碰撞位掩码设置为 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))
}
}
但是除了他先跳下的那块之外,玩家不会跳下其他砖块 - 这不是我想要的。
我希望他能以有限的速度从落地的任何砖块上跳下来。我也喜欢对他施加冲动的效果 - 有点像他落在砖块上时的 spring 效果。
我怎样才能做到这一点?任何想法或建议表示赞赏。
你为什么不在你的积木 class 中放置一个自定义 属性 来指定玩家是否已经击中了那块积木
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))
}
}
这样它会在玩家第一次击中砖块时触发,但不会计算玩家离开砖块时的后续击中
我正在尝试创建类似 Doodle Jump 的东西来练习。
对于那些不了解游戏的人;你有一个玩家可以跳到随机位置的砖块上,如果它们在他上方则不会与它们发生碰撞,并且只要他落在它们上面就会跳起来。
我无法实现原始 Doodle 跳线的跳跃行为,如下所述。
我已将玩家和砖块的碰撞位掩码设置为 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))
}
}
但是除了他先跳下的那块之外,玩家不会跳下其他砖块 - 这不是我想要的。
我希望他能以有限的速度从落地的任何砖块上跳下来。我也喜欢对他施加冲动的效果 - 有点像他落在砖块上时的 spring 效果。
我怎样才能做到这一点?任何想法或建议表示赞赏。
你为什么不在你的积木 class 中放置一个自定义 属性 来指定玩家是否已经击中了那块积木
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))
}
}
这样它会在玩家第一次击中砖块时触发,但不会计算玩家离开砖块时的后续击中