斯威夫特:如何让我的角色在我的游戏中只有落地后才能跳跃?

Posted

技术标签:

【中文标题】斯威夫特:如何让我的角色在我的游戏中只有落地后才能跳跃?【英文标题】:Swift: How to make my character in my game only be able to jump once he hits the ground? 【发布时间】:2017-07-24 21:26:25 【问题描述】:

我正在开发一款游戏,让我的角色在陆地之间跳跃。我已经完成了一切,除了我剩下的问题是如果你继续点击屏幕,他可以永远跳下去。我想要它,所以他必须先撞到地上才能再次跳跃。

import SpriteKit
import GameplayKit

class GameScene: SKScene, SKPhysicsContactDelegate 
    struct PhysicsCatagory 
        static let Knight : UInt32 = 0x1 << 1
        static let land : UInt32 = 0x1 << 2
    

    var Knight = SKSpriteNode()
    var land = SKSpriteNode(imageNamed: "CJLand4")

这是我当前让他跳起来的代码:

Knight.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
Knight.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 325))

我在touchesBegan 下有这个,它增加了重力,一时冲动让他可以跳跃。但我只希望他每次着陆时都能跳一次。如果可以的话,请帮忙。

【问题讨论】:

您可以使用布尔值跟踪与陆地的碰撞,并在跳跃发生后将其设置为 false。 @the4kman 所以类似于touchedLand = false?你能给我一个代码中的例子吗 【参考方案1】:

您可以检查垂直速度是否为 0,并且骑士只有在着陆时才会跳跃。这实际上取决于您要寻找的跳跃类型。

if Knight.physicsBody?.velocity.y == 0  Jump() 

【讨论】:

这是我最喜欢的解决方案,我建议只要骑士不二段跳就这样做 非常感谢,这非常有效。非常感谢您的帮助!【参考方案2】:

只需在场景中添加一个名为 isJumping 的 BOOL 属性,初始化为 false

然后,在touchesBegan 中检查isJumping 是否为真。如果不是,请执行跳转并将isJumping 设置为true

当跳跃结束(骑士接触地面)时,将isJumping 设置回false

【讨论】:

如果你的骑士确实有二段跳的功能,我推荐这个方法和其他方法结合使用,单跳的问题是如果isJumping = false,并且马倒了,他仍然可以跳进去空气

以上是关于斯威夫特:如何让我的角色在我的游戏中只有落地后才能跳跃?的主要内容,如果未能解决你的问题,请参考以下文章

如何在画布中保留我的游戏角色?

如何停止或暂停 SKAction 播放音乐? - 斯威夫特

我想在我的应用程序中使用 SQL | Alamofire,斯威夫特[关闭]

如何让我的机器人在特定频道中发送消息,然后在一段时间后将其删除

斯威夫特:如何在我的 AVPlayerLayer 顶部添加图像/文本以使其成为视频的一部分?

如何改善我的 3D 游戏的角色控制?