gpt4 book ai didi

ios - SKCameraNode 跟不上移动节点

转载 作者:行者123 更新时间:2023-11-28 12:51:03 24 4
gpt4 key购买 nike

我目前正在尝试制作一款“启动(呃)游戏”,即使用 SpriteKit 的 Toss the turle、Learn to fly 和 Burrito Bison 风格的游戏。我已经使用 SpriteKit 的内置物理原理启动了工作,但是当我尝试使用 SKCameraNode 跟随主角时,它似乎总是落后一步(或更多步)让主角“摇晃” "在高速下。

我已经尝试使用 SKAction 和 .position-property 设置相机的位置,结果相同。

我猜这是因为物理更新的速度比实际的 update() 快,我尝试搜索相关信息但一无所获。

“启动”主角的功能:

func touchStopped(touchPoint: CGPoint) {
if !inAir {
arrow.removeFromParent()
inAir = true

mainCharNode.physicsBody = SKPhysicsBody(circleOfRadius: mainCharNode.size.width/2)
mainCharNode.physicsBody?.mass = mainChar.mass
mainCharNode.physicsBody?.restitution = mainChar.restitution
mainCharNode.physicsBody?.linearDamping = mainChar.airResistance
mainCharNode.physicsBody?.velocity = CGVectorMake(touchPoint.x*2, touchPoint.y)
mainCharNode.physicsBody?.categoryBitMask = mainCategory
mainCharNode.physicsBody?.collisionBitMask = groundCategory
} else {
mainCharNode.physicsBody?.applyImpulse(CGVectorMake(10000, 10000))
}
}

更新()函数:

override func update(currentTime: CFTimeInterval) {
if lastUpdateTime > 0 {
dt = currentTime - lastUpdateTime
} else {
dt = 0
}
lastUpdateTime = currentTime

if mainCharNode.position.x > 1000 {
let moveCamera = SKAction.moveTo(CGPoint(x: mainCharNode.position.x, y: cameraNode.position.y), duration: dt)
cameraNode.runAction(moveCamera)
}
if(inAir && !gameOver) {
distance += (mainCharNode.physicsBody?.velocity.dx)!*CGFloat(dt)
if(mainCharNode.physicsBody?.velocity == CGVector(dx: 0,dy: 0)) {
gameOver = true
mainCharNode.physicsBody?.dynamic = false
}
}
}

https://github.com/CalleLundstedt/LauncherGame这是 github 上的完整项目。

最佳答案

通过在 update 中手动设置相机位置,您将相机移动至少延迟一帧 — 物理在 update 之后运行,因此您的相机移动发生在角色移动后的帧。

当您使用移动 Action 而不是直接设置位置并为该 Action 指定非零持续时间时,您会进一步延迟相机移动。 (您代码中的 dt 是这一帧与之前最后一帧之间的时间,并且您将该时间应用于 future 运动。)因为角色是当你的 Action 运行时仍在移动,相机永远不会 catch - 你总是将相机移动到角色曾经的地方。

不过,设置相机位置只是给自己增加了额外的工作量。使用 SKConstraint相反,SpriteKit 本身将确保相机位置固定在角色上——它在物理之后解决约束,但在同一帧上。

关于ios - SKCameraNode 跟不上移动节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36523568/

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