CCSprite不显示背景图像

时间:2013-07-24 07:09:58

标签: ios cocos2d-iphone ccsprite

从昨天开始,我面临着一个未知的错误。我正在创建CCSprites或CCMenuItemImage,但它设置黑色背景而不是背景图像。以下是我的代码,我知道它很好,因为我多次使用它。

[[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];

附件是截图。

提前致谢。

2 个答案:

答案 0 :(得分: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 或类似方法)重新生成精灵表。

答案 1 :(得分:0)

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

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

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