我正在尝试制作一个屏幕,其中列出了问题。好的答案应该有一个绿色标记,坏的答案应该有红色标记。
创建屏幕时,我将所有标记设置为绿色或红色。当我从网站加载问题和答案时,我正在更改标记以表示正确/错误的答案。
我的问题是,我没有看到新标记,而是接收了新制作者所应的黑色方块。奇怪的是,如果我设置的标记最初为绿色标记仍然出现绿色标记,但红色标记不是,反之亦然。
以下是我更改标记的代码:
-(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版。
答案 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]];
}
}
此调用进行更改后,所有标记都显示正确。