2016-02-12 47 views
0

這是我在這裏的第一篇文章,我找不到與其他類似問題有關的答案。雪碧節點隨機渲染......需要幫助

所以,問題是,我正在開發一款遊戲,但它在模擬器上和我的iOS設備上的這個項目上表現得非常怪異。 Sprite節點有時出現,有時不出現。這就像一個隨機的。我看到屏幕上的節點計數器正在添加它們,但我沒有看到精靈。我有2個精靈在didMoveToView方法添加和1個SKNode應表現爲容器層用於保持精靈上命名爲mainLayer在全球範圍內聲明的背景的頂部:

var mainLayer = SKNode() 
var character:SKSpriteNode! 
var didShoot:Bool! 

override func didMoveToView(view: SKView) { 

self.addChild(mainLayer) 

let background = SKSpriteNode(imageNamed: "bg") 
background.position = CGPoint(x:self.frame.midX, y:self.frame.midY) 
background.size = self.view!.bounds.size 
background.anchorPoint = CGPoint(x:0.5, y:0.5) 
background.blendMode = SKBlendMode.Replace 
self.addChild(background) 

character = SKSpriteNode(imageNamed: "character") 
     character.position = CGPoint(x:self.frame.midX, y:0.0) 

mainLayer.addChild(character) 

} 


override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    didShoot = true 

} 


override func didSimulatePhysics() { 

if didShoot 
     { 
      shoot() 
      didShoot = false 
     } 

    mainLayer.enumerateChildNodesWithName("bullet") { (node, stop) -> Void in 
     if !CGRectContainsPoint(self.frame, node.position) 
     { 
      node.removeFromParent() 
     } 
    } 
} 



shoot() 
{ 

let bullet = SKSpriteNode(imageNamed: "bullet") 
/* 
positioning, physics bodies, etc...this works... 
*/ 
bullet.name = "bullet" 
mainLayer.addChild(bullet) 
} 

物理學中,定位在場景中效果很好,因爲當我觸摸屏幕時,屏幕上的節點數會增加,但每次運行應用程序時都看不到它們,除了始終存在的背景之外。所以我必須在我的iOS設備或我的模擬器上重新啓動遊戲幾次,最終他們會開始出現,並且在遊戲過程中他們會在某個時間點消失並再次出現......任何想法?我正在使用XCode 7.2.1和Swift 2.1.1

+0

作爲所有的答案注意,檢查zPositions男人。 – TheCodingArt

回答

2

這是zPositioning最有可能的。將角色精靈的zPosition設置爲高於背景圖層。

SpriteKit渲染精靈而不關心z順序,以獲得速度。如果你想讓它成爲特定的東西,你需要設置z順序。

mainLayer.zPosition = 1 //z position of 1. if bg is 0, main will be on top 

它們出現和消失的原因是因爲精靈套件可以在不同的幀不同的順序繪製它們 - 無位置設定,其隨機的順序,他們在得到呈現

0

如果我在看。這是正確的,可能會發生一些事情。第一個問題是你的背景是在你的mainLayer後面繪製的。這是因爲你的zPosition是相同的,所以它會迭代並繪製它添加的順序(mainLayer,background)。現在,您的背景節點大小是添加到場景中時視圖的大小,但根據您的縮放模式,場景大小可能會發生變化,因此您可以使視圖大於原始大小,從而允許精靈被繪製在背景之外,從而出現。 您也正在使用SKBlend.Replace。這意味着源將替換目標像素。由於背景是在頂部繪製的,它會清除底下的任何東西。