gpt4 book ai didi

swift - 根据y值升序或降序更改collisionBitMask

转载 作者:行者123 更新时间:2023-11-30 10:03:55 27 4
gpt4 key购买 nike

Swift - SpriteKit

我正在制作我的第一个游戏,并且我有我的 var Player = SKSpriteNode()还有 var platform = SKNode()

我想检测玩家何时在 y 方向上增加,以便我可以关闭 collisionBitMask。因此,在跳跃时可以跳过平台,而在坠落时则可以降落在平台上。

所以我可以有这样的东西:

if player.position.y = increasing {
Player.physicsBody?.collisionBitMask = nil
}else{
Player.physicsBody?.collisionBitMask = PhysicsCategory.Platform
}

我环顾四周,找不到我想要的东西,除非我找错了东西。

非常感谢。

编辑:已解决,检查 EmilioPelaez 答案,仅显示我如何在此处稍微更改它。

在函数外部声明了 var lastY: CGFloat? 以及我的所有其他变量。

override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
// Checking y direction
if Player.position.y > lastY {
// Player increasing in y direction
Player.physicsBody?.collisionBitMask = PhysicsCategory.Ground
} else {
// Player decreasing in y direction
Player.physicsBody?.collisionBitMask = PhysicsCategory.Ground | PhysicsCategory.Platform
}

lastY = Player.position.y
}

最佳答案

基本上,您想要做的是将当前值与前一帧中的值进行比较。

最简单的方法是创建一个变量,您可以在其中存储先前的值,并使用它进行比较。完成比较后,您将当前值存储在该变量中以供下一帧使用。

类似这样的事情:

var lastY: CGFloat?

// in your function
if let lastY = lastY {
if player.y > lastY {
// player.y is increasing
} else {
// player.y is decreasing
}
}
lastY = player.y

关于swift - 根据y值升序或降序更改collisionBitMask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37116006/

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