为啥我的 SKSpriteNodes 不会出现在场景中?

Posted

技术标签:

【中文标题】为啥我的 SKSpriteNodes 不会出现在场景中?【英文标题】:Why won't my SKSpriteNodes appear in the scene?为什么我的 SKSpriteNodes 不会出现在场景中? 【发布时间】:2014-08-10 22:11:53 【问题描述】:

我正在尝试向场景中添加几个节点。当我运行应用程序时,我只有默认的灰色背景。两个节点都没有出现在场景中。这是我所拥有的:

class GameScene: SKScene 
    override func didMoveToView(view: SKView) 
        /* Setup your scene here */

        let jumper = SKSpriteNode(imageNamed:"Jumper")
        jumper.xScale = 0.25
        jumper.yScale = 0.25
        jumper.position = CGPointMake(50, 300)

        self.addChild(jumper)

        let blob = SKSpriteNode(imageNamed:"Blob")
        blob.position = CGPointMake(160, 30)
        blob.xScale = 0.5
        blob.yScale = 0.25

        self.addChild(blob)
    

我检查了图片标题,那里的一切都是正确的。

【问题讨论】:

在 didMoveToView 中放置断点时会调用它吗? 您的纹理可能无法正确渲染。尝试将颜色设置为黑色,并将 colorBlendFactor 设置为 1.0,以验证是否放置了节点。 【参考方案1】:

问题

您的精灵不可见,因为您的场景未完全在模拟器的窗口中。默认情况下,场景大小为 1024 x 768(由 GameScene.sks 指定),而模拟器仅显示 375 x 667 点(如果您选择了 iPhone 6/6s 模拟器)。除非场景的大小设置正确,否则模拟器窗口的左下角不会是场景的 (0,0) 位置。

为了纠正这个问题,

方法一:

在 GameScene.sks 中更改场景的 size 属性以匹配视图的大小。我建议您将场景大小设置为 375 x 667 (iPhone 6/6s)。如果您这样做并将场景的scaleMode 属性设置为.AspectFill(默认值),SpriteKit 将自动缩放场景以适应 iPhone 6+、6s+、5 和 5s 的视图。这样可以节省您将游戏移植到这些设备的时间。

方法二: 在您的视图控制器中,替换它

scene.scaleMode = .AspectFill

有了这个

scene.scaleMode = .ResizeFill

警告:使用此方法可行,但可能需要额外的努力才能将您的游戏移植到具有不同屏幕尺寸的其他 ios 设备。

【讨论】:

这对我有帮助。为什么 xcode 不为你做这个?有这样的默认行为似乎很荒谬。 @JasonMcCarrell 另一种可能更好的纠正场景大小的方法是在视图控制器中设置 scene.scaleMode = .ResizeFill。如果这样做,场景的大小会自动设置为视图的大小。 很棒的家伙。我稍后会尝试。我假设这意味着我可以放弃计算爵士乐的大小,只需将 scaleMode 设置为 ResizeFill。 @JasonMcCarrell 是的,设置 scene.scaleMode = .ResizeFill 就是您需要做的所有事情。 刚遇到这个问题,我遇到了类似的问题,只是我的精灵在每次运行时随机显示。原来我将ignoreSiblingOrder 设置为true。使 false 或明确指定 zPosition 解决了它。另外请注意,not 忽略订单可能有performance implications

以上是关于为啥我的 SKSpriteNodes 不会出现在场景中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的推文按钮不会出现在我的页面上?

为啥我的代码在 Windows 7 上不会出现段错误?

为啥白名单不会出现错误模型 NestJs 的错误

检测 SKSpriteNodes 上的触摸事件

为啥图像不会出现在 vuejs 项目中

移动 SKNodes 和 SKSpriteNodes