首先有個前提知識,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的,他們是如何做到的呢?