斯威夫特:如何让我的角色在我的游戏中只有落地后才能跳跃?
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,并且马倒了,他仍然可以跳进去空气以上是关于斯威夫特:如何让我的角色在我的游戏中只有落地后才能跳跃?的主要内容,如果未能解决你的问题,请参考以下文章
我想在我的应用程序中使用 SQL | Alamofire,斯威夫特[关闭]
如何让我的机器人在特定频道中发送消息,然后在一段时间后将其删除