• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

            路漫漫,長修遠(yuǎn),我們不能沒有錢
            隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
            數(shù)據(jù)加載中……

            cocos 2d-x 從哪兒開始

            疑問1, 不支持官方模擬器調(diào)試. 需真機(jī)調(diào)試, 網(wǎng)上據(jù)說有辦法解決 未測試, 
            疑問2, 不支持genymontion這個(gè)geek模擬器

            1.下載google adt(已經(jīng)包含eclipse 以及adk, cdt),
            2.下載ndk, 配置ndk環(huán)境, eclipse中指明ndk路徑,
            3.下載cocos-2dx, eclipse中配置環(huán)境變量
            4. 導(dǎo)入范例工程 便于圍觀
            5. 自行新建工程, 打開終端,進(jìn)入cocos2d-x目錄下的tools/project-creator,執(zhí)行命令 ./create_project.py -project [項(xiàng)目名] -package [包名] -language [使用語言cpp或java等]
                然后就能在cocos2d-x目錄下的projects中看到新生成的項(xiàng)目了。(cocos2dx 2.2以后不再使用模板安裝了, python安裝及環(huán)境自己腦補(bǔ)
               
            由于未安裝cygwin 所以新項(xiàng)目編譯會(huì)產(chǎn)生錯(cuò)誤(Error: Program "bash" is not found in PATH), 在eclipse的新建工程名稱上 右鍵->屬性--> c/c++ build 面板右側(cè) build command 欄改為 xxxxx\android-ndk-r9\ndk-build.cmd 



            現(xiàn)在開始分析cocos2dx源碼的驅(qū)動(dòng)流程, 以下是cocos2dx 2.2版本自動(dòng)生成的范例

            //程序的入口
            public class test extends Cocos2dxActivity{
                protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            }
                public Cocos2dxGLSurfaceView onCreateView() {
                Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
                // test should create stencil buffer
                glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
               
                return glSurfaceView;
                }
                static {
                    System.loadLibrary("cocos2dcpp");
                }     
            }

            從源碼看, 好像沒做什么工作.  只是載入了jni 庫, 肯定內(nèi)有乾坤, 從parent class繼續(xù)跟
            public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelperListener {
            @Override
            protected void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            sContext = this;
                        this.mHandler = new Cocos2dxHandler(this);
                this.init(); //此處調(diào)用內(nèi)部函數(shù)
            Cocos2dxHelper.init(this, this);
            }



            // ===========================================================
            public void init() {
                // FrameLayout
                    ViewGroup.LayoutParams framelayout_params =
                        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                                                   ViewGroup.LayoutParams.FILL_PARENT);
                    FrameLayout framelayout = new FrameLayout(this);
                    framelayout.setLayoutParams(framelayout_params);
                    // Cocos2dxEditText layout
                    ViewGroup.LayoutParams edittext_layout_params =
                        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                                                   ViewGroup.LayoutParams.WRAP_CONTENT);
                    Cocos2dxEditText edittext = new Cocos2dxEditText(this);
                    edittext.setLayoutParams(edittext_layout_params);
                    // ...add to FrameLayout
                    framelayout.addView(edittext);
                    // Cocos2dxGLSurfaceView
                    this.mGLSurfaceView = this.onCreateView();
                    // ...add to FrameLayout
                    framelayout.addView(this.mGLSurfaceView);
                    // Switch to supported OpenGL (ARGB888) mode on emulator
                    if (isAndroidEmulator())
                       this.mGLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);
                    this.mGLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());  //這里值得關(guān)注, 當(dāng)然是在看了當(dāng)前class 其他代碼沒什么頭緒的情況下, 用排除法得出的結(jié)論
                    this.mGLSurfaceView.setCocos2dxEditText(edittext);
                    // Set framelayout as the content view
            setContentView(framelayout);
            }

            從 Cocos2dxRenderer 繼續(xù)跟.
            public class Cocos2dxRenderer implements GLSurfaceView.Renderer {
            @Override
            public void onSurfaceCreated(final GL10 pGL10, final EGLConfig pEGLConfig) {
            Cocos2dxRenderer.nativeInit(this.mScreenWidth, this.mScreenHeight); //從名稱上看 這個(gè)似乎跟jni相關(guān)了
            this.mLastTickInNanoSeconds = System.nanoTime();
            }

            private static native void nativeInit(final int pWidth, final int pHeight); //果然是個(gè)native函數(shù). 

            這里應(yīng)該會(huì)直接到c庫了
            #include "AppDelegate.h"
            #include "cocos2d.h"
            #include "CCEventType.h"
            #include "platform/android/jni/JniHelper.h"
            #include <jni.h>
            #include <android/log.h>
            #define  LOG_TAG    "main"
            #define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
            using namespace cocos2d;
            extern "C"
            {
                
            jint JNI_OnLoad(JavaVM *vm, void *reserved)
            {
                JniHelper::setJavaVM(vm);
                return JNI_VERSION_1_4;
            }


            //此處就是java中找出來的jni函數(shù),  從程序最初的activity 驅(qū)動(dòng)到cocos2dx的引擎入口
            void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h) 
                if (!CCDirector::sharedDirector()->getOpenGLView())
                {
                    CCEGLView *view = CCEGLView::sharedOpenGLView();
                    view->setFrameSize(w, h);
                    AppDelegate *pAppDelegate = new AppDelegate(); // 這里的語法很奇怪, 靜態(tài)函數(shù)為什么不直接調(diào)用,  這么奇怪的語法是因?yàn)?nbsp;AppDelegate 對象需要調(diào)用parent class CCApplication的構(gòu)造器, 初始化一個(gè)靜態(tài)的CCApplication
            對象, 這樣CCApplication::sharedApplication()才不會(huì)獲得null指針, 最后附上CCApplication.cpp的部分有關(guān)聯(lián)的代碼
                    CCApplication::sharedApplication()->run();  //此處代表引擎的內(nèi)部循環(huán)正式開始了
                }
                else
                {
                    ccGLInvalidateStateCache();
                    CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
                    ccDrawInit();
                    CCTextureCache::reloadAllTextures();
                    CCNotificationCenter::sharedNotificationCenter()->postNotification(EVENT_COME_TO_FOREGROUND, NULL);
                    CCDirector::sharedDirector()->setGLDefaultValues(); 
                }
            }
            }


            platform/android/CCApplication.cpp
            // sharedApplication pointer
            CCApplication * CCApplication::sm_pSharedApplication = 0;
            CCApplication::CCApplication()
            {
                CCAssert(! sm_pSharedApplication, "");
                sm_pSharedApplication = this;
            }

            posted on 2013-11-03 12:26 Khan 閱讀(1625) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国内精品久久久久久不卡影院 | 久久久久99精品成人片| 久久精品无码一区二区日韩AV| 久久精品水蜜桃av综合天堂| 国产精品9999久久久久| 久久精品国产精品亚洲| 中文精品99久久国产| 久久精品国产亚洲av麻豆图片| 伊人久久大香线焦AV综合影院| 久久国产免费观看精品| 久久夜色精品国产亚洲| 香蕉久久一区二区不卡无毒影院| 亚洲色欲久久久久综合网| 精品无码久久久久久尤物| 久久综合亚洲色HEZYO国产| 久久噜噜电影你懂的| 久久精品国产亚洲AV无码偷窥 | 一本色道久久99一综合| 国产成人精品久久亚洲高清不卡 | 亚洲国产精品综合久久一线| 亚洲国产精品无码久久98| 欧美成人免费观看久久| 久久精品二区| 麻豆精品久久精品色综合| 久久久久人妻一区精品性色av| 久久久久人妻一区精品| 久久综合久久综合九色| 久久婷婷五月综合色高清| 99久久久国产精品免费无卡顿| 色青青草原桃花久久综合| 久久精品免费网站网| 久久久精品一区二区三区| 亚洲精品美女久久777777| 日日狠狠久久偷偷色综合免费| 久久天天躁狠狠躁夜夜2020老熟妇 | 久久久噜噜噜www成人网| 老男人久久青草av高清| 亚洲精品99久久久久中文字幕| 国产精品欧美久久久久无广告| 91精品国产高清久久久久久国产嫩草| 久久午夜无码鲁丝片|