2013-07-24 23 views
0

从昨天起我面临着一个未知的错误。我正在创建CCSprites或CCMenuItemImage,但它设置了黑色背景而不是背景图像。以下是我的代码,我知道它很好,因为我在很多时候都使用过它。CCSprite not showing背景图片

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"challenge_screen.plist"]; 

CCSprite *bg = [CCSprite spriteWithFile:@"ads.png"]; 
    [bg setPosition:background.position]; 

// [bg setContentSize:CGSizeMake(100, 100)]; 
    [self addChild:bg z:1000]; 



    //CGSize windowSize = [[CCDirector sharedDirector] winSize]; 

    CCMenuItemImage *coinMenuItem = [[CCMenuItemImage alloc] initWithNormalSprite:[CCSprite spriteWithSpriteFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"coin.png"]] selectedSprite:nil disabledSprite:nil block:^(id sender) 
    { 
     NSLog(@"I am Tapped"); 
    }]; 
    coinMenuItem.position = ccp(100, 100); 
    CCMenu *mainMenu = [CCMenu menuWithItems:coinMenuItem, nil]; 
    mainMenu.position = CGPointZero; 
    [self addChild:mainMenu]; 

附加的是截图。

在此先感谢。

+0

你确定你的plist定义正确吗?你是如何创造它的? – giorashc

回答

0

我猜你正在加载这个精灵表(challenge_screen.plist和相关的纹理文件,通常是challenge_screen.pngchallenge_screen.pvr.*)在一个没有透明度的颜色模式下。

首先,确保关联的纹理文件本身显示透明度。也许有些东西与这个特定纹理混淆。

一旦你检查了,如果相关的纹理是.PNG.那么你必须像这样在代码中设置纹理加载格式。您必须在加载纹理之前设置纹理格式(将纹理加载为将SpriteFrame添加到缓存的副作用)。

[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA4444]; 
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"challenge_screen.plist"];` 
    ... 

您也可以尝试kCCTexture2DPixelFormat_RGBA8888模式如果RGBA444产生与图形绑扎,如果你是好有关的可用内存。

另一方面,如果纹理是PVR.*,那么将纹理加载嵌入到文件中的格式以及在代码中设置纹理格式没有任何区别。您将需要使用适当的格式(通过TexturePacker或类似的)重新生成精灵表。

0

是您在精灵表中的背景吗?如果是这样,请尝试:

CCSprite *bg = [CCSprite spriteWithSpriteFrameName:@"ads.png"]; 

如果它是菜单项,并且您知道代码有效,则它必定是资产问题。