gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:02:01 26 4
gpt4 key购买 nike

我正在尝试创建类似 Doodle Jump 的东西来进行练习。

对于那些不了解游戏的人;你有一个玩家,他会跳到位于随机位置的砖 block 上,如果砖 block 在他上方,则不会与它们发生碰撞,并且每当他落在砖 block 上时,他就会跳跃。

我在实现原始 Doodle 跳线的跳跃行为时遇到了麻烦,如下所述。

我已将玩家和砖 block 的碰撞位掩码设置为无。每当玩家落在砖 block 上时(当触发“didBeginContact”时,玩家位于砖 block 上方),我会对玩家施加一个脉冲,但由于多次检测到碰撞,因此脉冲非常大,玩家会跳跃非常高(我希望他的速度有限)。

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

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))
}
}

但是玩家不会跳除他先跳下的砖 block 之外的其他砖 block - 这不是我想要的。

我希望他能以有限的速度跳下任何落在他身上的砖 block 。我也喜欢对他施加脉冲的效果 - 有点像他落在砖 block 上时的 Spring 效果。

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

最佳答案

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

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))
}
}

这样,它会在玩家第一次击中砖 block 时触发,但在玩家离开砖 block 时不会计算后续击中

关于swift - 实现游戏对象的特定跳跃行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37941011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com