我创建了一个没有纹理但有颜色的SKSPriteNode

let tileNode = SKSpriteNode(color: SKColor.redColor(), size: CGSize(width: 80.0, height: 120.0))
tileNode.position = CGPointMake(50, 50)
tileNode.name = "rectangle"
addChild(tileNode)


但是该节点未显示在屏幕上。

但是,我可以通过触摸碰撞检测到它

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    let location: CGPoint = (touches.anyObject() as UITouch).locationInNode(tilesLayer)
    let rect: SKSpriteNode = tilesLayer.childNodeWithName("rectangle") as SKSpriteNode
    if rect.containsPoint(location) {
        println("TOUCHED")    //It works
    }
}


编辑:仅当有背景SKSpriteNode纹理时,才会隐藏SKSpriteNode颜色。完整代码:https://gist.github.com/BabyAzerty/9dca752d9faa7b768bf0

最佳答案

我相信您是使用Xcode中的Game项目模板创建的项目的,对吗?您的问题是GameViewController.m中的这一行(大约41行)。

/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = YES;


如果将其设置为“否”,则它将按预期呈现。我从空项目中构建游戏项目,因此从未设置该属性。只需在您的代码中搜索ignoresSiblingOrder

当然,如果您要进行渲染优化,则可以始终使用zPosition。

关于ios - 带颜色的SKSpriteNode不显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27230180/

10-12 14:39