Cocos2dx-demo演示项目:Part1
這個項目,我主要是用來積累、記錄自己在利用cocos2dx引擎進行項目開發、學習實踐中的開發經驗。每天的開發任務、查看別人分享的內容,總是能夠收獲到可取的東西,將這些可取的東西自己再著手開發一次,能夠進一步深刻理解這些,同時今后如果碰到類似的開發需求,我也可以很快的遷移到開發項目中去。所以我將自己日常生活中積累的知識點通過一個演示項目,展示出來。因為沒有蘋果設備,不具備條件所以我只做安卓這塊的開發(相關組件的添加是需要安卓、ios分開添加的)。
?
Part1:友盟社交分享
添加這個組件的原因:
游戲開發中,如果添加了社交分享元素,那么游戲的互動性將會大大的提升,對于提升游戲留存的能提供很大的幫助。各個社交網站都提供了分享的api接口,如果單獨為每個社交分享去寫支持接口,那么任務量會挺大的。有需求就會有市場,友盟就提供了社交分享的組件,將大多數社交網站的分享功能都組合都一起了。既然友盟都封裝好了,所以我就使用這個組件咯。
我的筆記是在開發過程中記錄下來的,發表到博客是對自己在evernote上記下的東西進行整理。博客也不一定是按照demo項目的各個部分的開發日期順序來寫的。
官方對如何添加組件有詳細的文檔,我所記錄的是在我添加組件的過程中遇到的一些問題。
1、添加官方提供的代碼文件:
因為要跨平臺,所以C++ 2 Java、C++ 2 Object-C是必須的,但是直接將java調用的方法、object-c調用的方法放到工程中去,不做調整的話肯定是有問題的。因此官方就有這樣的解決方案:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)#endif采用預編譯宏來解決跨平臺編譯的問題,這也就是引擎做跨平臺支持采用的方案。那么問題來了,友盟這里就有點問題,不過也不怪他,代碼中都說了:
人家是機器生成的代碼,難免有問題。問題是什么?
主要是安卓這塊,即-Android文件夾內部的問題。他沒有采用 #if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 這個來判斷!!!所以無論是用VS、還是用XCODE,都會報錯,因為找不到<jni.h>文件,導致編譯不了!(其實我很早之前就有做過添加友盟組件的工作,當時也遇到了這個問題,但是限于當時的能力沒有發現原來是這個原因引發的問題)。
所以解決方案就是使用:#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 這個,將這個文件夾內的類代碼處理,vs上不編譯。這個類里面其實都是些Java調用C++、C++調用Java的方法,所以直接在win32上是不能通過編譯的。
2、分享處理及相關:
在做自定義按鈕分享的時候,在按鈕的回調函數中:
這樣就可以打開友盟的分享面板了。需要注意的是,分享的回調函數需要是一個全局函數的!即代碼中的shareTest是一個全局函數,我覺得這一點在看了實際代碼后會更能理解.
3、關于友盟的截圖分享功能:
一個很大的坑:使用/data/data/com.../files/目錄下的圖片,um的java方法響應不了,因為其代碼中沒有針對這個做判斷!!一直認為圖片是空的。。。。坑了我一個下午。
具體來看:(友盟組件2.0,cocos2dx v3.2)
定位到友盟sdk包里面的文件:Platforms\Android\controller\com\umeng\social\CCUMSocialController.java這個文件。里面提供的一個方法:parseShareImage(String imgName),這函數功能是根據圖片存放路徑,創建UMImage對象。實現方式是根據imgName這個參數(參數以什么開頭,如”assets/”),判斷圖片的存儲路徑(如assets文件夾、網絡圖片、res資源圖片,都不是的話就是sd卡目錄),只有這幾個判斷。但是問題來了,游戲中截圖后默認圖片存放路徑是在data/data/com.xxx.xxx/files目錄下,所以友盟提供的那個函數找不到這個路徑!!!我對安卓不熟啊,所以我折騰了一個下午就是沒有得出個所以然,然后又不會使用eclipse進行debug斷點調試,只能是通過打印log來查找,花費了很長的時間才找出問題所在。不過我還是學到了東西:要善于通過log進行問題查找!
解決方案便是修改這個函數,追加一個判斷:
1 else if(imgName.startsWith("/data")){ 2 3 if(!TextUtils.isEmpty(imgName)){ 4 5 File imgFile = new File(imgName); 6 7 shareImage = new UMImage(mActivity, imgFile); 8 9 } 10 }4、微信分享:
需要使用微信分享的話,那么游戲的安卓包必須是簽名包(怎么簽名網上有很多文檔),否則啟動不了微信的分享activity。這個問題好像(或者是我沒有注意到)友盟官方沒有提到,所以當時我在添加微信分享的時候,一直打不開微信分享的UI界面,也是折騰了挺久的。
轉載于:https://www.cnblogs.com/zhong-dev/p/4216869.html
總結
以上是生活随笔為你收集整理的Cocos2dx-demo演示项目:Part1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 14. Longest
- 下一篇: Python下ImportError: