2016-02-03 69 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):)

传统