【问题标题】:Get SKCameraNode to follow a hero Spritenode获取 SKCameraNode 跟随英雄 Spritenode
【发布时间】:2015-12-17 16:42:00
【问题描述】:

我似乎无法弄清楚这一点。我尝试了许多不同的东西,但似乎没有一个有效。使用我当前的代码,相机和英雄永远不会对齐,当我触摸屏幕时,场景似乎跳得很远。我想做的就是当我触摸屏幕时让英雄移动到触摸点并让相机跟随他。有没有办法将相机锁定到英雄精灵节点?

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
    }
}

【问题讨论】:

  • 你的意思是当你触摸屏幕时,hero 会移动到你触摸的位置,camera 会跟随/对齐hero。结果,hero 现在还出现在屏幕中间?
  • 是的,这正是我的意思。

标签: sprite-kit swift2 ios9 xcode7


【解决方案1】:

你看到场景跳得很远是因为scene.size不等于屏幕大小。我猜你可能会像这样初始化你的第一个场景:

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

该代码将加载默认大小为 1024*768 的 GameScene.sks。但是由于您以编程方式添加了SKSpriteNode,因此您可以通过这种方式初始化场景以适应屏幕尺寸:

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

这将解决您遇到的大部分问题。此外,我建议使用SKAction移动相机节点:

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

最后一件事,添加这条线以在开始时将相机与您的英雄对齐:

self.camera?.position = hero.position

【讨论】:

  • 这正是我缺少的部分。谢谢!!
  • @Bill 你能展示你的 GameViewController.swift 代码吗?我无法使用大小初始化 GameScene。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多