0

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

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

我的问题是,我没有出现新的标记,而是在新制造商应该出现的地方收到了一个黑色方块。奇怪的是,如果我最初将标记设置为绿色,那么绿色标记仍然会出现,但红色的不是,反之亦然。

这是我的标记更改代码:

-(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。

4

2 回答 2

0

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

要么使用动画,要么在 2 个纹理之间过渡。

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

于 2012-12-29T18:51:05.937 回答
0

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

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

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

-(无效)SetGoodAnswer {

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

}

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

于 2012-12-29T19:52:22.833 回答