快速入门cocos2d-x jsbinding
如果你是一個cocos2d-x的老手那你可以忽略這篇博文如果你是一個接觸過javascript想通過HTML5做游戲的但是苦于不知道如何下手那么這篇博文可能會幫到你。
? ? cocos2dx-jsb的主要運用的語言是javascript其實簡單的說jsb就是cocos2d-x提供的C++ -> javascript的一系列接口通過編寫js的腳本來調(diào)動C++的接口做一系列的動作。實際的運行順序是:js執(zhí)行接口->spidermonkey解析js判斷調(diào)用了哪個C++接口->執(zhí)行2dx的相應(yīng)的接口->opengl 渲染... ?知道了這個順序以后關(guān)鍵是怎么來寫js呢那下面來認識下cocos2d-html5
Cocos2D-HTML5是基于HTML5規(guī)范集的Cocos2D引擎的分支于2012年5月發(fā)布,到現(xiàn)在差不多有1年多了功能API已經(jīng)趨向于穩(wěn)定基本上每個月都有大的版本迭代更新現(xiàn)在同時支持canvas和webgl渲染有些功能比如批渲染這個canvas是不能做的如果瀏覽器支持webgl就可以運行。cocos2d-html5的API是向下兼容jsb的也就是說有些api在jsb里面是執(zhí)行不了的但是90%以上的canvasAPI都是一致的這一塊的話jsb開發(fā)者和cocos2d-h5開發(fā)者兩邊都在不斷的同步。絕大部分常用的API都是足夠使用的等熟悉了這兩個框架以后就可以做到用cocos2d-h5在瀏覽器中調(diào)試一遍然后在用jsb在手機上運行是一樣的效果也就是我們所說的一套代碼跨平臺運行。但是要達到這樣一個效果需要了解這兩個框架了解的越深入碰到問題處理起來越是游刃有余。
? ? coding的最好的學習就是實踐jsb入門可以先從cocos2d-h5入門做起首先需要配置一下web開發(fā)環(huán)境這個比手機開發(fā)環(huán)境搭建簡單多了你需要一個web服務(wù)器apache或者tomcat都可以個人推薦apache,一個chrome最新的瀏覽器(當然firefox也可以chrome調(diào)試性能最好),然后從cocos2d-x官網(wǎng)(http://www.cocos2d-x.org/)中下載最新的cocos2d-h5壓縮包解壓以后放到apache或者tomcat對應(yīng)的資源目錄下面然后輸入URL指向到cocos2d-h5包里面對應(yīng)的index.html,如果沒有什么問題的話就可以看到cocos2d-h5的頁面了到此你已經(jīng)完成了h5環(huán)境的搭建如果你對此還有疑問可以看官方的詳細H5入門上手說明 http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Getting_Started_with_Cocos2d-html5。
? ? 如果你完成了上述HelloWorld的創(chuàng)建后那就可以試著創(chuàng)建jsb的環(huán)境了mac版的ios環(huán)境和android環(huán)境都非常容易平時開發(fā)可以用chrome瀏覽器跑通功能->ios模擬器驗證原生環(huán)境->做完一個模塊用iphone真機測試性能效率這里重點說一下window環(huán)境jsb的環(huán)境其實就是cocos2dx的環(huán)境官方有一篇win7下如何配置android環(huán)境的wiki http://www.cocos2d-x.org/projects/cocos2d-x/wiki/How_to_set_up_the_android_cocos2d-x_development_environment_on_Windows_7
? ?基本上把會遇到的問題都詳細描述清楚了除此之外官方wiki還有個問題沒有寫到某些win7系統(tǒng)編譯工程的時候會發(fā)現(xiàn)無法把資源目錄拷貝到assets目錄下面原因是cygwin的權(quán)限不夠需要把cygwin的權(quán)限設(shè)為root權(quán)限然后重啟電腦應(yīng)該就可以了修改cygwin Root方法請自行百度。
? ?完成windows下面android配置后我們用創(chuàng)建工程工具腳本創(chuàng)建一個跨平臺的工程。在cygwin中執(zhí)行腳本
cd /cocos2d-x/tools/project-createor/
#其中Clams是project名,com.supersell.crash是安卓中主Activity所在的package名這兩個名字都可以根據(jù)項目來改,language對應(yīng)的是變成語言jsb項目就是javascriptpython create_project.py -project Clams -package com.supersell.crash -language javascript
創(chuàng)建完工程以后會在cocos2d-x/projects 下面生成Clams目錄打開目錄結(jié)構(gòu)如下
? ? Classes目錄存放了AppDelegate.cpp和AppDelegate.h文件這兩個文件這兩個文件是項目的C++入口jsb接口的引入加載入口js都是在這里具體請看
#include "cocos2d.h"
#include "SimpleAudioEngine.h"
#include "ScriptingCore.h"
#include "generated/jsb_cocos2dx_auto.hpp"
#include "generated/jsb_cocos2dx_extension_auto.hpp"
#include "jsb_cocos2dx_extension_manual.h"
#include "cocos2d_specifics.hpp"
#include "js_bindings_chipmunk_registration.h"
#include "js_bindings_system_registration.h"
#include "js_bindings_ccbreader.h"
#include "jsb_opengl_registration.h"
#include "XMLHTTPRequest.h"
#include "jsb_websocket.h"
USING_NS_CC;
using namespace CocosDenshion;
AppDelegate::AppDelegate()
{
}
AppDelegate::~AppDelegate()
{
? ?CCScriptEngineManager::purgeSharedManager();
}
bool AppDelegate::applicationDidFinishLaunching()
{
// 從這里開始實例化導(dǎo)演類
? ?// initialize director
? ?CCDirector *pDirector = CCDirector::sharedDirector();
? ?pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
? ?// turn on display FPS
? ?pDirector->setDisplayStats(true);
? ?// set FPS. the default value is 1.0/60 if you don't call this
? ?pDirector->setAnimationInterval(1.0 / 60);
// 實例化腳本核心類這個類封裝了spidermonkey的一些接口基本上所有的js腳本處理都由這個類來執(zhí)行
? ?ScriptingCore* sc = ScriptingCore::getInstance();
? ?// 從這里開始注冊腳本綁定如果以后自己寫了新的綁定也需要在這里執(zhí)行注冊
? ?sc->addRegisterCallback(register_all_cocos2dx);
? ?sc->addRegisterCallback(register_all_cocos2dx_extension);
? ?sc->addRegisterCallback(register_all_cocos2dx_extension_manual);
? ?sc->addRegisterCallback(register_cocos2dx_js_extensions);
? ?sc->addRegisterCallback(register_CCBuilderReader);
? ?sc->addRegisterCallback(jsb_register_chipmunk);
? ?sc->addRegisterCallback(jsb_register_system);
? ?sc->addRegisterCallback(JSB_register_opengl);
? ?sc->addRegisterCallback(MinXmlHttpRequest::_js_register);
? ?sc->addRegisterCallback(register_jsb_websocket);
? ?sc->start();
? ?CCScriptEngineProtocol *pEngine = ScriptingCore::getInstance();
? ?CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
? ?// main.js就是js的入口文件存放在Resources下面換新的js需要注意路徑
? ?ScriptingCore::getInstance()->runScript("main.js");
? ?return true;
}
void handle_signal(int signal) {
? ?static int internal_state = 0;
? ?ScriptingCore* sc = ScriptingCore::getInstance();
? ?// should start everything back
? ?CCDirector* director = CCDirector::sharedDirector();
? ?if (director->getRunningScene()) {
? ? ? ?director->popToRootScene();
? ?} else {
? ? ? ?CCPoolManager::sharedPoolManager()->finalize();
? ? ? ?if (internal_state == 0) {
? ? ? ? ? ?//sc->dumpRoot(NULL, 0, NULL);
? ? ? ? ? ?sc->start();
? ? ? ? ? ?internal_state = 1;
? ? ? ?} else {
? ? ? ? ? ?sc->runScript("hello.js");
? ? ? ? ? ?internal_state = 0;
? ? ? ?}
? ?}
}
// This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground()
{
? ?CCDirector::sharedDirector()->stopAnimation();
? ?SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
? ?SimpleAudioEngine::sharedEngine()->pauseAllEffects();
}
// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground()
{
? ?CCDirector::sharedDirector()->startAnimation();
? ?SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
? ?SimpleAudioEngine::sharedEngine()->resumeAllEffects();
}
如果沒有自己新寫的js腳本綁定這個類最多只需要修改入口js就行
pro.android:安卓項目工程我們來看下他里面的結(jié)構(gòu)
幾個重要的文件說明下,
AndroidManifest.xml:用來記錄安卓安裝權(quán)限app橫屏豎屏等的一些配置
assets:資源目錄,編譯項目的時候會自動將Rescourse目錄下的資源(圖片,js)和框架js都拷貝到這個目錄下每次編譯都是直接覆蓋的所以如果你需要把一部分圖片打包到apk里面你只要把相應(yīng)的資源存放到Rescourse目錄。
bin:編譯好的java文件會存放到這里,跑過build_native.sh才有
jni:這個目錄下面存放了一個重要的文件Android.mk這個是項目的入口mk文件ndk的項目編譯從這里開始找大部分情況你不需要動他以后有自己新寫的C++擴展你需要在這個mk文件中聲明。
libs:存放了編譯好的cocos2d-x動態(tài)庫(.so),跑過build_native.sh才有。
build_native.sh:一鍵編譯腳本編譯項目的時候你需要先執(zhí)行他也可以在eclipse中直接右鍵項目run其實也是通過腳本運行的運行的前提需要配置好cocos2dx的安卓環(huán)境。
===========================
proj.ios:ios項目環(huán)境直接雙擊.xcodeproj就能跑了當然需要改入口文件的話還是參照上面的改法。
Resources:編寫的腳本還有打包進去的圖片都存放在這里。
如果順利的話編譯完工程后連上手機調(diào)試你就可以直接看到helloWorld了
轉(zhuǎn)載于:https://blog.51cto.com/8200260/1333534
總結(jié)
以上是生活随笔為你收集整理的快速入门cocos2d-x jsbinding的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: phpunit 单元测试案例--签到任务
- 下一篇: c++string 输入换行符