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

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 閱讀(1637) 評論(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>
            经典三级久久| 日韩天堂av| 欧美中文字幕视频在线观看| 亚洲欧美国产77777| 好看的日韩av电影| 亚洲免费影视| 亚洲尤物在线| 欧美综合国产| 亚洲视频在线观看| 国产一区在线免费观看| 久久国产视频网站| 欧美在线观看视频一区二区三区| 性色av一区二区三区| 久久精品国产成人| 性亚洲最疯狂xxxx高清| 亚洲女女做受ⅹxx高潮| 欧美一区激情| 欧美不卡视频一区| 日韩亚洲欧美一区| 久久国内精品视频| 欧美色视频日本高清在线观看| 国产精品综合视频| 亚洲精品欧美精品| 欧美亚洲日本国产| 欧美激情一区二区三区成人 | 亚洲一区在线看| 久久高清国产| 亚洲精品乱码视频| 亚洲欧美不卡| 欧美韩国日本一区| 狠狠色伊人亚洲综合成人| 日韩视频国产视频| 欧美在线免费观看亚洲| 欧美高清视频一区| 午夜精品福利视频| 欧美韩国日本一区| 国产综合久久| 一区二区免费在线播放| 久色成人在线| 午夜精品成人在线| 国产精品国产三级国产| 亚洲欧洲综合| 久久免费一区| 亚洲欧美国产制服动漫| 欧美日韩国产另类不卡| 黑人操亚洲美女惩罚| 性色av一区二区怡红| 日韩一级黄色av| 欧美v国产在线一区二区三区| 国产精品自拍一区| 亚洲男同1069视频| 日韩视频国产视频| 欧美精品久久久久久久久老牛影院| 黄色欧美日韩| 久久久久网站| 久久不射中文字幕| 国产日韩欧美在线观看| 午夜久久久久久| 一区二区欧美国产| 久热这里只精品99re8久| 欧美一级大片在线观看| 亚洲美女91| 欧美精品色网| 亚洲最黄网站| a91a精品视频在线观看| 欧美日韩午夜精品| 亚洲日本国产| 欧美国产精品人人做人人爱| 久久久精品日韩| 亚洲国产高清在线观看视频| 欧美成人一区二区三区片免费| 欧美高清成人| 亚洲福利视频一区| 欧美大片在线观看一区| 亚洲欧洲三级电影| 亚洲精品黄网在线观看| 欧美日韩中文字幕日韩欧美| 亚洲欧美成人网| 午夜亚洲影视| 亚洲国产成人精品久久久国产成人一区 | 国产麻豆精品theporn| 亚洲无线观看| 亚洲小说春色综合另类电影| 国产乱理伦片在线观看夜一区| 久久久久久亚洲精品杨幂换脸 | 久久久久久有精品国产| aa级大片欧美| 亚洲网站在线看| 国产精品私拍pans大尺度在线| 久久精品成人一区二区三区蜜臀| 久久九九热re6这里有精品| 亚洲国产欧美在线| 制服丝袜亚洲播放| 精品成人乱色一区二区| 亚洲人成网站精品片在线观看| 国产精品v欧美精品v日本精品动漫| 欧美一区二区在线免费观看 | 久久精品99| 日韩亚洲欧美精品| 亚洲欧美激情在线视频| 亚洲成色最大综合在线| 9人人澡人人爽人人精品| 国产日韩欧美在线| 亚洲三级电影在线观看 | 一区二区三区欧美在线| 亚洲欧美成人在线| 亚洲人成在线免费观看| 亚洲欧美在线aaa| 日韩一二三区视频| 久久久久久久高潮| 性感少妇一区| 欧美精品在线网站| 免费短视频成人日韩| 国产精品成人一区二区三区吃奶| 久久久久9999亚洲精品| 一区二区三区日韩| 亚洲综合色网站| 亚洲精品在线电影| 久久国产精品第一页| 亚洲图片欧美一区| 蜜桃精品久久久久久久免费影院| 亚洲欧美日韩中文在线制服| 免费观看在线综合| 久久久久久久欧美精品| 国产精品高潮呻吟视频| 日韩午夜精品| 夜夜精品视频| 欧美激情一区二区三区| 欧美高清视频在线| 永久久久久久| 久久久久久网站| 久久久综合免费视频| 国产欧美日韩伦理| 午夜精品免费在线| 欧美影院在线| 国产欧美日韩三级| 欧美一区二区在线视频| 久久国产精品久久久久久| 国产精品www994| 在线亚洲一区观看| 亚洲欧美日韩国产另类专区| 国产精品久久久久国产精品日日 | 久久精品国产免费观看| 国产色爱av资源综合区| 午夜视频在线观看一区二区| 久久se精品一区精品二区| 国产精品午夜在线| 欧美亚洲免费高清在线观看| 欧美在线观看www| 国产一区二区三区网站| 久久aⅴ乱码一区二区三区| 老司机一区二区三区| 亚洲第一在线| 欧美剧在线免费观看网站| 亚洲理论在线观看| 亚洲男女毛片无遮挡| 国产午夜精品理论片a级大结局| 久久精品国产久精国产一老狼| 欧美暴力喷水在线| aa级大片欧美| 国产欧美视频在线观看| 久久久午夜电影| 亚洲欧洲一区二区在线播放| 一区二区三区国产精华| 国产日韩精品一区二区三区在线| 久久久久国产精品一区| 亚洲精品日韩精品| 欧美专区在线播放| 亚洲激情网站| 国产精品美女久久久浪潮软件| 久久黄色影院| 亚洲区免费影片| 欧美一区视频| 最新精品在线| 国产精品每日更新在线播放网址| 久久精品99无色码中文字幕| 亚洲福利视频免费观看| 亚久久调教视频| 91久久久亚洲精品| 国产精品美女主播在线观看纯欲| 久久久最新网址| 亚洲视频观看| 欧美激情第一页xxx| 亚洲一区二区三区激情| 亚洲精品国产精品国自产观看浪潮| 亚洲午夜一区二区三区| 精品盗摄一区二区三区| 欧美日韩在线一区二区三区| 久久亚洲一区二区三区四区| 亚洲网站视频福利| 亚洲国产专区校园欧美| 久久久久免费视频| 亚洲欧美综合网| 99国产精品久久久久久久| 好看的亚洲午夜视频在线| 国产精品入口尤物| 国产精品白丝黑袜喷水久久久| 欧美88av| 美女视频黄免费的久久| 欧美在线在线|