我正在尝试创建一个简单的 SpriteKit
游戏。我有一个从屏幕底部中心开始的播放器。
我在 GameScene
中添加了一个摄像头来跟踪玩家,但它不起作用。当我使用以下代码运行它时:
class GameScene: SKScene {
let mPlayer = Player(circleOfRadius: 45, fillColor: myColors.blue, strokeColor: myColors.red)
let cameraNode = SKCameraNode()
override func didMove(to view: SKView) {
setup()
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
moveCamera()
Player.movePlayerUp(mPlayer: mPlayer)
}
func setup(){
mPlayer.position = CGPoint(x: self.frame.midX - PLAYER_WIDTH, y: self.frame.minY + PLAYER_HEIGHT)
self.camera?.position = mPlayer.position
self.camera = cameraNode
self.addChild(cameraNode)
self.addChild(mPlayer)
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches{
let location = touch.location(in: self)
mPlayer.run(SKAction.moveTo(x: location.x, duration: 0.1))
}
}
func moveCamera(){
let moveAction = SKAction.moveTo(y: mPlayer.position.y, duration: 0.1)
cameraNode.run(moveAction)
}
}
如何让摄像机从一开始就跟随玩家并随着它移动到顶部? 希望我的问题很清楚,并对图片的大小表示歉意。
最佳答案
此代码在空的 Xcode 项目中适用于我。您可能认为这不是因为您的背景图像是 1 种颜色,并且您只是短暂地移动播放器。
此外,在更新方法中,您设置将玩家不断移动到中间,这是没有必要的。
尝试在背景中添加一些条纹,以便更容易看到您是否移动,而不是将此代码添加到更新方法中,让玩家不断地缓慢向上移动。
let action = SKAction.move(by: CGVector(dx: 0, dy: 5), duration: 1)
mPlayer.run(action)
您将看到摄像机正确跟随玩家。
如果您需要以不同的方式将相机置于玩家的中心,例如在 y 轴上,则只需增加/减少相机的 y 位置即可。
let moveAction = SKAction.moveTo(y: mPlayer.position.y + 200, duration: 0.1)
cameraNode.run(moveAction)
希望这有帮助
关于swift - SKCameraNode 工作异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42166331/