【发布时间】:2016-04-09 22:39:52
【问题描述】:
我目前正在尝试制作一个“启动游戏”,即使用 SpriteKit 的 Toss the turle、Learn to fly 和 Burrito Bison 风格的游戏。我已经使用 SpriteKit 的内置物理原理启动了启动工作,但是当我尝试使用 SKCameraNode 跟随主角时,似乎总是落后一个(或更多)一步,使主角“摇晃” " 在高速下。
我尝试使用 SKAction 和 .position-property 设置相机的位置,结果相同。
我猜这是因为物理的更新速度比实际的 update() 更快,我尝试搜索有关此的信息但找到了 zilch。
“发射”主角的功能:
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))
}
}
Update()-函数:
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 上的完整项目。
【问题讨论】:
标签: ios swift sprite-kit game-physics