较大的纹理图集会因内存压力而导致终止

2024-01-26

我正在 iOS Swift 中设计一款游戏。

我有一个大约 100 个 1920x1080p PNG 的大型纹理图集。当我调用这些函数时,它会由于内存压力而导致应用程序崩溃。当我禁用该功能时,我的应用程序运行得很好。

我可以通过编辑代码来防止这种崩溃吗?还是我的纹理图集太大了?

Code:

var waterWave: SKSpriteNode!
var waterWalkingFrames : [SKTexture]!

func addWater() {

    let waterAnimatedAtlas = SKTextureAtlas(named: "water.atlas")
    var waterFrames = [SKTexture]()

    let numImages = waterAnimatedAtlas.textureNames.count

    for var i=0; i<numImages; i++ {
        let waterTextureName = "water_000\(i)"
        waterFrames.append(waterAnimatedAtlas.textureNamed(waterTextureName))
    }

    self.waterWalkingFrames = waterFrames

    let firstFrame = waterWalkingFrames[0]
    self.water = SKSpriteNode(texture: firstFrame)

    self.water.anchorPoint = CGPointMake(0.5, 0.5)
    self.water.position = CGPointMake(CGRectGetMidX(self.frame), self.runningBar.position.y + (self.runningBar.size.height / 2) + 5)
    self.water.size.width = self.frame.size.width
    self.water.size.height = self.frame.size.height
    self.water.zPosition = 7

    self.addChild(self.water)

    waterAnimation()
}

func waterAnimation() {

    self.water.runAction(SKAction.repeatActionForever(
        SKAction.animateWithTextures(waterWalkingFrames, timePerFrame: (1 / 60), resize: false, restore: true)), withKey:"surferBasic")
}

即使您以某种方式优化纹理(例如,改变纹理格式 https://stackoverflow.com/a/29112351/3402095)。如果使用标准 RGBA8888 格式存储在 RAM 内存中,则 1920x1080px 纹理占用约 8 MB,正如您所说,因为设备内存限制 https://stackoverflow.com/a/15200855/3402095,应用程序会在某个时候崩溃。

在这种情况下,如果你的动画允许你这样做,一个好方法是制作一段视频的,然后使用SK视频节点 https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKVideoNode/index.html来玩它。文档中甚至建议这样做,因为在某些情况下使用纹理可能会很昂贵:

与任何其他节点一样,您可以将电影节点放置在 节点树和 Sprite Kit 将正确渲染它。例如,你 可能会使用视频节点来动画化一些视觉行为 使用纹理集合来定义的成本很高。

这对于背景动画、过场动画、介绍......来说是一种合适的方式。

要循环播放视频,您可以使用 AVPlayer用它初始化 SKVideoNode https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKVideoNode/index.html#//apple_ref/occ/instm/SKVideoNode/initWithAVPlayer:。阅读更多here https://stackoverflow.com/a/28816458/3402095。我建议您这样做,因为 SKVideoNode 仅限于用于控制视频播放的 play() 和pause() 方法。

希望这有帮助并有意义!

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

较大的纹理图集会因内存压力而导致终止 的相关文章

  • 为什么 Xcode 4 不会对我未完整实现 UITableViewDataSource 协议发出警告?

    如果我在 Xcode 中使用以下代码声明并不完全实现我自己的协议 一些协议 h protocol SomeProtocol
  • 暂停视频录制[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试创建一个应用程序 用户可以在其中从相机录制视频 该应用程序的功能之一必须是文件录制中的暂停 例如 用户通过按 开始 按钮开始
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • ITMS-90535 无法使用最新的 Google Signin SDK 发布 iOS 应用程序

    我正在使用 xcode 7 GM 种子并通过 cocoapods 安装了最新的 Google Signin SDKpod Google SignIn 当我尝试将我的应用程序发布到苹果应用程序商店时 我收到附加错误 Help 以下是 Goog
  • 我们可以从 LinkPresentation 框架中的 LPLinkView 中提取图像吗?

    我想在我的应用程序中呈现丰富的链接 并将这些数据发送到我的服务器 我需要访问视图内的图像LPLinkView https developer apple com documentation linkpresentation lplinkvi
  • UICollectionView 未出现

    我正在尝试设置UICollectionView 以编程方式在我的视图控制器中扩展UIViewController 由于某种原因 我的收藏视图根本没有显示 以下是我所拥有的 为什么没有出现 我将它连接到委托和数据源并将其添加为子视图self
  • PresentModalViewController 不执行任何操作

    我有一个 UIViewController parent 调用presentModalViewController与另一个 UIViewController child on viewDidLoad If parent没有 UINaviga
  • Swift 中带圆角的 NSWindow

    我想要一个圆角的窗户 但我在每个角落都有一个白点 Code let effect NSVisualEffectView frame NSRect x 0 y 0 width 0 height 0 effect blendingMode be
  • 使用 Google place API 从 lat long 获取附近的地点

    我正在使用 google place API 即 https maps googleapis com maps api place search json location 33 7167 73 0667 radius 500 type f
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 在 Swift 中自动移动 UISlider

    我想在按下按钮时将 UISlider 从 minValue 循环移动到 maxValue 并在再次按下按钮时将其停止在当前位置 我想使用 Swift 我遇到的主要问题是函数 slider setValue 太快了 我希望动画更慢 IBAct
  • SpriteKitPhysicsBody非矩形碰撞

    pipeUp physicsBody SKPhysicsBody rectangleOfSize pipeUp size 在此编码中我使用了rectangleOfSize对于碰撞物理体 但如果我想按像素仅使用图像的形状 我应该使用什么而不是
  • 混合静态和动态 UITableViewController 内容会导致 NSRangeException

    我一直在寻找这个错误 并找到了一些具有类似行为的帖子 但没有解决问题的解决方案 我有一个 UITableViewController 在 SB 中声明为静态 它具有以下部分 第 0 部分 配方 是静态的 有 4 个单元格 第 1 部分 口味
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以
  • xcode 6.1 (Swift) 中的 SIGABRT 运行时错误

    与最初的代码相比 唯一的更改是在ViewControl swift override func viewDidLoad newMessage hidden true super viewDidLoad Do any additional s
  • NSPredicate 的 onFormat 字符串

    我想用 id 键对数据进行排序 我如何理解格式字符串的用途NSPredicate格式 我有一个100号的帖子 我的代码 let objectIDs posts map 0 id let predicate NSPredicate forma
  • 在 iOS 上从 GPS 获取时间

    我正在开发一个跟踪器应用程序 该应用程序需要高精度地了解设备位置 即它使用位置服务并忽略水平精度低于 20 米的位置 CLLocation没有明确声明是否通过 GPS 确定 但是 如果水平精度为 20 米或更好 则可以认为它是来自 GPS
  • 显示键盘时如何在 TextView 下方添加更多填充

    当我在 ScrollView 中有 TextField 并点击它时 键盘会按预期显示 但似乎 TextField 已向上移动到足以显示输入区域 但我希望移动到足够的位置 以便整体可见 否则它看起来像是被剪裁了的 我找不到改变这种行为的方法
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we

随机推荐

  • vis.js 中的多个节点选择

    我正在使用 vis js 因为我喜欢它的网络可视化模块 我想知道是否可以选择多个节点 因为我在文档中找不到它 Cheers Riccardo 更新 文档的链接是http visjs org docs network interaction
  • Squeak Smalltalk,为什么有时简化的方法不起作用?

    2332 2332 reduced 2332 2 reduced 2332 322 reduced 1166 161 2332 3 reduced 2332 3 2332 2432423 reduced 2332 2432423 看看上面的
  • 为什么 `synchronized (new Object()) {}` 是无操作?

    在下面的代码中 class A private int number public void a number 5 public void b while number 0 如果调用方法 b 然后启动一个新线程来触发方法 a 则不能保证方法
  • SQL 查询从双返回 N 行

    我想编写一个接受绑定变量 例如 NUM 的 SQL 查询 其输出由一列和 NUM 行组成 每行都有其行号 即 如果我们将 NUM 作为 7 传递 则输出应为 VAL 1 2 3 4 5 6 7 查询中不应有任何实际的数据库表 也不应使用 P
  • 如何将 HTML 转换为 Markdown,同时保留非 Markdown HTML 标签?

    我希望能够获取现有的 HTML 片段并将其转换为 Markdown 我为此目的尝试过 pandoc pandoc test html o test md 其中 test html 如下所示 Hello and some more text
  • 我想知道 &a 到底返回什么?

    Suppose 第一个案例 int a int p a it works no error 第二种情况 long int a long int b b a it wont work 我们大多数人都说 b 是变量而不是指针 但请看下面的内容
  • 如何在 JavaScript 中使用媒体查询

    我对 JavaScript 知之甚少 所以我什至不确定我的问题是否有意义 然而 我的观点是如何应用相同的媒体查询原理来根据屏幕的宽度更改脚本上的特定值 在下面的示例中 我使用滚动间谍活动菜单 并使用 100px 的负滚动来进行标题补偿 此偏
  • ruby(1.9.3) on Rails(3.2.3) Activerecord-odbc-适配器

    我有一个遗留数据库 Progress OpenEdge 我需要将其用于大量报告 我可以使用 ruby 1 8 6 和 Rails 2 0 odbc adapter 和 odbc rails 由于不再支持 1 8 6 并且 Rails 2 0
  • 将 json 数据格式化为驼峰式

    我从服务器收到一个 json 响应 如下所示 Response FirstName John LastName Smith NickNames NameOne Johnny NameTwo JohnS NameThree Smithy Su
  • 如何克服Python 3.4 NameError:名称'basestring'未定义

    我在本地目录中有一个名为 hello txt 的文件以及 test py 其中包含以下 Python 3 4 代码 import easywebdav webdav easywebdav connect 192 168 1 6 userna
  • 数组和隐式生命周期对象创建

    有些类型被标准定义为隐式生命周期类型 数组就是其中之一 一些函数隐式创建具有隐式生命周期的对象 malloc 等就是其中之一 包含隐式创建具有隐式生存期的对象的操作列表 可在此处找到 https en cppreference com w
  • React Native:我应该使用哪个导航器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我必须在 3 个月内构建一个相对较大的跨平台 iOS 和 Android 应用程序 到目前为止 当谈到
  • 具有嵌入式竞技场的堆栈分配器问题

    我在使用 Howard Hinnant 时遇到崩溃基于堆栈的分配器 http howardhinnant github io stack alloc h 都在 MacOS 和 64 位 Linux 上的 Clang 3 4 这是一个最小的例
  • 百分比和树木

    我有一棵无序的树 每个节点代表一个可以完成 1 未完成 0 或有子任务的任务 例如 1 1 1 1 2 1 2 1 1 2 2 1 3 2 3 3 1 4 4 1 4 1 1 5 假设叶子 1 2 1 3 1 和 5 是done 1 1 1
  • 如何强制 Flutter 重建/重绘所有 widget?

    有没有办法强制 Flutter 重绘所有小部件 例如 在区域设置更改后 Your Widget应该有一个setState 方法 每次调用该方法时 都会重新绘制小部件 文档 Widget setState https api flutter
  • 如何打开并查看Excel文件的XML结构?

    我想打开Excel文件的路径xl worksheets sheet1 xml 当我谷歌如何执行此操作时 一篇文章要求我将 Excel 文件重命名为 zip 然后解压缩该文件并检查结构 但即使在我压缩并解压 Excel 文件后 我也没有在提取
  • 如何在使用 GROUP BY 时返回数组

    现在 我有这样的疑问 SELECT COUNT AS Count SUM Ask AS Ask SUM Cost AS Cost Provider Factura FROM store items WHERE Provider NOT IN
  • 按键时从 NSTextField 发送操作而不是返回

    我想显示解除按键后新推文剩余的字符数 目前 只有在取消退货时才会发生这种情况 IBAction updateCharacterCountFromNewTweetField id sender newTweetCharacterCount s
  • 如何将活动指示器放在表格视图中间

    我已经设置了活动指示器 spinner center CGPointMake UIScreen mainScreen bounds size width 2 UIScreen mainScreen bounds size height 2
  • 较大的纹理图集会因内存压力而导致终止

    我正在 iOS Swift 中设计一款游戏 我有一个大约 100 个 1920x1080p PNG 的大型纹理图集 当我调用这些函数时 它会由于内存压力而导致应用程序崩溃 当我禁用该功能时 我的应用程序运行得很好 我可以通过编辑代码来防止这