1

编辑:在第一个答案之后,我对 stackoverflow 进行了更多研究,并将问题改写为°我如何只使用高清文件?”并发现:如何阻止 Cocos2D 要求标准定义资源(SD 图像)?我现在试试建议的解决方案,如果可行,我将保留已编辑的标题并删除可能具有误导性的初始问题。

有一段时间我正在尝试学习 Cocos2d 并使用诸如cookbook学习 cocos2d 之类的书籍。这是一个很好的开始,但有时我会陷入像我今天将要解释的问题一样。

我开始修改第1册第 66 页中关于使用 CCParallaxNode 的示例。我的目标是添加以下大小的四层:960 像素高和 1280 像素宽,在带有 iOS 5.0 和 Cocos2d 1.01 rc 库的 iPhone 模拟器上运行。

我确实使用安装的模板创建了一个新项目,并修改了 HelloWorldLayer.m 类,如下所示:

// 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

我确实尝试使用4运行代码,这是一个使用 GIMP 创建的带有 alpha 通道的 PNG 图像。它最初确实有效,现在不再有效。我不确定我做了什么搞砸了。

奇怪的是,带有图像5它确实有效。

我已经检查过,建议使用 1024 x 1024 图像的 UIImage 规范存在限制。所以我做了并重新调整了图像6并创建了图像缩小图像 3,它在 UIImage 指定的限制范围内但不起作用。

对于不起作用,我的意思是代码崩溃并显示以下错误消息:

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)

我认为图像大小不是问题,因为我以前能够运行,但它适用于图像5而不是其他图像6的事实表明这与我使用创建 PNG 文件的方式有关GIMP..

有胶水吗?我附上我正在使用的 GIMP 设置4的屏幕截图(不是英文,将在下面提供翻译):

厚开:保存颜色作为背景,保存分辨率,保存创建日期,保存注释和保存透明点颜色的值。

不加厚:隔行扫描(Adam7),保存伽玛,保存图层移动

设置

酒吧 坏形象

4

1 回答 1

1

为了使用 Retina 图像,您必须在项目中包含 -hd 和非 hd 文件。它们不必一定是合适的尺寸,但它们都必须存在。

所以如果你想使用一个名为的文件0-red.png,你必须包含0-red.png0-red-hd.png。另外,请注意-hd在文件名的末尾有 be。

于 2012-04-19T16:34:09.333 回答