我正在构build我的第一个精灵套件游戏,最近阅读了一篇文章,说使用SKTextureAtlas来提高性能。 所以我把我所有的精灵图像都转移到了有组织的.atlas文件夹中,并相应地更新了代码。 不过,现在我的精灵怪异的物理机构(主要是过度扩大) 。 例如,我的玩家精灵有三个状态:飞(平),飞起来,飞下来。 这三个图像是非常相似的,有轻微的变化(arm平放,上,下) 。 在迁移到纹理图集之前,物理图像与图像相关。 然而,现在它比图像大得多,在y轴上略微拉伸。 这是我的player.atlas文件结构: 玩家飞iphone.atlas: player-flying-down@2x.png player-flying-down@3x.png player-flying-up@2x.png player-flying-up@3x.png player-flying@2x.png player-flying@3x.png 下面是我的代码示例: (Player是一个子类SKSpriteNode) let textureAtlas = SKTextureAtlas(named: "player-iphone") let playerFlyingTexture = textureAtlas.textureNamed("player-flying") let player = Player(texture: playerFlyingTexture, color: UIColor.clearColor(), size: CGSizeMake(100.0, 100.0)) let physicsBody = SKPhysicsBody(texture: playerFlyingTexture, size: CGSizeMake(100.0, 100.0)) physicsBody.dynamic = true physicsBody.affectedByGravity = true physicsBody.usesPreciseCollisionDetection = false […]
类似于WWDC的SpriteKit精选游戏“冒险”,我尝试通过拼贴加载我的背景图片。 我创build了一个包含6,300“瓦片”的纹理图集,每个瓦片的尺寸都是100×100像素。 完整的背景图像总共为30,000×2048(用于视网膜显示器)。 这个想法是,背景将从右侧移动到左侧(侧滚动)。 第一列和最后一列匹配,以便它们看起来连续。 当应用程序运行时,它将我的初始加载屏幕和标题图像加载到我的内存选项卡中的54MB ,CPU使用率为16% 。 这一直保持不变,我浏览菜单,直到我select我的关卡,它告诉后台线程加载关卡资产(其中包含前述的背景图片)。 整个.atlas文件夹显示只有35.4MB 。 我不相信这是一个问题,因为Adventure .atlas文件夹(来自WWDC)显示只有32.7MB 。 一旦我select了关卡,在我开始接收内存警告之前,它会在.atlas文件夹中加载大约20个纹理,并使应用程序崩溃。 我检查了仪器泄漏,并没有显示任何内存泄漏。 我没有收到任何编译器错误(甚至没有EXC_BAD_ACCESS之一)。 我查看过我的设备控制台,发现应用程序崩溃的地方有几行,但对我来说并不合适。 我也检查了僵尸,但似乎没有find任何。 CoreLevel.m dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // Used to determine time spent to load NSDate *startDate = [NSDate date]; // Atlas to load SKTextureAtlas *tileAtlas = [SKTextureAtlas atlasNamed:@"Day"]; // Make sure the array is empty, before storing the […]
当一个项目只有@ 2x的图像,因为它只针对视网膜显示设备,地图集精灵套件地图集得到规模错误的RGBA8888_COMPRESSED设置用于PVR纹理。 RGBA8888_PNG(默认) 有时可以正常工作。 在切换到地图集之前,我把所有@ 2张图像放在一个组中,并加载它们: sprite = [SKSpriteNode spriteNodeWithImageNamed:@"theImage.png"]; 没问题。 正确的大小。 现在使用地图集和RGBA8888_COMPRESSED,我得到了SKTexture,图像太大了。 完全相同的节点和configuration。 只使用阿特拉斯的SKTexture。 为什么会这样呢?
由于我的示例项目被删除(我认为这将是更容易testing),我会张贴一些代码和图像来说明我的观点。 这里是示例图像 我的地图集设置: 我的启动图像设置: 代码中我添加这些精灵到我的场景 override func didMoveToView(view: SKView) { let texture = SKTextureAtlas(named: "scenery") let test = SKSpriteNode(texture: texture.textureNamed("test")) test.position = CGPoint(x: self.size.width/2, y: self.size.height/2) self.addChild(test) } 这些是我的结果: iPhone 5模拟器: iPhone 6 plus模拟器: 我尝试更改启动图像以使用资产目录。 然后iPhone 6加上似乎高档2倍的屏幕。 它仍在加载2倍的图像,但将其扩展。 我需要它来加载我的3倍图像,并与我的2倍图像成比例。 Gabuh的回答下面指出了正确的方向。 在一个新项目上工作。 但是,如果我使用他的解决scheme来处理我的真实SpriteKit项目,我的3x图像不会缩小。 他们比他们应该大3倍。