2015-09-07 48 views
0

我對Swift相當陌生,但沿途我發現了一些奇怪的東西。如果我有一個精靈和一個標籤,併爲每個人輸入完全相同的位置,他們將擁有不同的視覺位置。我正在找人解釋這一點,以便更好地理解Swift。 下面是輸出:Swift - 標籤和雪碧位置對比

screenshot

// 
// GameScene.swift 
// Test Game 
// 
// Created by NioPullus on 9/7/15. 
// Copyright (c) 2015 Owen Vnek. All rights reserved. 
// 

import SpriteKit 

class GameScene: SKScene { 

    var testSprite: SKSpriteNode = SKSpriteNode(imageNamed:       "Spaceship") 
    var testLabel: UILabel = UILabel() 

    func defineTestSprite(var #sprite: SKSpriteNode) -> SKSpriteNode { 
     sprite.position.x = 100 
     sprite.position.y = 100 
     sprite.xScale = 0.3 
     sprite.yScale = 0.3 
     return sprite 
    } 

    func defineTestLabel(var #label: UILabel) -> UILabel { 
     label = UILabel(frame: CGRect(x: 100, y: 100, width: 100, height: 100)) 
     label.text = "Test" 
     return label 
    } 

    override func didMoveToView(view: SKView) { 
     self.addChild(defineTestSprite(sprite: self.testSprite)) 
     self.view?.addSubview(defineTestLabel(label:self.testLabel)) 
    } 

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

     for touch in (touches as! Set<UITouch>) { 
      let location = touch.locationInNode(self) 
     } 
    } 

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

回答

1

的UIKit和SpriteKit使用不同的座標系,所以你不一定會想到用相同的x/y值作爲一個子視圖精靈出現在相同的視覺位置。

您可以使用SKView方法convertPoint:toScene:(和convertPoint:fromScene:)在這些座標空間之間進行轉換。

您可以找到更多關於SpriteKit座標系here和UIView座標系here的信息。 (正如你所看到的,它們是非常不同的)。

+0

好吧,幫助很多。非常感謝你。 –

+1

@NioPullus如果這解決了您的問題,請[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – jtbandes

+0

你走了,對不起 –