2015-02-10 62 views
0

我遇到了一個我在Swift中工作的橫向方向遊戲的問題。它是從肖像模式教程和代碼改編的,但是我已經在項目設置中設置了正確的方向,並且在GamePlayScene.sks文件中設置了尺寸(並在構建之前保存)Swift中寬度屬性的問題

如果我添加一個精靈在主didMoveToView功能,如背景,則width屬性按預期工作:

let background : SKSpriteNode = SKSpriteNode(imageNamed:"background") 
    background.position = CGPoint(x: self.frame.minX, y: self.frame.minY) 
    background.anchorPoint = CGPoint(x: 0, y: 0) 
    background.size.width = self.frame.size.width 

然而,當我嘗試在物理對象的地面,從我GroundNode.swift類叫加,我只能通過使用類似的設置讓地面伸展一半的屏幕。就好像節點認爲屏幕突然變成肖像一樣。

我在主函數上面的代碼後立即發出這樣的代碼:

var ground = GroundNode(size: CGSizeMake(self.frame.size.width, 100)) 
    ground.zPosition = 20 
    self.addChild(ground) 

,這是我的地面節點類的縮寫版本:

import Foundation 
import SpriteKit 

class GroundNode: SKSpriteNode { 
    init(size: CGSize) { 
     super.init(texture: nil, color: UIColor.blackColor(), size: size) 
     self.name = "Ground" 
     setUpPhysicsBody() 
} 

func setUpPhysicsBody(){ 
    self.physicsBody = SKPhysicsBody(rectangleOfSize: size) 
    self.position = CGPoint(x: 0, y: 0) 
    self.physicsBody?.affectedByGravity = false 
    self.physicsBody?.dynamic = false 

} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 
} 

這是結果,當我跑我的項目:

enter image description here

正如您所看到的,背景儘可能地符合預期,但地面節點僅覆蓋屏幕的一半。它也不會與任何意圖站在它上面的物體正確交互......它們漂浮在上面很多,是的,當我移除地面時,它們正確地穿過,儘管這可能是因爲它們的節點類也遭受了同樣的問題。

想法請?

回答

1

我猜想0,0實際上是在屏幕截圖的底部和中間,因爲你的地面節點將它的位置設置爲0,0,這就是它的起點。

您正在設置背景節點的位置,但不是地面節點,請嘗試以相同方式設置地面節點的位置。

ground.position = CGPoint(x: self.frame.minX, y: self.frame.minY) 
+0

地面節點實際上是左邊的黑色矩形。它通常會設置爲clearColor()。實際的地面,即草地,現在是BG圖像的一部分。但是,謝謝。 – Ne0nblade 2015-02-10 14:07:00

0

感謝扁鋼誰讓我想到的0,0節點上的位置,我意識到我沒有設置錨點,並且它被默認爲我的地節點的中心。

通過添加以下內容:

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

我的代碼工作正常。