【问题标题】:using pthread in cocos2d-x在 cocos2d-x 中使用 pthread
【发布时间】:2012-09-25 19:34:00
【问题描述】:

今天我遇到了在 cocos2d-x 框架中更新对象的问题。 我尝试在异步线程中下载一些文本,然后更新 CCTextFieldTTF 中的文本,然后该文本字段消失。

void HelloWorld::callbackFunc(void *Layer, std::vector<promowall::CItem> Items) {
    cocos2d::CCLayer *layer = static_cast<cocos2d::CCLayer *>(Layer);
    cocos2d::CCLabelTTF *label = dynamic_cast<cocos2d::CCLabelTTF *>(layer->getChildByTag(10));
    label->setString("test");    
}

如果有人能帮助我并解释我如何使用 openGl 和 pthreads,我将不胜感激。

【问题讨论】:

    标签: c++ cocos2d-iphone cocos2d-x


    【解决方案1】:

    如果你的 callbackFunc 是从这个异步线程调用的,它可能会导致可能导致这种行为的竞争条件(cocos 缓存所有渲染的字体标签,并且 CCTextureManager 不是线程安全的)。

    另外(我认为您可以在 Apple 的 OpenGL 编程指南中找到以下信息) - 从不同线程调用所有 OpenGL 方法是不安全的。如果你在不同的线程中创建这个字符串“test”,cocos 实际上最终会创建一个新的 OpenGL 纹理(这可能不合适,因为在不同的线程中创建)。我认为您可以通过在其他地方(在主线程上)创建具有相同“测试”文本的不同标签来检查该理论-如果在您的代码 sn-p 中创建的标签不再消失-这意味着该理论是正确的:)

    如何解决?

    我相信您必须在主 UI 线程中创建标签(或在其上设置文本) - 例如,记住队列中异步回调的结果,并在某处的更新方法中定期检查它。并记住正确的锁定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多