2015-09-21 5 views
6

Ich kann nicht scheinen, dies herauszufinden. Ich habe viele verschiedene Dinge ausprobiert und keiner von ihnen scheint zu funktionieren. Mit meinem aktuellen Code stehen die Kamera und der Held nie in einer Reihe und die Szene scheint ziemlich weit zu springen, wenn ich den Bildschirm berühre. Ich möchte nur, wenn ich den Bildschirm berühre, den Helden zum Berührungspunkt bewegen und die Kamera ihm folgen lassen. Gibt es eine Möglichkeit, die Kamera an den Helden-Spritenode anzuschließen?Bekommen SKCameraNode, um einem Helden zu folgen Spritenode

import SpriteKit 


let tileMap = JSTileMap(named: "level2.tmx") 
let hero = SKSpriteNode(imageNamed: "hero") 
let theCamera: SKCameraNode = SKCameraNode() 

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

     self.anchorPoint = CGPoint(x: 0, y: 0) 
     self.position = CGPoint(x: 0, y: 0) 

     hero.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)) 



     hero.xScale = 0.5 
     hero.yScale = 0.5 
     hero.zPosition = 2 

     tileMap.zPosition = 1 


     tileMap.position = CGPoint(x: 0, y: 0) 
     self.addChild(tileMap) 
     self.addChild(hero) 
     self.addChild(theCamera) 

     self.camera = theCamera 


    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     /* Called when a touch begins */ 

     for touch in touches { 

      let location = touch.locationInNode(self) 

      let action = SKAction.moveTo(location, duration: 1) 

      hero.runAction(action) 



     } 

      } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 

     self.camera?.position = hero.position 
    } 
} 
+0

Sie meinen Sie, wenn Sie den Bildschirm berühren bewegt sich der 'Held' an die Stelle, an der Sie ihn berührt haben, und die' Kamera' folgt dem 'Helden'. Als Ergebnis erscheint der "Held" jetzt immer noch in der Mitte des Bildschirms? – WangYudong

+0

Ja, genau das meine ich. – Bill

Antwort

5

Der Grund, warum Sie die Szene sah, sprang ziemlich weit ist, weil die scene.size an die Bildschirmgröße nicht gleich. Ich denke, man könnte Ihre erste Szene wie folgt initialisieren:

// GameViewController.swift 
if let scene = GameScene(fileNamed:"GameScene") {...} 

Dieser Code, dessen lädtGameScene.sks Größe ist 1024 * 768 standardmäßig. Aber da Sie Ihre SKSpriteNode programmatisch hinzufügen, können Sie die Szene auf diese Weise initialisieren die Bildschirmgröße zu passen:

// GameViewController.swift 
// Only remove if statement and modify 
let scene = GameScene(size: view.bounds.size) ... 

Dies wird der größte Teil des Problems lösen Sie haben. Außerdem schlage ich vor Bewegen der Kamera Knoten mit SKAction:

override func update(currentTime: CFTimeInterval) { 
    let action = SKAction.moveTo(hero.position, duration: 0.25) 
    theCamera.runAction(action) 
} 

Das letzte, was, fügen Sie diese Zeile der Kamera mit dem Helden am Anfang auszurichten:

self.camera?.position = hero.position 
+0

Das war genau der Teil, den ich vermisste. Vielen Dank!! – Bill

+0

@Bill Können Sie Ihren GameViewController.swift-Code anzeigen, wo Sie die Änderungen vornehmen? Ich habe keine Möglichkeit, GameScene mit einer Größe zu initialisieren. – justColbs

Verwandte Themen