Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 快速精灵套件照相机移动_Ios_Swift_Camera_Sprite Kit - Fatal编程技术网

Ios 快速精灵套件照相机移动

Ios 快速精灵套件照相机移动,ios,swift,camera,sprite-kit,Ios,Swift,Camera,Sprite Kit,我用雪碧套装做了一个相机,聚焦在一个雪碧上 苹果有一个很棒的文档: 然而,现在的相机会立即跟随SKSpriteNode,而我希望有一点回旋余地 例如,触摸后SKSpriteNode上下移动,相机从原点缓慢跟随SKSpriteNode,SKSpriteNode的最大距离高度为屏幕的一半,当SKSpriteNode静止时,相机和SKSpriteNode再次移动到其原点 同样节点的物理体行为异常,远离其实际图像。我怎样才能解决这个问题 这是我的密码: class GameScene: SKScene,

我用雪碧套装做了一个相机,聚焦在一个雪碧上

苹果有一个很棒的文档:

然而,现在的相机会立即跟随SKSpriteNode,而我希望有一点回旋余地

例如,触摸后SKSpriteNode上下移动,相机从原点缓慢跟随SKSpriteNode,SKSpriteNode的最大距离高度为屏幕的一半,当SKSpriteNode静止时,相机和SKSpriteNode再次移动到其原点

同样节点的物理体行为异常,远离其实际图像。我怎样才能解决这个问题

这是我的密码:

class GameScene: SKScene, SKPhysicsContactDelegate {

var Player: SKSpriteNode!

var Platform0: SKSpriteNode!
var Platform1: SKSpriteNode!
var Platform2: SKSpriteNode!
var Platform3: SKSpriteNode!
var Platform4: SKSpriteNode!
var Platform5: SKSpriteNode!

var World: SKNode!
var Camera: SKNode!

override func didMoveToView(view: SKView) {
    /* Setup your scene here */

    self.physicsWorld.contactDelegate = self
    self.anchorPoint = CGPoint(x: 0.5, y: 0.1)

    self.World = SKNode()
    self.World.name = "World"
    addChild(self.World)
    self.Camera = SKNode()
    self.Camera.name = "Camera"
    self.World.addChild(self.Camera)

    SpawnPlatforms()
    SpawnPlayer()
}

func SpawnPlatforms() {

    Platform0 = SKSpriteNode (color: SKColor.greenColor(), size: CGSize(width: self.frame.size.width , height: 25))
    Platform0.position = CGPoint(x: self.frame.size.width / 2, y: 40)
    Platform0.zPosition = 1

    Platform0.physicsBody = SKPhysicsBody(rectangleOfSize:Platform0.size)
    Platform0.physicsBody?.dynamic = false
    Platform0.physicsBody?.allowsRotation = false
    Platform0.physicsBody?.restitution = 0
    Platform0.physicsBody?.usesPreciseCollisionDetection = true

    Platform0.physicsBody?.categoryBitMask = Platform0Category
    Platform0.physicsBody?.collisionBitMask = PlayerCategory
    Platform0.physicsBody?.contactTestBitMask = PlayerCategory

    World.addChild(Platform0)

    /// All other Platforms declared as the same above

}

func SpawnPlayer(){

    var Player1:SKTexture!
    var Player2:SKTexture!

    var Animation:SKAction!
    var AnimationRepeat:SKAction!

    Player1 = SKTexture(imageNamed: "Image.png")
    Player1.filteringMode = .Nearest
    Player2 = SKTexture(imageNamed: "Image2.png")
    Player2.filteringMode = .Nearest

    Animation = SKAction.animateWithTextures([Player1,Player2], timePerFrame: 0.5)
    AnimationRepeat = SKAction.repeatActionForever(Animation)

    Player = SKSpriteNode (imageNamed: "Image.png")
    Player.size = CGSize(width: 64, height: 64)
    Player.position = CGPoint(x: self.frame.size.width / 2, y: 80)
    Player.zPosition = 2

    Player.physicsBody = SKPhysicsBody(rectangleOfSize:CGSize(width: 35, height: 50))
    Player.physicsBody?.dynamic = true
    Player.physicsBody?.allowsRotation = false
    Player.physicsBody?.restitution = 0
    Player.physicsBody?.usesPreciseCollisionDetection = true
    Player.physicsBody?.velocity = CGVector(dx: 0, dy: -0.1)

    Player.physicsBody?.categoryBitMask = PlayerCategory
    Player.physicsBody?.collisionBitMask = Platform0Category
    Player.physicsBody?.contactTestBitMask = Platform0Category | Platform1Category | Platform2Category | Platform3Category | Platform4Category | Platform5Category

    Player.runAction(AnimationRepeat)
    World.addChild(Player)

}

override func didFinishUpdate() {

    Camera.position = CGPoint(x: Player.position.x, y: Player.position.y)
    self.centerOnNode(Camera)

}

func centerOnNode(node: SKNode) {

    let cameraPositionInScene: CGPoint = node.scene!.convertPoint(node.position, fromNode: World)

    node.parent!.position = CGPoint(x:node.parent!.position.x - cameraPositionInScene.x, y:node.parent!.position.y - cameraPositionInScene.y)

}

使用SKAction moveTo,而不是直接在centeronnode中声明位置

它有一个持续时间值

将旧的centerOnNode函数替换为:

func centerOnNode(node: SKNode) {

    let cameraPositionInScene: CGPoint = node.scene!.convertPoint(node.position, fromNode: World)

    node.parent!..runAction(SKAction.moveTo(CGPoint(x:node.parent!.position.x - cameraPositionInScene.x, y:node.parent!.position.y - cameraPositionInScene.y), duration: 1))

}
这应该行得通,但我还没测试过对不起

Swift 3的更新



使用SKAction moveTo,而不是直接在centeronnode中声明位置

它有一个持续时间值

将旧的centerOnNode函数替换为:

func centerOnNode(node: SKNode) {

    let cameraPositionInScene: CGPoint = node.scene!.convertPoint(node.position, fromNode: World)

    node.parent!..runAction(SKAction.moveTo(CGPoint(x:node.parent!.position.x - cameraPositionInScene.x, y:node.parent!.position.y - cameraPositionInScene.y), duration: 1))

}
这应该行得通,但我还没测试过对不起

Swift 3的更新



你能给我举个例子吗?你能给我举个例子吗?