将相机对准角色
Centering the camera on the character
我是初学者,我已经开始了我的第一个项目。这应该是一个可以 运行 向左向右移动的小游戏。但是我不知道怎么设置相机。
如果你能帮助我,我将不胜感激,请告诉我如何改进我的代码以及哪里出了问题。
这是我的代码:
import SpriteKit
class GameScene: SKScene, SKPhysicsContactDelegate {
var ground:SKSpriteNode = SKSpriteNode()
var hero: MPCharacter!
var tree:MPTree!
override func didMoveToView(view: SKView) {
backgroundColor = UIColor(red: 155.0/255.0, green: 201.0/255.0, blue: 244.0/255.0, alpha: 1.0)
self.anchorPoint = CGPointMake(0.5, 0.5)
// --> hero <--
hero = MPCharacter()
hero.position = CGPointMake(frame.size.width/2, view.frame.size.height/2)
hero.zPosition = 100
hero.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(hero.size.width, hero.size.height))
hero.physicsBody!.dynamic = true
addChild(hero)
// --> ground <--
ground = SKSpriteNode(imageNamed: "ground")
ground.size = CGSizeMake(frame.size.width, frame.size.height/3)
ground.position = CGPointMake(frame.size.width/2, frame.size.height/2 - ground.size.height)
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(frame.size.width, ground.size.height - 25))
ground.physicsBody!.dynamic = false
addChild(ground)
// --> Tree <--
tree = MPTree()
tree.position = CGPointMake(frame.size.width/2, ground.size.height + tree.size.height/3 - 10)
tree.zPosition = 10
tree.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(tree.size.width, tree.size.height - 10))
tree.physicsBody!.dynamic = false
addChild(tree)
// --> Physics <--
self.physicsWorld.gravity = CGVectorMake(0, -5.0)
self.physicsWorld.contactDelegate = self
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch:AnyObject in touches {
let location = touch.locationInNode(self)
if location.x < CGRectGetMidX(self.frame) {
hero.physicsBody!.velocity = CGVectorMake(0, 0)
hero.physicsBody!.applyImpulse(CGVectorMake(-5, 10))
}
else {
hero.physicsBody!.velocity = CGVectorMake(0, 0)
hero.physicsBody!.applyImpulse(CGVectorMake(5, 10))
}
}
}
}
我不太确定你想要达到什么目的。使角色 'run' 向左(或向右)的一种方法是在角色 运行 向右时将背景(和其他游戏对象)向左移动(反之亦然)。这样您的角色将始终位于屏幕中央,因为他并没有真正移动,您可以创建一个 'illusion' 他在您的游戏世界中移动。给你的角色一个 运行 动画会让它看起来更好......
Ray Wenderlich 的网站上有一个教程,其中还包括 'parallax scrolling':
http://www.raywenderlich.com/49625/sprite-kit-tutorial-space-shooter
希望这对您有所帮助..
如果您试图将相机对准播放器,Apple 文档为您提供了一个很好的示例来说明如何做到这一点 over here(我会添加代码,但最好的学习方法是获取你的手脏了)。您可能必须将这些方法转换为 swift,但这是您希望执行的操作的一般实现。上述答案的问题在于,如果您要移动背景,则必须直接计算力和冲量并将反向量应用于背景。与简单地移动相机相比,这可能需要更多的处理。希望这对您有所帮助!!
我是初学者,我已经开始了我的第一个项目。这应该是一个可以 运行 向左向右移动的小游戏。但是我不知道怎么设置相机。
如果你能帮助我,我将不胜感激,请告诉我如何改进我的代码以及哪里出了问题。
这是我的代码:
import SpriteKit
class GameScene: SKScene, SKPhysicsContactDelegate {
var ground:SKSpriteNode = SKSpriteNode()
var hero: MPCharacter!
var tree:MPTree!
override func didMoveToView(view: SKView) {
backgroundColor = UIColor(red: 155.0/255.0, green: 201.0/255.0, blue: 244.0/255.0, alpha: 1.0)
self.anchorPoint = CGPointMake(0.5, 0.5)
// --> hero <--
hero = MPCharacter()
hero.position = CGPointMake(frame.size.width/2, view.frame.size.height/2)
hero.zPosition = 100
hero.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(hero.size.width, hero.size.height))
hero.physicsBody!.dynamic = true
addChild(hero)
// --> ground <--
ground = SKSpriteNode(imageNamed: "ground")
ground.size = CGSizeMake(frame.size.width, frame.size.height/3)
ground.position = CGPointMake(frame.size.width/2, frame.size.height/2 - ground.size.height)
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(frame.size.width, ground.size.height - 25))
ground.physicsBody!.dynamic = false
addChild(ground)
// --> Tree <--
tree = MPTree()
tree.position = CGPointMake(frame.size.width/2, ground.size.height + tree.size.height/3 - 10)
tree.zPosition = 10
tree.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(tree.size.width, tree.size.height - 10))
tree.physicsBody!.dynamic = false
addChild(tree)
// --> Physics <--
self.physicsWorld.gravity = CGVectorMake(0, -5.0)
self.physicsWorld.contactDelegate = self
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch:AnyObject in touches {
let location = touch.locationInNode(self)
if location.x < CGRectGetMidX(self.frame) {
hero.physicsBody!.velocity = CGVectorMake(0, 0)
hero.physicsBody!.applyImpulse(CGVectorMake(-5, 10))
}
else {
hero.physicsBody!.velocity = CGVectorMake(0, 0)
hero.physicsBody!.applyImpulse(CGVectorMake(5, 10))
}
}
}
}
我不太确定你想要达到什么目的。使角色 'run' 向左(或向右)的一种方法是在角色 运行 向右时将背景(和其他游戏对象)向左移动(反之亦然)。这样您的角色将始终位于屏幕中央,因为他并没有真正移动,您可以创建一个 'illusion' 他在您的游戏世界中移动。给你的角色一个 运行 动画会让它看起来更好......
Ray Wenderlich 的网站上有一个教程,其中还包括 'parallax scrolling': http://www.raywenderlich.com/49625/sprite-kit-tutorial-space-shooter
希望这对您有所帮助..
如果您试图将相机对准播放器,Apple 文档为您提供了一个很好的示例来说明如何做到这一点 over here(我会添加代码,但最好的学习方法是获取你的手脏了)。您可能必须将这些方法转换为 swift,但这是您希望执行的操作的一般实现。上述答案的问题在于,如果您要移动背景,则必须直接计算力和冲量并将反向量应用于背景。与简单地移动相机相比,这可能需要更多的处理。希望这对您有所帮助!!