gpt4 book ai didi

ios - SpriteKit 跳跃和移动问题

转载 作者:搜寻专家 更新时间:2023-11-01 06:04:38 25 4
gpt4 key购买 nike

我对 swift 还很陌生,并且一直在开发一个有趣的游戏,但我遇到了一些我无法完全理解的事情。

当按下运行按钮时,角色向前移动,具有以下功能

func move(dt: CGFloat) {
position.x += moveRate * dt
}

并且当按下跳跃按钮时,角色用下面的函数跳跃

func jump() {
physicsBody?.applyImpulse(CGVector(dx: 0, dy: jumpRate))
run(jumpAnimation!)
}

两者都很好,但请考虑一下这个 senario。玩家正在奔跑,然后他们在移动的同时跳跃。在空中时,玩家松开移动按钮,玩家的 x 位置停止不动。这显然感觉很不自然,我希望玩家的 x 位置缓和一些。

现在我也玩过用 physicsBody?.applyForce(CGVector(dx: 1000, dy: 0)) 移动角色,这会产生那种效果,但他似乎只是获得了更多和速度更快,可以这么说,您不会获得恒定速率或“最大速度”。

有人可以与我分享一些见解吗?我很乐意学习有关 spritekit 和一般游戏开发的任何知识。谢谢!

最佳答案

您应该尝试设置速度而不是设置 X 位置。设置位置时,您会绕过所有物理行为。
您还应该尝试仅在实际按下按钮时设置它。

func move(dt: CGFloat) {
if Math.abs(moveRate) > 0.1 { // If player initiates movement. You can increase the value 0.1 if you want to filter move values
velocity = CGVector(dx: moveRate, dy: veloxity.dy)
}
}

如果您的角色像在太空中一样无限移动,linearDamping 将很有用。它用于模拟空气摩擦,因此接近 1 的值意味着更多的摩擦,而接近 0 的值意味着更少的摩擦。

linearDamping = 0.85

此外,通过这种方式,moveRate 不依赖于 dt,但应该降低它。


尝试一下,我还没有测试过,但我基本上就是这样做的。

关于ios - SpriteKit 跳跃和移动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41010268/

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