skView.ignoreSiblingOrder 在 swift 中的重要性/效率?

2024-05-15

这样做有多重要/高效skView.ignoreSiblingOrder = true初始化场景时?

现在,我将其设置为 true,但由于某种原因,当我从 MainMenu 场景启动 GameScene 时,它​​会在我的角色之前加载背景(即使背景的代码首先出现),但一旦我死了它就会修复并返回到主菜单,然后加载另一个游戏场景。为了避免这个问题,我创建了一个布尔值,基本上可以检测我何时玩了不止一场游戏。它现在可以使用,但非常丑陋,我确信有更好的方法。

代码: (触动开始)

                    let skView = self.view as SKView!
                    skView.showsFPS = true
                    skView.showsNodeCount = true
                    if spriteNode.name == "StartButton"
                    {


                        /* Sprite Kit applies additional optimizations to improve rendering performance */

                        //sets ignoreSiblingOrder to false the first game because of XCode Glitch where background was rendering over player for some reason
                        skView.ignoresSiblingOrder = false
                        if(Game){
                            skView.ignoresSiblingOrder = true
                        }

                        if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene
                        {
                            skView.presentScene(scene)
                            /* Set the scale mode to scale to fit the window */
                            scene.scaleMode = .AspectFill

                        }

游戏场景代码:

override func didMoveToView(view: SKView)
{
    TheGame = SKNode()
    self.addChild(TheGame)

    createSky()
    createGround()
    addFireButton()
    addJumpButton()
    addHero(view)       

}

重申一下,出于某种原因,我玩的第一个游戏的背景渲染在我的英雄和按钮之后(所以结束),即使createGround()函数运行后。这是下面的功能。

func addHero(view: SKView){
    //initializes our hero and sets his initial texture to running1
    hero = SKSpriteNode(texture: heroAtlas.textureNamed("10Xmini_wizard"))
    hero.xScale = 0.4
    hero.yScale = 0.4
    hero.position = CGPointMake(frame.width / 4.0, frame.height / 4.0)

    //creates some CG values for the hero to be used in its physics definitions
    let heroSize = CGSizeMake(hero.size.width, hero.size.height)
    let heroCenter = CGPointMake(hero.position.x/2, hero.position.y/2)
    self.addChild(hero);

}

func createGround()
{
    let groundTexture = SKTexture(imageNamed: "bg")
    groundTexture.filteringMode = .Nearest

    let moveGroundSprite = SKAction.moveByX(-groundTexture.size().width * 2.0, y: 0, duration: NSTimeInterval(0.01 * groundTexture.size().width * 1.0))
    let resetGroundSprite = SKAction.moveByX(groundTexture.size().width * 2.0, y: 0, duration: 0.0)
    let moveGroundSpritesForever = SKAction.repeatActionForever(SKAction.sequence([moveGroundSprite, resetGroundSprite]))

    for var i:CGFloat = 0; i < 2.0 + self.frame.size.width / (groundTexture.size().width * 2.0); ++i
    {
        let sprite = SKSpriteNode(texture: groundTexture)
        sprite.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: groundTexture.size().width, height: frame.height/8))
        sprite.physicsBody?.dynamic = false
        sprite.physicsBody?.restitution = 0
        sprite.setScale(2.0)
        sprite.position = CGPointMake(i * sprite.size.width, sprite.size.height / 2.0)
        sprite.runAction(moveGroundSpritesForever)
        TheGame.addChild(sprite)
    }
}

When ignoresSiblingOrder为 false,SpriteKit 按照节点在父节点中存在的顺序渲染节点children数组——也就是说,数组顺序决定了哪一个绘制在另一个“之上”。这也意味着 SpriteKit 必须一次渲染每个节点,因此您会因 OpenGL 绘制调用开销而损失效率。

When ignoresSiblingOrder是的,SpriteKit 完全依赖于zPosition属性用于确定绘制顺序。这意味着它有时可以将同一 z 处的所有内容组合到单个绘制中,这使得渲染速度更快。但这也意味着,如果您想控制哪些节点在其他节点前面绘制,则需要设置它们zPosition适当地。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

skView.ignoreSiblingOrder 在 swift 中的重要性/效率? 的相关文章

  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 在 Xcode 中查找未使用的文件

    我最近开始开发一个新应用程序 它基本上是我以前制作的应用程序的副本 但做了一些更改 为了制作这个新应用程序 我复制了旧应用程序并删除了一些不需要的内容 我想知道 有没有办法知道 Xcode 中正在使用哪些类文件 或者有什么关于如何查找未使用
  • Apple 由于崩溃而拒绝了我的应用程序,无法重现它

    我刚刚上传了一个应用程序到应用程序商店 它是为ios 7开发的 他们拒绝了该应用程序 因为我无法重现崩溃 他们向我发送了这份崩溃报告 Exception Type EXC BAD ACCESS SIGSEGV Exception Subty
  • 加速度计适用于 iphone/ipad 模拟器吗?

    据我所知 当我在 XCode 中使用 iPad 模拟器时 我的应用程序应该会触发加速计事件 但事实并非如此 我用谷歌搜索了一下 似乎加速度计没有在模拟器中实现 这是正确的吗 如果是这样 为什么他们会有 硬件 gt 摇动手势 菜单选项 我的代
  • 自定义 UINavigationController UINavigationBar

    基本上我想要一个定制UINavigationBar 我不希望它是 半透明 或任何东西 就像图片应用程序一样 我基本上想完全删除它 但我仍然希望能够在按下导航控制器时添加后退按钮等 并且我想要视图 例如 UITableViewControll
  • 日期时间到 NSDate

    如何转换字符串2010 11 19T20 00 00Z进入一个NSDate object 我尝试过使用 dateFormatter setDateFormat yyyy MM ddTHH mm ssZ 但看起来我的自定义格式样式错误 PS
  • 为什么 Apple 建议以编程方式创建模态导航控制器?

    以模态方式呈现导航控制器时 以编程方式创建和配置导航控制器对象通常更简单 虽然您也可以使用 Interface Builder 来执行此操作 但通常不建议这样做 事实上 因为我的导航控制器很简单 我宁愿在IB中自定义视图 虽然我不知道确切的
  • iOS - 在相机上放置自定义叠加层(垂直对齐)。顶部黑条的大小

    我正在寻找以下问题的编程解决方案 我想在相机 iOS 上绘制自定义叠加层 我希望它位于相机输出视图的垂直中央 我已经完成了相对于屏幕而不是相机图片居中绘制自定义视图 为此 我需要获得顶部黑条的大小 我怎么才能得到它 顶部和底部栏的大小不相等
  • iOS 7 NS 单线程安全合并冲突

    重新排序两行后 在单线程应用程序上保存简单的数据时遇到问题 我已经成功地简化了编码以重现错误 并且希望其他人尝试这一点时得到第二个意见 这是一次健全性检查 因为我怀疑 iOS 7 引入的核心数据问题 而这在 iOS 6 中工作正常 首先 启
  • 使用javascript以编程方式触发iOS safari中的复制菜单?

    我正在尝试实现一种用户友好的方式 将一些文本从文本输入字段复制到 iOS Safari 上的剪贴板 我知道无法在这个平台上以编程方式完成此操作 但我希望能够尽可能地指导用户体验 在 iOS Safari 上 当用户手动突出显示某些文本时 会
  • 使用标识符启动 iPhone 应用程序

    我正在尝试在我的应用程序中启动应用程序 例如 如果我按下 testApp1 中的按钮 它应该打开 testApp2 有没有办法用应用程序标识符来做到这一点 我听说过一种名为的未记录方法launchApplicationWithIdentif
  • 如何将设备上未保存的图片上传到dropbox帐户?(IOS)

    Dropbox RestClient 仅保存文件 所以我想先将图像保存在本地文件夹中 然后上传它 结果它保存了文件 但它已损坏 NSString localPath NSBundle mainBundle pathForResource I
  • Swift 单元测试 - 如何断言 CGColor 是它应该的样子?

    使用 Xcode V7 2 尝试进行单元测试 需要验证是否已设置正确的颜色 并收到以下消息 Cannot invoke XCTAssertEqual with an argument list of type CGColor CGColor
  • 如何将nsmutable数组添加到sqlite数据库表中

    如何将nsmutablearray添加到sqlite数据库表中 有人可以帮我编码吗 您可以使用 for int i 0 i lt mutArray count i NSString string mutArray objectAtIndex
  • 将 NSFetchedResultsController 添加到项目后出现问题

    我设置 CoreData 时没有NSFetchedResultsController一切都保存得很好 切换到之后NSFetchedResultsController 我在尝试保存图像时遇到奇怪的错误 这是我用来保存图像的代码 void sa
  • 如何检测 UITableView 中某个单元格的双击?

    如何检测某个单元格上的双击UITableView i e 如果用户进行了一次触摸 我想执行一个操作 如果用户进行了两次触摸 我想执行另一个操作 我还需要知道进行触摸的索引路径 我怎样才能实现这个目标 Thanks 如果您不想创建子类UITa
  • Facebook 登录打开错误的应用程序

    我正在尝试使用 facebook 实现应用程序的登录 但每次我尝试登录时 它都建议打开错误的应用程序 我尝试了一些在这里找到的东西 但没有成功 在 Facebook 的开发者页面上我添加了一个后缀 我的 plist 如下 有谁知道发生了什么
  • 如何制作像 Facebook 应用程序一样的登录屏幕?

    如何制作像 Facebook 应用程序一样带有 电子邮件 和 密码 文本字段的登录屏幕 Facebook登入 http extdesenv com wp content uploads 2012 05 facebook login ios
  • 刷新单元格的 UITableView 队列

    我想知道如果调用 UITableView reloadData 时 UITableView 队列被刷新 是否有人可以回复我 我正在尝试这样做 但这对我没有帮助 有什么建议吗 如果你查看 UITableView 的头文件 你可以看到有一个名为
  • 具有隐式授权的 OAuth 应用程序中的客户端模拟

    来自 OAuth 草案 隐式section https datatracker ietf org doc html draft ietf oauth v2 31 section 1 3 2 在隐式授权流程期间发出访问令牌时 授权服务器不对客

随机推荐

  • NodeJS:将 JSON 保存到 MongoDB

    我正在尝试从 API 获取 JSON 并将其存储到 MongoDB 数据库中 显然 这是行不通的 我的应用程序似乎停留在我尝试将数据保存到数据库的位置 请告知该怎么做 这是我的代码 var express require express v
  • Rails:format.js 或 format.json,或两者?

    可能很明显 但我仍然缺乏基本知识 那么在控制器内部 两者都可以使用 还是总是 Javascript 所以两者是相同的 json and js是两种不同类型的响应 它们在 Rails 中被定义为不同的 MIME 类型 Mime Type re
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • Java:正则表达式 - 如何获取第一个引用文本

    作为初学者regex我相信我要问的事情太简单了 但无论如何我都会问 希望它不会打扰你帮助我 可以说我有这样的文字 你好 cool1 这个词 cool2 我想获取第一个引用的文本 即 cool1 不带 我的模式应该是什么 当使用匹配器时 我如
  • 是否可以在 PHP 中使用 file_get_contents 来破坏 CSRF 令牌验证

    在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法 但是 我不明白这种令牌方式如何保护file get contentsPHP 可以获取跨域文件表单的内容 gt 它可以获取表单上的令牌并使用它 那么这种token方式是如何运作
  • Elasticsearch Nest 通配符查询(带空格)

    简洁版本 我想使用 Nest 编写一个弹性搜索查询来获取完整的索引项 ContentIndexables在我的例子中作为我的自定义类型 已被索引 该查询受 some string 术语查询的约束 即 String StartsWith 其中
  • 在 iOS 上使用 HEVC 编码器输出视频尺寸巨大

    我有一个项目 目前使用 H 264 编码器在 iOS 上录制视频 我想尝试在 iOS 11 中使用新的 HEVC 编码器来减小文件大小 但发现使用 HEVC 编码器会导致文件大小急剧膨胀 GitHub 上的一个项目显示了该问题 它使用 H
  • 在 Dojo 数据网格中添加一行

    努力寻找一些易于理解的代码 如何在 Dojo 数据网格 版本 1 4 2 中添加行并清除所有行 假设数据有 2 列 其中包含客户 ID 和地址 我在用 dojo data ItemFileWriteStore 存储值 但再次不太确定应该如何
  • 如何在 IntelliJ 12 中创建一个有效的新 Google App Engine 项目?

    首先我要说的是 我之前没有 GAE 经验 我正在尝试让 GAE 在 IntelliJ 12 中工作 但遇到了问题 想知道是否有人可以看看我正在做的事情并告诉我是否有任何奇怪的地方这里 Steps 使用 JDK 1 7 0 51 在 Inte
  • 有没有办法将 CoffeeScript 发送到客户端的浏览器并*在那里*将其编译为 JavaScript?

    有没有办法将 CoffeeScript 发送到客户端浏览器并将其编译为 JavaScriptthere CoffeeScript编译器是用JavaScript编写的 那么我可以将其发送给客户端以在客户端浏览器中编译 运行此代码吗 杰里米已经
  • 如何在 Windows 10 中将文件夹添加到“Path”环境变量(带有屏幕截图)

    在 StackOverflow 和整个网络上 关于如何将特定文件夹添加到 Windows 10 的指南已经过时且很少Path用户的环境变量 我认为针对新开发人员的完整指南 包含分步说明和屏幕截图 对于帮助他们从命令提示符 https upl
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • NHibernate 具有多个数据库和事务

    我们在理解如何最好地使用 NHibernate 时遇到了一些问题 我们通常拥有相对大量 就表数量而言 的 SQL Server 数据库 而不是一个包含大量对象的数据库 我们正在研究处理多个会话工厂的各种选项 并且可能已经控制住了这一点 但是
  • 转储 YAML 时如何强制使用双引号?

    我有一个小脚本来自动化 YAML 文件中的一些操作 我读取原始 YAML 文件并将其转换为哈希 然后dump http ruby doc org stdlib 1 8 6 libdoc yaml rdoc YAML html method
  • 在 Blogger 中使用相对链接

    我正在使用博主 当我需要在我的博客文章中提到一个链接并且该链接实际上是我自己的博客文章的链接时 我在其旁边提到标签 www my blog name blogspot in 12 2013 how to do html if i chang
  • 如何在Matlab中绘制网络?

    我有一个矩阵AMatlab中的维数mx2每行包含两个节点的标签 显示网络中的直接链接 例如 如果网络有4矩阵的节点A可能A 1 2 1 3 2 1 2 4 3 2 4 1 4 2 其中第一行表示有一个链接来自1 to 2 第二行表示有一个链
  • 控制 argparse 帮助参数列表的格式?

    import argparse parser argparse ArgumentParser prog tool args u upf ref upf dict required True s skew ref skew m model r
  • 如何在 dynamodb 上获得十亿个对象的不同计数?

    获取我的 dynamodb 中存储的不同对象数量的最有效方法是什么 例如我的对象有 10 个属性 我想根据 3 个属性获得不同的计数 如果您需要计数器 最好使用 AtomicCounters http docs aws amazon com
  • 绝对定位的表头 (th) - 哪个浏览器是错误的?

    这个带有一个绝对定位列的简单表格在 Firefox 和 IE 中的呈现方式与在 Chrome 和其他基于 Webkit 的浏览器 中的呈现方式不同 http jsfiddle net WZ6x8 http jsfiddle net WZ6x
  • skView.ignoreSiblingOrder 在 swift 中的重要性/效率?

    这样做有多重要 高效skView ignoreSiblingOrder true初始化场景时 现在 我将其设置为 true 但由于某种原因 当我从 MainMenu 场景启动 GameScene 时 它 会在我的角色之前加载背景 即使背景的