溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試

發(fā)布時(shí)間:2020-06-15 15:00:42 來(lái)源:網(wǎng)絡(luò) 閱讀:9644 作者:老G 欄目:游戲開(kāi)發(fā)

一、四種調(diào)試方式


目前為止,cocos2d-x jsbinding的調(diào)試方法有四種:


1.在基于Native的手游開(kāi)發(fā)中,腳本語(yǔ)言一般都不支持在原生IDE中的調(diào)試,除非有專(zhuān)門(mén)的IDE或插件。所以打log是一種常見(jiàn)的調(diào)試方式。log調(diào)試的問(wèn)題就是,錯(cuò)誤定位需要很多遍才行,也不能修改內(nèi)存數(shù)據(jù)。


2.使用cocos2d-html5版本,在瀏覽器里面進(jìn)行調(diào)試,調(diào)試完成后把代碼移回到cocos2d-x項(xiàng)目中。-html5版本和-x版本在A(yíng)PI接口上已經(jīng)保持高度的一致性了。但是這么做要求配置和維護(hù)兩套開(kāi)發(fā)環(huán)境,很繁瑣。對(duì)于單機(jī)游戲等小規(guī)模項(xiàng)目,因?yàn)樾枨蠛?jiǎn)單,完全沒(méi)有問(wèn)題。但對(duì)于大中型網(wǎng)游,很多時(shí)候都要在-x中自己編寫(xiě)擴(kuò)展代碼,那么在-html5也必須編寫(xiě)同樣的代碼,游戲才能運(yùn)行,這樣就比較麻煩了。所以,這注定只是一個(gè)過(guò)渡方案。


3.使用Google v8提供的Eclipse插件,可以用來(lái)調(diào)試JS腳本。社區(qū)一直在做這方面的努力,未來(lái)幾個(gè)月應(yīng)該就會(huì)有正式版本放出。這應(yīng)該是最好的一種方案。


4.使用FireFox瀏覽器進(jìn)行遠(yuǎn)程調(diào)試,這是本文要探討的內(nèi)容。


二、啟動(dòng)模擬器


FireFox自帶的Web developer中就有Debugger。支持兩種方式,一種是調(diào)試網(wǎng)頁(yè),一種是鏈接到運(yùn)行FireFox OS的裝置上,進(jìn)行Remote debugger(遠(yuǎn)程調(diào)試)。我們就是使用Remote debugger來(lái)進(jìn)行Cocos2d-x jsbinding的調(diào)試。


需要準(zhǔn)備的開(kāi)發(fā)環(huán)境:

最新版本的引擎cocos2d-x 3.0beta2。最新版本的FireFox v27 for mac。注意FireFox最好現(xiàn)在英文版,不要去中文官網(wǎng)上找那個(gè)一大堆插件的版本。


首先,我們要啟動(dòng)游戲。使用cocos2d-x 3.0beta2的自帶的腳本,新建一個(gè)JavaScript項(xiàng)目。但注意,現(xiàn)在的項(xiàng)目模板中,沒(méi)有啟動(dòng)調(diào)試支持的代碼(但是官方例子中TestJavaScript里面就添加了支持,蛋疼?。?,需要我們手動(dòng)加上。在項(xiàng)目中,找到AppDelegate.cpp,改寫(xiě)AppDelegate::applicationDidFinishLaunching()函數(shù),在sc->start()后面加入sc->enableDebugger()的調(diào)用。改完后的函數(shù)如下。


bool AppDelegate::applicationDidFinishLaunching()
{
    // initialize director
    Director *director = Director::getInstance();
    director->setOpenGLView(EGLView::getInstance());
                                                                                                                                                                                                                                                                           
    // turn on display FPS
    director->setDisplayStats(true);
                                                                                                                                                                                                                                                                           
    // set FPS. the default value is 1.0/60 if you don't call this
    director->setAnimationInterval(1.0 / 60);
                                                                                                                                                                                                                                                                           
    ScriptingCore* sc = ScriptingCore::getInstance();
    sc->addRegisterCallback(register_all_cocos2dx);
    sc->addRegisterCallback(register_all_cocos2dx_extension);
    sc->addRegisterCallback(register_cocos2dx_js_extensions);
    sc->addRegisterCallback(register_all_cocos2dx_extension_manual);
    sc->addRegisterCallback(jsb_register_chipmunk);
    sc->addRegisterCallback(JSB_register_opengl);
    sc->addRegisterCallback(jsb_register_system);
    sc->start();
                                                                                                                                                                                                                                                                           
#if defined(COCOS2D_DEBUG) && (COCOS2D_DEBUG > 0)
    sc->enableDebugger();
#endif
                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                           
    ScriptEngineProtocol *engine = ScriptingCore::getInstance();
    ScriptEngineManager::getInstance()->setScriptEngine(engine);
    ScriptingCore::getInstance()->runScript("cocos2d-jsb.js");
                                                                                                                                                                                                                                                                              
    return true;
}


然后啟動(dòng)iOS模擬器。

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試


三、鏈接調(diào)試器和模擬器


在FireFox中,連接功能的菜單項(xiàng)缺省是被隱藏的,我們需要改一下瀏覽器配置。


如下操作

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試

這樣菜單項(xiàng)就顯示出來(lái)了,然后。

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試


然后,我們把調(diào)試器和設(shè)備連接起來(lái):

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試

彈出一個(gè)新窗口,表示連接成功:

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試


四、開(kāi)始調(diào)試


點(diǎn)擊窗口最上面的Debugger按鈕,進(jìn)入調(diào)試界面。這界面的功能大家應(yīng)該都很熟悉了。我們?cè)诎粹o的回調(diào)函數(shù)里做個(gè)斷點(diǎn)試試。

【cocos2d-x從c++到j(luò)s】17:使用FireFox進(jìn)行JS遠(yuǎn)程調(diào)試


好的,命中了。



這種調(diào)試方式是基于瀏覽器自帶的工具,那么也應(yīng)該是跨平臺(tái)的,這種方式在win32和linux下,應(yīng)該是都可用的。



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI