Objective C - приложение работает в симуляторе и на других iPhone, но не запускается на моем собственном iPhone 4 - PullRequest
2 голосов
/ 11 января 2012

Мое приложение отлично работает в симуляторе и на других устройствах. У меня iPhone 4 с последним обновлением iOS, и приложение не запускается на моем устройстве.

Похоже, проблема связана с изображениями на сетчатке. При попытке запуска на телефоне появляется сообщение об ошибке:

2012-01-11 09:27:47.404 rr_game1[1569:707] cocos2d: cocos2d v1.0.1
2012-01-11 09:27:47.413 rr_game1[1569:707] cocos2d: Using Director Type:CCDirectorDisplayLink
2012-01-11 09:27:47.845 rr_game1[1569:707] cocos2d: OS version: 5.0.1 (0x05000100)
2012-01-11 09:27:47.849 rr_game1[1569:707] cocos2d: GL_VENDOR:   Imagination Technologies
2012-01-11 09:27:47.853 rr_game1[1569:707] cocos2d: GL_RENDERER: PowerVR SGX 535
2012-01-11 09:27:47.856 rr_game1[1569:707] cocos2d: GL_VERSION:  OpenGL ES-CM 1.1 IMGSGX535-63.14.2
2012-01-11 09:27:47.861 rr_game1[1569:707] cocos2d: GL_MAX_TEXTURE_SIZE: 2048
2012-01-11 09:27:47.864 rr_game1[1569:707] cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH: 16
2012-01-11 09:27:47.867 rr_game1[1569:707] cocos2d: GL_MAX_SAMPLES: 4
2012-01-11 09:27:47.871 rr_game1[1569:707] cocos2d: GL supports PVRTC: YES
2012-01-11 09:27:47.874 rr_game1[1569:707] cocos2d: GL supports BGRA8888 textures: YES
2012-01-11 09:27:47.877 rr_game1[1569:707] cocos2d: GL supports NPOT textures: YES
2012-01-11 09:27:47.880 rr_game1[1569:707] cocos2d: GL supports discard_framebuffer: YES
2012-01-11 09:27:47.883 rr_game1[1569:707] cocos2d: compiled with NPOT support: NO
2012-01-11 09:27:47.886 rr_game1[1569:707] cocos2d: compiled with VBO support in TextureAtlas : YES
2012-01-11 09:27:47.889 rr_game1[1569:707] cocos2d: compiled with Affine Matrix transformation in CCNode : YES
2012-01-11 09:27:47.892 rr_game1[1569:707] cocos2d: compiled with Profiling Support: NO
2012-01-11 09:27:48.012 rr_game1[1569:707] Game manager singleton, init
2012-01-11 09:27:48.031 rr_game1[1569:707] cocos2d: WARNING: Image (1024 x 4096) is bigger than the supported 2048 x 2048
2012-01-11 09:27:48.035 rr_game1[1569:707] cocos2d: Couldn't add image:grid.png in CCTextureCache
2012-01-11 09:27:48.047 rr_game1[1569:707] cocos2d: WARNING: Image (1024 x 4096) is bigger than the supported 2048 x 2048
2012-01-11 09:27:48.050 rr_game1[1569:707] cocos2d: Couldn't add image:bg-circuits.png in CCTextureCache
2012-01-11 09:27:48.054 rr_game1[1569:707] *** Assertion failure in -[CCParallaxNode addChild:z:parallaxRatio:positionOffset:], /Users/kevin/code/rr_game1/rr_game1/libs/cocos2d/CCParallaxNode.m:91
2012-01-11 09:27:48.058 rr_game1[1569:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Argument must be non-nil'

Странно то, что изображения, над которыми он рвется, находятся в приложении.

Screenshot of resources dir

Опять же, приложение работает на других устройствах и в симуляторе. Вот код, который загружает изображения:

backgroundNode = [CCParallaxNode node];
[self addChild:_backgroundNode z:-1];

_backgroundGrid1 = [CCSprite spriteWithFile:@"grid.png"];
_backgroundCircuits1 = [CCSprite spriteWithFile:@"bg-circuits.png"];

_backgroundGrid1.anchorPoint = CGPointMake(0,0);
_backgroundCircuits1.anchorPoint = CGPointMake(0,0);
CGPoint gridSpeed = ccp(0.05, 0.05);
CGPoint circuitSpeed = ccp(0.1, 0.1);

[_backgroundNode addChild:_backgroundGrid1 z:1 parallaxRatio:gridSpeed positionOffset:ccp(0,-winSize.height)];
[_backgroundNode addChild:_backgroundCircuits1 z:0 parallaxRatio:circuitSpeed positionOffset:ccp(0,-winSize.height)];

Я удалил приложение с телефона, запустил «чистый», перезапустил Xcode и перезагрузил компьютер. Все еще не повезло. Я также восстановил свой телефон. Я также удалил и повторно добавил активы в проект.

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Вы должны действительно разобраться в своих изображениях в более мелкие куски и, возможно, поместить их в спрайт-лист для повышения производительности.Затем вы можете просто добавить кусочки изображений рядом друг с другом, используя что-то вроде

    for (int i = 0; i < amountOfSprites; i++){
        CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:spriteName];
        sprite.anchorPoint = ccp(0,0);

        sprite.position = ccp((i * sprite.contentSize.width),0);


        [yourBatchNode addChild:sprite];
    }

, если вам нужна помощь в создании спрайтов, ознакомьтесь с этим руководством http://www.raywenderlich.com/2361/how-to-create-and-optimize-sprite-sheets-in-cocos2d-with-texture-packer-and-pixel-formats

2 голосов
/ 11 января 2012

Если честно, в вашем лог-файле говорится, что размер изображения 1024 x 4096 намного больше, чем поддерживаемый 2048 x 2048:

2012-01-11 09:27:48.031 rr_game1[1569:707] cocos2d: WARNING: Image (1024 x 4096) is bigger than the supported 2048 x 2048
2012-01-11 09:27:48.035 rr_game1[1569:707] cocos2d: Couldn't add image:grid.png in CCTextureCache
2012-01-11 09:27:48.047 rr_game1[1569:707] cocos2d: WARNING: Image (1024 x 4096) is bigger than the supported 2048 x 2048
2012-01-11 09:27:48.050 rr_game1[1569:707] cocos2d: Couldn't add image:bg-circuits.png in CCTextureCache

Вы говорите, что он работает на других устройствах, но чтоустройства они?Если они не поддерживают сетчатку, я предполагаю, что соответствующий размер изображения будет 512x2048, что соответствует максимальному размеру 2048x2048.

Если ваши изображения на сетчатке не соответствуют этим размерам, это просто не будет работать - 2048x2048 уже долженохватывают изображения размером с сетчатку.Возможно, вам придется пересмотреть свою игру, чтобы использовать меньшие размеры.

...