android上使用cocos2dx的乙個bug

2021-06-02 12:10:36 字數 738 閱讀 8432

來北京一星期了,大體上過得還算不錯,公司的環境正是我想要的,可以從九天身上學到很多東西.主要任務是想辦法把獵鳥移到android上, 一直有bug 都是在呼叫free 刪除物件的時候 而linux windows以及ios上都沒有錯.很奇怪 糾結了好幾天.最後發現問題在std::string上.那個經典的跨module(exe、動態庫)間申請/釋放記憶體違例的問題. 查詢這個問題時真的很費時,也不容易想到.

在android上一般我們建立三個動態庫 cocos2d cocosdenshion和遊戲主體邏輯的動態庫。一般情況下所有精靈和action都是由cocos2dx庫建立,刪除也由cocos2dx庫刪除(通過呼叫release()).

但是我們的遊戲中為了優化使用了物件分配池,很多物件都是在遊戲主體的那個動態庫中分配的.

對於包含string物件的一些類如cclabelatlas, 分配時,把string和string內部所指向的char*字串建立在遊戲主體的動態庫位址空間中,而當在cocos2dx庫中刪除它時,stl庫會檢查該char*是不是該動態庫中的位址空間 這裡顯然不是,所以crash了.

我的解決方法是把cocos2dx編譯成乙個靜態庫,然後和遊戲主體一起打包成乙個動態庫,這樣他們的位址空間就是一樣的了. 

windows上可以開啟多執行緒dll方式 將參與合作的module統統以鏈入crt庫,使他們在同乙個位址空間中, gcc這邊應該也有

但我對gcc這方面的配置可能還不是很熟,或許通過gcc的配置可以解決這個問題,希望熟悉的網友給個解答吧. 

Android和WebOS上使用debian

android和webos都是基於linux開發的移動作業系統,說基於linux的話linus聽了肯定皺眉頭,因為其實核心就是linux,改動基本都限於驅動和外圍gnu工具的選擇。所以在上述兩個平台上利用chroot建立常見linux發行版的環境就顯得順理成章。andorid 電子市場 google...

Android上的otto的使用

類此與廣播,但是比廣播更輕的乙個框架,通過在傳送的地方註冊,傳送要傳送的資料到post裡面,然後在接受的地方反註冊,寫個方法接受該事件就好了。但是要注意的是反註冊在不同的activity中的時候,要把onpause中的反註冊寫到ondestroy中才能收到傳送的訊息。註冊otto override ...

如何使用github上的android開源專案

其實跟簡單,就跟引用android v7工程那樣 然後 引用 最後,就像使用自定義的view那樣使用 下面是詳細的步驟 我就以pulltorefresh為例,從頭開始說吧。開啟eclipse,file import existing android code into workspace 選中lib...