2016-02-03 67 views
1

點擊---->爲PIC :) This is my GameScene as of now, its hard coded and linked to a Global File of that holds scene dataSKScene查看渲染問題(見照片)

override func didMoveToView(view: SKView) { 
     super.didMoveToView(view) 



    playButton.hidden = true 

    let background = SKSpriteNode(imageNamed: "us-flag") 

    background.position = CGPoint(x: size.width/2, y: size.height/2) 

    background.blendMode = .Replace 
    background.zPosition = -1 
    background.size = self.size 

    addChild(background) 

    gameOverButton = SKSpriteNode(imageNamed: "gameOver") 
    gameOverButton.position = CGPoint(x: size.width/2 , y: scene!.frame.height - 200) 
    gameOverButton.zPosition = 3 
    gameOverButton.xScale = 1.5 
    gameOverButton.yScale = 1.5 

    gameOverButton.hidden = true 

    addChild(gameOverButton) 

    gameScore = CustomSKLabel(fontNamed: "Chalkduster") 
    gameScore.text = "Votes: 0" 
    gameScore.position = CGPoint(x: Int((self.size.width - gameScore.frame.width)) , y: 22) 
    gameScore.horizontalAlignmentMode = .Center 
    gameScore.fontSize = 27 
    gameScore.zPosition = 3 
    gameScore.fontColor = SKColor.whiteColor() 

    addChild(gameScore) 



/* for i in 0 ..< 5 { createSlotAt(CGPoint(x: 160 + (i * 170), y: 410)) } 
    for i in 0 ..< 4 { createSlotAt(CGPoint(x: 240 + (i * 170), y: 320)) } 
    for i in 0 ..< 5 { createSlotAt(CGPoint(x: 160 + (i * 170), y: 230)) } 
    for i in 0 ..< 4 { createSlotAt(CGPoint(x: 240 + (i * 170), y: 140)) } 

    RunAfterDelay(1) { [unowned self] in 
     self.createEnemy() */ 


    for i in 0 ..< 5 { createSlotAt(CGPoint(x: 680 + (i * 170), y: 535)) } 
    for i in 0 ..< 4 { createSlotAt(CGPoint(x: 715 + (i * 170), y: 435)) } 
    for i in 0 ..< 5 { createSlotAt(CGPoint(x: 680 + (i * 170), y: 335)) } 
    for i in 0 ..< 4 { createSlotAt(CGPoint(x: 715 + (i * 170), y: 245)) } 
    RunAfterDelay(1) { [unowned self] in 
     self.createEnemy() 

我的遊戲場景是硬編碼的其他所有場景都建在場景編輯器,我的嘗試是一個普遍的應用程序,尚未決定推出針對iPhone只用它正常工作,直到移植的遊戲結束了完全以SpriteKit

GameViewController:

if let scene = WelcomeScene (fileNamed:"WelcomeScene") { 

    let skView = self.view as! SKView 
    skView.showsFPS = Constant.DEV.DEBUG 
    skView.showsNodeCount = Constant.DEV.DEBUG 
    skView.ignoresSiblingOrder = true 
    scene.scaleMode = .AspectFit 
    skView.presentScene(scene) 



    } 


    } 


override func prefersStatusBarHidden() -> Bool { 
    return false 
} 

override func shouldAutorotate() -> Bool { 
    return true 
} 

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    return [UIInterfaceOrientationMask.LandscapeRight ,UIInterfaceOrientationMask.LandscapeLeft] 

} 

}

GlobalSceneDataSwift:

if let scene = sceneToLoad { 
    scene.size = size 
    scene.scaleMode = scaleMode 
    let transition = SKTransition.fadeWithDuration(3) 
    self.view?.presentScene(scene, transition: transition) 

     } 
    } 
} 

之前,我搬到SpriteKit一切都被嵌入到GameViewController,我用它作爲普通視圖控制器和嵌入式子視圖,方便GameScene,偉大的工作,直到大約四轉,當CPU降至零,內存飆升。所以我去了SpriteKit。所有其他場景對於iPhone來說都很適合。除了GameScene。它引入錯誤的資產,場景看起來像圖片。

的情況下,舊代碼從GameScene與UIKit中和SpriteKit混合幫助:

let deviceIdiom = UIScreen.mainScreen().traitCollection.userInterfaceIdiom 

    switch (deviceIdiom) { 

    case .Pad: 

     let active = SKSpriteNode(imageNamed: self.name!) 
     active.name = self.name 
     active.size = CGSizeMake(100, 100) 
     active.position = CGPoint(x: Int(active.frame.width + 0), y: Int(active.frame.height + 10)) 
     addChild(active) 

    case .Phone: break 

    case .TV: 
     let active = SKSpriteNode(imageNamed: self.name!) 
     active.name = self.name 
     active.size = CGSizeMake(100, 100) 
     active.position = CGPoint(x: Int(active.frame.width + 12), y: Int(active.frame.height + 12)) 
     addChild(active) 

    default: break 

    } 

    let w12 = Int(self.size.width/12) 
    let w6 = Int(self.size.width/6) 
    let w5 = Int(self.size.width/5) 
    let h3 = Int(self.size.height/3) 

    for i in 0 ..< 5 { createSlotAt(CGPoint(x: w12 + (i * w5), y: h3 + 120)) } 
    for i in 0 ..< 4 { createSlotAt(CGPoint(x: w6 + (i * w5), y: h3 + 60)) } 
    for i in 0 ..< 5 { createSlotAt(CGPoint(x: w12 + (i * w5), y: h3 + 10)) } 
    for i in 0 ..< 4 { createSlotAt(CGPoint(x: w6 + (i * w5), y: h3 - 50)) } 

    RunAfterDelay(1) { [unowned self] in 
     self.createEnemy() 
    } 
} 

林與SpriteKit,獨唱堅持,因爲老實說,它是一個穩定得多,有過渡的場景特別是有很多移動部件。場景尺寸1920 * 1080背景圖像與該設置相匹配,我選擇了這種尺寸以防我稍後決定移植到Apple TV。再次感謝所有花時間在這裏回答問題的人。 PIC包括

傳統 UPDATE 清產覈資,發現的背景大小被關,被這個遊戲的一部分被創造兩個月前我忘了,我手動調整代碼中的圖片****沒有解決完全沒有問題,我的圖像顯示,背景看起來不像野餐毯子。

+0

像素是免費的 – upallnight

回答

0

在審查我的代碼時,我注意到我在創建的原始項目中缺少評論。我提出這個問題是因爲如果正確評論,我會注意到從UIKIT + SpriteKit的端口混合到嚴格使用SpriteKit時所發生的變化。

1st)至於提到我正在考慮做一個通用的應用程序,如GameViewController舊代碼中指定的。視圖控制器內的嵌入視圖,集合視圖,SkContainer視圖,UIImage視圖,其中全部使用GameViewController的約束創建。 2)遊戲場景sks對於Apple TV來說是一個高寬比,而CGPoints使得資產適合這個尺寸。 (SMH)

3)每個節點有不同的比例因子來完成渲染的右視圖,這些圖像是從一個數據庫文件雨燕居住,我張貼在早期的崗位,約SKEmitters,

4。 )移植到SpriteKit,你失去了一些很酷的UIButton功能,但通過Segues轉換場景。 (導致內存溢出和CPU丟棄)如果你不知道你在做什麼。

Node.xScale = 0.5 
    Node.yScale = 0.5 

是我需要的代碼來呈現適當的大小,以及調整我的資產以符合我的尺寸。有時候可以歸結爲一小段代碼,其中有30個swift文件。如果我有//評論他們的目的,我會爲自己省下幾個小時的「學習經驗」

使用場景編輯器進行SpriteKit轉換可以很有趣,並且代碼量可以相對較小或較大,具體取決於遊戲。子類化你的按鈕,在觸摸開始的方法,如果有很多,並使用全局場景/數據庫/或字典來存儲數據,以避免強引用。

最後:教程很棒你會得到一堆代碼讓你興奮的項目讓你興奮,花點時間逐行去學習「確切地說」代碼在做什麼。評論發現。所以如果你不得不重構一個項目,你就是一個啓發式的編碼器,而不是在黑暗中伸出吸管。

(有幾個redbulls):)

傳統