0

从昨天开始,我面临一个未知错误。我正在创建 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];

附上截图。

提前致谢。

4

2 回答 2

0

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

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

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

于 2013-07-24T22:40:19.777 回答
0

我猜您正在以不具有透明度的颜色模式加载此精灵表(challenge_screen.plist以及关联的纹理文件,通常是challenge_screen.pngor )。challenge_screen.pvr.*

首先,确保关联的纹理文件本身显示透明度。也许有些东西弄乱了这种特殊的纹理。

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

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

如果您的图形产生条带并且您对可用内存很好,您也可以尝试该kCCTexture2DPixelFormat_RGBA8888模式。RGBA444

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

于 2013-07-24T08:52:57.147 回答