青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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

路漫漫,長修遠,我們不能沒有錢
隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
數據加載中……

cocos 2d-x 從哪兒開始

疑問1, 不支持官方模擬器調試. 需真機調試, 網上據說有辦法解決 未測試, 
疑問2, 不支持genymontion這個geek模擬器

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



現在開始分析cocos2dx源碼的驅動流程, 以下是cocos2dx 2.2版本自動生成的范例

//程序的入口
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 庫, 肯定內有乾坤, 從parent class繼續跟
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(); //此處調用內部函數
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());  //這里值得關注, 當然是在看了當前class 其他代碼沒什么頭緒的情況下, 用排除法得出的結論
        this.mGLSurfaceView.setCocos2dxEditText(edittext);
        // Set framelayout as the content view
setContentView(framelayout);
}

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

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

這里應該會直接到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函數,  從程序最初的activity 驅動到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(); // 這里的語法很奇怪, 靜態函數為什么不直接調用,  這么奇怪的語法是因為 AppDelegate 對象需要調用parent class CCApplication的構造器, 初始化一個靜態的CCApplication
對象, 這樣CCApplication::sharedApplication()才不會獲得null指針, 最后附上CCApplication.cpp的部分有關聯的代碼
        CCApplication::sharedApplication()->run();  //此處代表引擎的內部循環正式開始了
    }
    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 閱讀(1639) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区黄色| 一本高清dvd不卡在线观看| 亚洲欧美国产精品桃花| 国产精品久在线观看| 亚洲欧美国产日韩天堂区| 一本一本久久a久久精品综合妖精| 欧美国产日韩一区二区三区| 亚洲精品综合| 亚洲伦理一区| 国产精品久久久久国产精品日日| 亚洲欧美三级伦理| 亚洲欧美日韩一区二区三区在线观看| 国产精品一区二区在线| 欧美在线视频观看| 久久这里有精品15一区二区三区| 亚洲国产精品成人一区二区| 亚洲欧洲在线看| 欧美日韩国产探花| 欧美一区综合| 久久婷婷蜜乳一本欲蜜臀| 亚洲美女av黄| 亚洲欧美日韩一区在线| 亚洲第一级黄色片| 日韩一级片网址| 韩国v欧美v日本v亚洲v| 亚洲国产另类久久精品| 国产精品试看| 欧美成人午夜视频| 国产精品久久久久77777| 久久一二三国产| 欧美网站在线观看| 蜜臀av国产精品久久久久| 欧美久久一级| 久色成人在线| 国产精品久久久久久久7电影| 久久亚洲影音av资源网| 欧美日韩成人网| 免费亚洲婷婷| 国产精品一区二区久久国产| 欧美激情片在线观看| 国产日韩欧美在线视频观看| 亚洲黄色av| 国产在线精品成人一区二区三区| 亚洲欧洲偷拍精品| 在线观看日韩av电影| 一本一本久久a久久精品牛牛影视| 国内精品久久久久久久影视蜜臀 | 国产精品香蕉在线观看| 欧美成人精品高清在线播放| 国产精品久在线观看| 亚洲精品国产精品国自产观看浪潮 | 欧美人与性动交a欧美精品| 欧美在线免费一级片| 欧美日韩午夜精品| 亚洲激情亚洲| 亚洲三级观看| 欧美成人精品在线观看| 免费成人毛片| 影音先锋久久久| 亚洲天堂av综合网| 亚洲一区二区免费视频| 欧美黑人一区二区三区| 欧美成人精品在线观看| 在线视频国内自拍亚洲视频| 欧美一区二区三区久久精品| 欧美在线www| 国产精品一国产精品k频道56| 亚洲美女在线观看| 亚洲少妇诱惑| 国产精品视频成人| 亚洲图片欧洲图片日韩av| 亚洲午夜久久久| 国产精品乱码人人做人人爱| 一区二区日本视频| 午夜国产精品影院在线观看| 欧美性做爰毛片| 在线视频精品一区| 欧美一区二区三区精品| 国产一区二区三区成人欧美日韩在线观看 | 欧美看片网站| 亚洲国内自拍| 亚洲一二三级电影| 国产老女人精品毛片久久| 亚洲资源在线观看| 欧美自拍丝袜亚洲| 尤物yw午夜国产精品视频明星 | 亚洲最新色图| 亚洲欧美中文在线视频| 国产精品最新自拍| 久久疯狂做爰流白浆xx| 美女网站在线免费欧美精品| 91久久精品久久国产性色也91| 另类图片国产| 日韩视频在线免费| 久久国产精品色婷婷| 亚洲国产另类 国产精品国产免费| 美女精品视频一区| 亚洲免费成人av| 久久国产加勒比精品无码| 在线观看亚洲精品| 欧美午夜一区二区福利视频| 久久国产精品亚洲77777| 亚洲高清激情| 久久超碰97中文字幕| 亚洲高清资源| 国产日韩精品入口| 欧美日产在线观看| 欧美影院一区| 日韩亚洲成人av在线| 久久九九热免费视频| 一本久久a久久精品亚洲| 国内精品久久久久久影视8| 欧美美女喷水视频| 久久精品国产成人| 一区二区三区日韩欧美| 免费久久久一本精品久久区| 午夜日韩激情| 99这里只有久久精品视频| 狠狠色丁香婷婷综合久久片| 国产精品hd| 欧美精选一区| 美女黄色成人网| 久久精品久久99精品久久| 亚洲少妇中出一区| 日韩小视频在线观看| 欧美搞黄网站| 快射av在线播放一区| 欧美在线视频免费| 亚洲欧美日韩一区| 亚洲视频在线二区| 亚洲精品欧美日韩| 亚洲国产一区二区精品专区| 国内成人精品一区| 国产婷婷精品| 国产亚洲免费的视频看| 国产精品美女久久久| 欧美体内谢she精2性欧美| 欧美激情久久久| 欧美成人激情在线| 免费日韩av电影| 免费亚洲电影在线观看| 久久麻豆一区二区| 久久黄色网页| 久久久噜噜噜久久中文字免| 欧美一区二区成人6969| 亚洲女ⅴideoshd黑人| 亚洲一区二区三区四区在线观看| 99精品免费网| 亚洲色图在线视频| 亚洲影院在线| 欧美一区二区三区久久精品| 欧美一级二级三级蜜桃| 欧美自拍偷拍| 老司机精品久久| 欧美成人国产| 欧美日韩在线三区| 国产精品久久波多野结衣| 国产精品美女久久久久久2018| 国产九区一区在线| 国产综合视频| 亚洲欧洲精品一区二区三区不卡 | 国产欧美91| 一区二区在线视频播放| 亚洲国产影院| 亚洲一区免费观看| 久久精品国产69国产精品亚洲| 久久精品99久久香蕉国产色戒| 久久激情久久| 欧美成人免费网| 一区二区国产日产| 欧美综合77777色婷婷| 麻豆精品视频在线| 欧美视频日韩| 影音先锋亚洲视频| 夜夜嗨av一区二区三区网站四季av| 亚洲免费婷婷| 免费看成人av| 一区二区三区欧美亚洲| 久久精品网址| 欧美日韩中文字幕在线| 国产欧美日韩精品在线| 亚洲人体偷拍| 久久爱另类一区二区小说| 亚洲激情欧美| 欧美一区亚洲二区| 欧美日本高清视频| 合欧美一区二区三区| 亚洲社区在线观看| 嫩草影视亚洲| 在线视频精品一| 欧美大片免费观看| 国内外成人免费激情在线视频| 99国产精品99久久久久久粉嫩| 欧美在线观看www| 亚洲精品国精品久久99热| 欧美一级艳片视频免费观看| 欧美连裤袜在线视频| 国产一区三区三区| 亚洲欧美国产制服动漫| 亚洲福利专区|