Jak podejść do plików -hd
EDYTOWAĆ:po pierwszej odpowiedzi przyjrzałem się bliżej przepływowi stosów i przeredagowałem problem jako: jak mogę używać tylko plików hd? ”i znalazłem to:Jak powstrzymać Cocos2D przed wymaganiem zasobów o standardowej rozdzielczości (obrazów SD)? Spróbuję teraz zaproponowanego rozwiązania i jeśli to zadziała, zostawię edytowany tytuł i usunę początkowe pytanie, które może być mylące.
to chwila, w której próbuję nauczyć się Cocos2d i używać książek takich jakksiążka kucharska iucz się cocos2d. To świetny początek, ale czasami wpadam w kłopoty, takie jak ten, który spróbuję dziś wyjaśnić.
Zacząłem modyfikować przykład przy użyciu CCParallaxNode w książce1 na stronie 66. Moim celem jest dodanie czterech warstw o następującym rozmiarze: 960 pikseli wysokości i 1280 pikseli szerokości na symulatorze iPhone'a z systemem iOS 5.0 i biblioteką Cocos2d 1.01 rc.
Stworzyłem nowy projekt przy użyciu zainstalowanych szablonów i zmodyfikowałem klasę HelloWorldLayer.m w następujący sposób:
<code>// Import the interfaces #import "HelloWorldLayer.h" // HelloWorldLayer implementation @implementation HelloWorldLayer +(CCScene *) scene { // 'scene' is an autorelease object. CCScene *scene = [CCScene node]; // 'layer' is an autorelease object. HelloWorldLayer *layer = [HelloWorldLayer node]; // add layer as a child to scene [scene addChild: layer]; // return the scene return scene; } // on "init" you need to initialize your instance -(id) init { // always call "super" init // Apple recommends to re-assign "self" with the "super" return value if( (self=[super init])) { CCSprite* parallaxLayer01 = [CCSprite spriteWithFile:@"0-hd-red.png"]; CCSprite* parallaxLayer02 = [CCSprite spriteWithFile:@"0-hd-red.png"]; CCSprite* parallaxLayer03 = [CCSprite spriteWithFile:@"0-hd-red.png"]; CCSprite* parallaxLayer04 = [CCSprite spriteWithFile:@"0-hd-red.png"]; /** CCSprite* parallaxLayer01 = [CCSprite spriteWithFile:@"0-hd.png"]; CCSprite* parallaxLayer02 = [CCSprite spriteWithFile:@"1-hd.png"]; CCSprite* parallaxLayer03 = [CCSprite spriteWithFile:@"2-hd.png"]; CCSprite* parallaxLayer04 = [CCSprite spriteWithFile:@"3-hd.png"]; **/ /** CCSprite* parallaxLayer01 = [CCSprite spriteWithFile:@"2-hd.png"]; CCSprite* parallaxLayer02 = [CCSprite spriteWithFile:@"2-hd.png"]; CCSprite* parallaxLayer03 = [CCSprite spriteWithFile:@"2-hd.png"]; CCSprite* parallaxLayer04 = [CCSprite spriteWithFile:@"2-hd.png"]; **/ /** CCSprite* parallaxLayer01 = [CCSprite spriteWithFile:@"bar.png"]; CCSprite* parallaxLayer02 = [CCSprite spriteWithFile:@"bar.png"]; CCSprite* parallaxLayer03 = [CCSprite spriteWithFile:@"bar.png"]; CCSprite* parallaxLayer04 = [CCSprite spriteWithFile:@"bar.png"]; **/ /** CCSprite* parallaxLayer01 = [CCSprite spriteWithFile:@"bar-hd.png"]; CCSprite* parallaxLayer02 = [CCSprite spriteWithFile:@"bar-hd.png"]; CCSprite* parallaxLayer03 = [CCSprite spriteWithFile:@"bar-hd.png"]; CCSprite* parallaxLayer04 = [CCSprite spriteWithFile:@"bar-hd.png"]; **/ //Create a parallax node and add all four sprites CCParallaxNode* parallaxNode = [CCParallaxNode node]; [parallaxNode setPosition:ccp(0,0)]; [parallaxNode addChild:parallaxLayer01 z:1 parallaxRatio:ccp(0, 0) positionOffset:ccp(0,0)]; [parallaxNode addChild:parallaxLayer02 z:2 parallaxRatio:ccp(1, 0) positionOffset:ccp(0,0)]; [parallaxNode addChild:parallaxLayer03 z:3 parallaxRatio:ccp(2, 0) positionOffset:ccp(0,0)]; [parallaxNode addChild:parallaxLayer04 z:4 parallaxRatio:ccp(3, 0) positionOffset:ccp(0,0)]; [self addChild:parallaxNode z:0 tag:1]; //Move the node to the left then the right //This creates the effect that we are moving to the right then the left CCMoveBy* moveRight = [CCMoveBy actionWithDuration:5.0f position:ccp(-80, 0)]; CCMoveBy* moveLeft = [CCMoveBy actionWithDuration:2.5f position:ccp(80, 0)]; CCSequence* sequence = [CCSequence actions:moveRight, moveLeft, nil]; CCRepeatForever* repeat = [CCRepeatForever actionWithAction:sequence]; [parallaxNode runAction:repeat]; } return self; } // on "dealloc" you need to release all your retained objects - (void) dealloc { // in case you have something to dealloc, do it in this method // in this particular example nothing needs to be released. // cocos2d will automatically release all the children (Label) // don't forget to call "super dealloc" [super dealloc]; } @end </code>
Próbowałem uruchomić kod za pomocą4, obraz PNG z kanałem alfa utworzonym za pomocą GIMP. Początkowo działał, a teraz już nie. Nie jestem pewien, co zrobiłem, żeby zepsuć.
Dziwne jest to, że z obrazem5 to działa.
Sprawdziłem i istnieją ograniczenia dotyczące specyfikacji UIImage, które sugerują użycie obrazu 1024 x 1024. Tak zrobiłem i przeskalowałem obraz6 i stworzony obraz 3 który mieści się w limicie określonym przez UIImage, ale nie działa.
Nie działa to, że kod ulega awarii z następującym komunikatem o błędzie:
<code>2012-04-19 17:14:29.189 ParallaxNodeTest[3713:10a03] cocos2d: cocos2d v1.0.1 2012-04-19 17:14:29.190 ParallaxNodeTest[3713:10a03] cocos2d: Using Director Type:CCDirectorDisplayLink 2012-04-19 17:14:29.226 ParallaxNodeTest[3713:10a03] cocos2d: OS version: 5.1 (0x05010000) 2012-04-19 17:14:29.227 ParallaxNodeTest[3713:10a03] cocos2d: GL_VENDOR: Apple Computer, Inc. 2012-04-19 17:14:29.228 ParallaxNodeTest[3713:10a03] cocos2d: GL_RENDERER: Apple Software Renderer 2012-04-19 17:14:29.229 ParallaxNodeTest[3713:10a03] cocos2d: GL_VERSION: OpenGL ES-CM 1.1 APPLE 2012-04-19 17:14:29.229 ParallaxNodeTest[3713:10a03] cocos2d: GL_MAX_TEXTURE_SIZE: 4096 2012-04-19 17:14:29.230 ParallaxNodeTest[3713:10a03] cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH: 16 2012-04-19 17:14:29.231 ParallaxNodeTest[3713:10a03] cocos2d: GL_MAX_SAMPLES: 4 2012-04-19 17:14:29.233 ParallaxNodeTest[3713:10a03] cocos2d: GL supports PVRTC: YES 2012-04-19 17:14:29.234 ParallaxNodeTest[3713:10a03] cocos2d: GL supports BGRA8888 textures: YES 2012-04-19 17:14:29.235 ParallaxNodeTest[3713:10a03] cocos2d: GL supports NPOT textures: YES 2012-04-19 17:14:29.235 ParallaxNodeTest[3713:10a03] cocos2d: GL supports discard_framebuffer: YES 2012-04-19 17:14:29.235 ParallaxNodeTest[3713:10a03] cocos2d: compiled with NPOT support: NO 2012-04-19 17:14:29.236 ParallaxNodeTest[3713:10a03] cocos2d: compiled with VBO support in TextureAtlas : YES 2012-04-19 17:14:29.236 ParallaxNodeTest[3713:10a03] cocos2d: compiled with Affine Matrix transformation in CCNode : YES 2012-04-19 17:14:29.237 ParallaxNodeTest[3713:10a03] cocos2d: compiled with Profiling Support: NO 2012-04-19 17:14:29.268 ParallaxNodeTest[3713:10a03] cocos2d: surface size: 960x640 2012-04-19 17:14:29.336 ParallaxNodeTest[3713:10a03] cocos2d: Filename(0-hd-red.png) contains -hd suffix. Removing it. See cocos2d issue #1040 2012-04-19 17:14:29.337 ParallaxNodeTest[3713:10a03] cocos2d: CCFileUtils: Warning HD file not found: 0-red-hd.png 2012-04-19 17:14:29.338 ParallaxNodeTest[3713:10a03] cocos2d: CCTexture2D. Can't create Texture. UIImage is nil 2012-04-19 17:14:29.339 ParallaxNodeTest[3713:10a03] cocos2d: Couldn't add image:0-red.png in CCTextureCache 2012-04-19 17:14:29.340 ParallaxNodeTest[3713:10a03] cocos2d: Filename(0-hd-red.png) contains -hd suffix. Removing it. See cocos2d issue #1040 2012-04-19 17:14:29.340 ParallaxNodeTest[3713:10a03] cocos2d: CCFileUtils: Warning HD file not found: 0-red-hd.png 2012-04-19 17:14:29.341 ParallaxNodeTest[3713:10a03] cocos2d: CCTexture2D. Can't create Texture. UIImage is nil 2012-04-19 17:14:29.342 ParallaxNodeTest[3713:10a03] cocos2d: Couldn't add image:0-red.png in CCTextureCache 2012-04-19 17:14:29.342 ParallaxNodeTest[3713:10a03] cocos2d: Filename(0-hd-red.png) contains -hd suffix. Removing it. See cocos2d issue #1040 2012-04-19 17:14:29.343 ParallaxNodeTest[3713:10a03] cocos2d: CCFileUtils: Warning HD file not found: 0-red-hd.png 2012-04-19 17:14:29.344 ParallaxNodeTest[3713:10a03] cocos2d: CCTexture2D. Can't create Texture. UIImage is nil 2012-04-19 17:14:29.345 ParallaxNodeTest[3713:10a03] cocos2d: Couldn't add image:0-red.png in CCTextureCache 2012-04-19 17:14:29.345 ParallaxNodeTest[3713:10a03] cocos2d: Filename(0-hd-red.png) contains -hd suffix. Removing it. See cocos2d issue #1040 2012-04-19 17:14:29.346 ParallaxNodeTest[3713:10a03] cocos2d: CCFileUtils: Warning HD file not found: 0-red-hd.png 2012-04-19 17:14:29.365 ParallaxNodeTest[3713:10a03] cocos2d: CCTexture2D. Can't create Texture. UIImage is nil 2012-04-19 17:14:29.366 ParallaxNodeTest[3713:10a03] cocos2d: Couldn't add image:0-red.png in CCTextureCache 2012-04-19 17:14:29.367 ParallaxNodeTest[3713:10a03] *** Assertion failure in -[CCParallaxNode addChild:z:parallaxRatio:positionOffset:], /Users/daniele/Desktop/ParallaxNodeTest/ParallaxNodeTest/libs/cocos2d/CCParallaxNode.m:91 2012-04-19 17:14:29.369 ParallaxNodeTest[3713:10a03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Argument must be non-nil' *** First throw call stack: (0x19e2022 0x1f7ccd6 0x198aa48 0x11af2cb 0x40661 0xb588e 0x3ba25 0xb5632 0xb4d3e 0x8164be 0x817274 0x826183 0x826c38 0x81a634 0x279aef5 0x19b6195 0x191aff2 0x19198da 0x1918d84 0x1918c9b 0x816c65 0x818626 0xb4816 0x24b5 0x1) </code>
Myślę, że rozmiar obrazu nie jest tutaj problemem, ponieważ wcześniej byłem w stanie uruchomić, ale fakt, że działa z obrazem5 a nie z innymi obrazami6 sugeruje, że mam coś wspólnego z tym, jak utworzyłem pliki PNG przy użyciu GIMP ..
Jakikolwiek klej? Załączam zrzut ekranu ustawień GIMP4 Używam (nie w języku angielskim, zapewni tłumaczenie poniżej):
Gruby: Zapisz kolor jako tło, zapisz rozdzielczość, zapisz datę utworzenia, zapisz komentarze i zapisz wartość kolorów przezroczystych kropek.
Nie zagęszczony: Przeplot (Adam7), zapisz gamma, zapisz ruch warstwy