CCSprite setTexture创建黑色方块cocos2d(iOS)

时间:2012-12-29 12:21:20

标签: cocos2d-iphone textures ccsprite

我正在尝试制作一个屏幕,其中列出了问题。好的答案应该有一个绿色标记,坏的答案应该有红色标记。

创建屏幕时,我将所有标记设置为绿色或红色。当我从网站加载问题和答案时,我正在更改标记以表示正确/错误的答案。

我的问题是,我没有看到新标记,而是接收了新制作者所应的黑色方块。奇怪的是,如果我设置的标记最初为绿色标记仍然出现绿色标记,但红色标记不是,反之亦然。

以下是我更改标记的代码:

-(void) SetMarker:(int)ToColor {

switch (ToColor) {
    case Marker_Red: {
        [Marker_Sprite setTexture:[[CCSprite spriteWithFile:@"RedDot.png"] texture]];
            break;
    }
    case Marker_Green: {
        [Marker_Sprite setTexture:[[CCSprite spriteWithFile:@"GreenDot.png"] texture]];
        break;
    }
    default:
        break;
}
}

我使用的是Cocos2d第2版。

2 个答案:

答案 0 :(得分:0)

我认为你应该在设置纹理后调用[Marker_Sprite visit];,以便精灵再次调用它的draw方法,纹理会改变。

使用动画在2纹理之间转换或转换。

另外......而不是[[CCSprite spriteWithFile:@"GreenDot.png"] texture]使用[[CCTextureCache sharedTextureCache]addImage:@"GreenDot.png"];。这纯粹是为了优化:)

答案 1 :(得分:0)

我实际上找到了这个问题的答案。似乎纹理更改最初是在主线程之外进行的,这导致了问题。

解决方案是将调用setMarker函数的函数调用到主线程中,如下所示:

[self performSelectorOnMainThread:@selector(SetGoodAnswer)withObject:nil waitUntilDone:YES];

- (void)SetGoodAnswer {

for (int i=1; i<5; i++) {
    [ButtonSprites[i] SetMarker:AnswerGood[i-1]];
}

}

此调用进行更改后,所有标记都显示正确。