Android版CCLabelTTF在setstring时出现黑块

首先有个前提知识,cocos2dx里,只能在ui线程(通常也就是主线程)中进行渲染工作(貌似现在有一些引擎是支持多线程渲染的,没有深入研究),否则大约会因为多个线程同时给GPU发指令而出现问题,比如setstring出现黑块。

今天这个bug出现的原因是在C++代码里通过jni调用java来显示键盘,在输入完成后,再在java里面通过jni回调C++的代码来setstring。貌似C++代码里面通过jni调java这件事情新起了个线程,导致了java回调C++的setstring操作就不在主线程里面了,从而出现问题。只在Android有问题,pc正常。

针对这个具体问题,解决方法是在java回调里面只设置标志,主线程查询标志再进行具体的setstring就好了。但是扩展问题包括jni是如何起新线程的,这样所有jni相关的代码都不能做ui操作,可能需要统一机制处理;以及自带的CCEditBox以及CCTextFieldTTF是好像直接setstring的,他们是如何做到的呢?

原文地址:https://www.cnblogs.com/unionfind/p/3370465.html