0

質問と回答を一覧表示する画面を作成しようとしています。良い答えには緑色のマーカーが、悪い答えには赤いマーカーが表示されます。

画面を作成するときは、すべてのマーカーを緑または赤に設定します。Web サイトから質問と回答を読み込むときに、正しい/間違った回答を表すようにマーカーを変更しています。

私の問題は、新しいマーカーが表示される代わりに、新しいメーカーがあるはずの場所に黒い四角が表示されることです。奇妙なことに、最初にマーカーを緑に設定した場合、緑のマーカーは表示されますが、赤のマーカーは表示されず、その逆も同様です。

マーカー変更のコードは次のとおりです。

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

私は実際にこの質問に対する答えを見つけました。テクスチャの変更は元々メインスレッドから行われているようで、これが問題の原因でした。

解決策は、setMarker関数を呼び出していた関数の呼び出しを次のようにメインスレッドに入れることでした。

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

-(void)SetGoodAnswer {

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

}

この呼び出しが変更を行った後、すべてのマーカーが正しく表示されます。

于 2012-12-29T19:52:22.833 に答える
0

[Marker_Sprite visit];スプライトが再びdrawメソッドを呼び出してテクスチャが変更されるように、テクスチャを設定した後で呼び出す必要があると思います。

それか、アニメーションを使用して2つのテクスチャ間を遷移します。

[[CCSprite spriteWithFile:@"GreenDot.png"] texture]また...使用する代わりに[[CCTextureCache sharedTextureCache]addImage:@"GreenDot.png"]; 。これは純粋に最適化のためです:)

于 2012-12-29T18:51:05.937 に答える