快速入门cocos2d-x jsbinding
如果你是一个cocos2d-x的老手那你可以忽略这篇博文如果你是一个接触过javascript想通过HTML5做游戏的但是苦于不知道如何下手那么这篇博文可能会帮到你。
cocos2dx-jsb的主要运用的语言是javascript其实简单的说jsb就是cocos2d-x提供的C++ -> javascript的一系列接口通过编写js的脚本来调动C++的接口做一系列的动作。实际的运行顺序是:js执行接口->spidermonkey解析js判断调用了哪个C++接口->执行2dx的相应的接口->opengl 渲染... 知道了这个顺序以后关键是怎么来写js呢那下面来认识下cocos2d-html5
Cocos2D-HTML5是基于HTML5规范集的Cocos2D引擎的分支于2012年5月发布,到现在差不多有1年多了功能API已经趋向于稳定基本上每个月都有大的版本迭代更新现在同时支持canvas和webgl渲染有些功能比如批渲染这个canvas是不能做的如果浏览器支持webgl就可以运行。cocos2d-html5的API是向下兼容jsb的也就是说有些api在jsb里面是执行不了的但是90%以上的canvasAPI都是一致的这一块的话jsb开发者和cocos2d-h5开发者两边都在不断的同步。绝大部分常用的API都是足够使用的等熟悉了这两个框架以后就可以做到用cocos2d-h5在浏览器中调试一遍然后在用jsb在手机上运行是一样的效果也就是我们所说的一套代码跨平台运行。但是要达到这样一个效果需要了解这两个框架了解的越深入碰到问题处理起来越是游刃有余。
coding的最好的学习就是实践jsb入门可以先从cocos2d-h5入门做起首先需要配置一下web开发环境这个比手机开发环境搭建简单多了你需要一个web服务器apache或者tomcat都可以个人推荐apache,一个chrome最新的浏览器(当然firefox也可以chrome调试性能最好),然后从cocos2d-x官网(http://www.cocos2d-x.org/)中下载最新的cocos2d-h5压缩包解压以后放到apache或者tomcat对应的资源目录下面然后输入URL指向到cocos2d-h5包里面对应的index.html,如果没有什么问题的话就可以看到cocos2d-h5的页面了到此你已经完成了h5环境的搭建如果你对此还有疑问可以看官方的详细H5入门上手说明 http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Getting_Started_with_Cocos2d-html5。
如果你完成了上述HelloWorld的创建后那就可以试着创建jsb的环境了mac版的ios环境和android环境都非常容易平时开发可以用chrome浏览器跑通功能->ios模拟器验证原生环境->做完一个模块用iphone真机测试性能效率这里重点说一下window环境jsb的环境其实就是cocos2dx的环境官方有一篇win7下如何配置android环境的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系统编译工程的时候会发现无法把资源目录拷贝到assets目录下面原因是cygwin的权限不够需要把cygwin的权限设为root权限然后重启电脑应该就可以了修改cygwin Root方法请自行百度。
完成windows下面android配置后我们用创建工程工具脚本创建一个跨平台的工程。在cygwin中执行脚本
cd /cocos2d-x/tools/project-createor/ #其中Clams是project名,com.supersell.crash是安卓中主Activity所在的package名这两个名字都可以根据项目来改,language对应的是变成语言jsb项目就是javascript
python create_project.py -project Clams -package com.supersell.crash -language javascript
创建完工程以后会在cocos2d-x/projects 下面生成Clams目录打开目录结构如下
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()
{
// 从这里开始实例化导演类
// 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脚本处理都由这个类来执行
ScriptingCore* sc = ScriptingCore::getInstance();
// 从这里开始注册脚本绑定如果以后自己写了新的绑定也需要在这里执行注册
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:安卓项目工程我们来看下他里面的结构
几个重要的文件说明下,
AndroidManifest.xml:用来记录安卓安装权限app横屏竖屏等的一些配置
assets:资源目录,编译项目的时候会自动将Rescourse目录下的资源(图片,js)和框架js都拷贝到这个目录下每次编译都是直接覆盖的所以如果你需要把一部分图片打包到apk里面你只要把相应的资源存放到Rescourse目录。
bin:编译好的java文件会存放到这里,跑过build_native.sh才有
jni:这个目录下面存放了一个重要的文件Android.mk这个是项目的入口mk文件ndk的项目编译从这里开始找大部分情况你不需要动他以后有自己新写的C++扩展你需要在这个mk文件中声明。
libs:存放了编译好的cocos2d-x动态库(.so),跑过build_native.sh才有。
build_native.sh:一键编译脚本编译项目的时候你需要先执行他也可以在eclipse中直接右键项目run其实也是通过脚本运行的运行的前提需要配置好cocos2dx的安卓环境。
===========================
proj.ios:ios项目环境直接双击.xcodeproj就能跑了当然需要改入口文件的话还是参照上面的改法。
Resources:编写的脚本还有打包进去的图片都存放在这里。
如果顺利的话编译完工程后连上手机调试你就可以直接看到helloWorld了
转载于:https://blog.51cto.com/8200260/1333534
快速入门cocos2d-x jsbinding相关推荐
- Shiro第一个程序:官方快速入门程序Qucickstart详解教程
目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...
- 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧
异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...
- Spring Boot 2 快速教程:WebFlux 快速入门(二)
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...
- Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)
2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...
- 《iOS9开发快速入门》——导读
本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...
- python scrapy菜鸟教程_scrapy学习笔记(一)快速入门
安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...
- OpenStack快速入门
OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...
- Expression Blend实例中文教程(2) - 界面快速入门
上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...
- 图文并茂!60页PPT《快速入门python数据分析路线》(附链接)
一个月不走弯路快速入门学python和python数据分析路线,呕心沥血加班加点做了2天,一共63页,该课件讲的都是路线中的核心知识,今天把该PPT分享给大家,能根据该课件提到的知识有针对性的学,做到 ...
最新文章
- Google CEO Sundar Pichai :“谷歌最大的威胁就是自身的成功”
- 卫星导航 | 整秒转时分秒(时间转换)
- 用RecyclerView打造一个轮播图
- matlab去掉空的元组,python – 删除pandas中包含空元组列表的行
- Spring Security OAuth2 授权失败(401)
- python hash表_python数据结构与算法——哈希表
- 【Cesium】Cesium三维模型调整
- Xcode8 - apploader 上传失败 - ERROR ITMS-90168: The binary you uploaded was invalid.
- 如何解决存在的1px问题?
- 电子绘本pdf_【孩子必看的】20本世界著名英文绘本 | PDF电子版+MP3音频
- R语言ggplot2可视化时间序列柱形图:通过双色渐变配色颜色主题可视化时间序列柱形图
- FeedDemon获共享软件年度大奖
- ERA5气象数据 :数据中相对湿度、边界层高度、温度、风向、地面气压等参数下载详细教程
- 微信发红包测试用例——脑图
- WimTool(Wim映像处理工具) V1.30.2011.501 免费绿色版
- Exception evaluating SpringEL expression: ***错误的一个解决办法
- HTML在线颜色选择器源码
- 自发光材质、panner、sin——移动的光栅
- python-turtle(海龟绘图)圣诞树
- Python《机器学习实战》读书笔记(三)——决策树
热门文章
- js调试console.log使用总结图解
- html and js 的隔行换背景色表格实例详解
- C#—使用InstallerProjects打包桌面应用程序
- Codeforces 1012A Photo of The Sky
- ExpressionFuncT,TResult和FuncT,TResult
- C#拾遗系列(8):异常
- struts2前台获取setattribute为空指针异常_告诉你,这样设计 Java 异常更优雅,更牛逼!...
- C语言编程课后训练,C语言编程课后训练20道题.doc
- 苹果ipa签名工具免越狱下载_苹果iphone免越狱使用iTunes 一键下载旧版本app
- 以太网口差分电平_以太网接口学习笔记