在cocos code ide的基础上构建自己的lua开发调试环境
对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容:
1、开发, 即代码编写, 主要是代码提示、补齐, 更高级一点的如变量名颜色等。
2、调试, 主要是运行状态下断点、查看变量、堆栈等。
现在无论是端游还是手游(基于cocos2d)的开发, 基本模式都是c++内核 + lua逻辑的路线。对于c++的开发和调试, vs已经能很好的满足开发者的需求, 微软这方面真是值得称颂。不幸的是, lua的开发和调试,还没有一个统一的,方便的开发调试环境,这也给广大的luaer和项目造成了极大的困扰。目前通常的做法大致有如下几种:
1、纯粹意义上的lua编辑器, 如Sublime Text 2 + 插件的模式(QuickXDev),解决了代码提示和补齐问题。
2、编辑器的基础上加入调试功能, 通常是直接在vs上开发一个相应插件(如 babe lua), 或者是一个独立的第三方程序(如decoda、lua studio)。
这些方案基本上都存在lua调试不方便, 没有一个统一的规则来定制自己的lua api的问题, 因此如何构建一个好的lua开发调试环境对于项目极为重要。
笔者因为对于代码提示、补齐、如何调试lua、插件开发的原理不懂, 并且也没有精力去研究这方面的内容, 想到了一个偷懒的办法, 也是考虑到目前cocos2d发展的良好趋势, 何不直接利用cocos2d环境下lua的开发方式来构造一套自己的lua开发和调试环境。
[cocos code ide调试原理]
在cocos2d环境下, 开发者通常会利用cocos code ide进行lua的代码编写和调试。cocos code ide是基于eclipse的(eclipse真是强大啊, 可以根据需要进行任意定制, 包括adobe的flash builder也是基于这套环境), 较好的解决了lua代码的编辑问题, 如提示、补齐等。如果要调试lua代码的话, 则需要指定一个可以称之为第三方exe的独立程序, 其实就是一个c++内核程序, 也就是lua的宿主程序, 用于解释执行lua代码。至于这个宿主程序, 你可以使用cocos2d预先提供的PrebuiltRuntimeLua.exe,也可以利用cocos2d提供的模板来构建自己独特的宿主程序。这个宿主程序是如何和cocos code ide进行交互呢(这里交互指的是可以在vs下调试宿主程序的c++代码, 在cocos code ide里调试lua), 笔者简单的跟踪了一下宿主程序的运行, 无论是本地调试还是远程调试, 大概原理和流程如下:
1、宿主程序启动, 显示等待窗口, 并开启socket监听(这个是不是很赞, 意味着可以远程调试)等待cocos code ide进行连接和指令。
2、cocos code ide启动, 连接socket, 发送指令到宿主程序。
3、宿主程序分析指令, 如果是sendrequest这条指令,则执行一个lua入口脚本(src\main.lua,可以在程序里定制), c++和lua的眉来眼去就正式开始鸟。
至于cocos code ide是如何在eclipse的基础上实现lua代码编辑相关和调试相关的功能, 笔者不懂, 也基本上不会花时间去研究。笔者要做的是在以上分析的原理基础上, 在cocos code ide的基础上定制自己的lua开发调试环境。
[基于cocos code ide的lua开发调试方案]
本方案的优势是建立在一个较好的基础上, 可以比较方便快速的实现。由于cocos2d发展的良好趋势和广泛的应用, 相信cocos2d开发小组, 会不断加强并完善cocos code ide的功能。因此,可以说是一个相对强大的团队在背后支持这套方案。
那么如何实现这个方案呢, 笔者认为主要有以下几个问题需要解决:
1、如何让cocos code ide认可定制的宿主程序。
2、如何定义自己的lua api让cocos code ide可以识别。
[定制宿主程序]
这个可以参考一个用cocos2d的模块创建的lua项目对应的runtime工程, 或者quick cocos中的player工程。
基本步骤可以参考如下过程:
1、用cocos code ide新建一个lua工程。要注意的是工程名要和所在的文件夹名一致, 否则cocos code ide不能调试。
[定义自己的lua api]
这个问题又可以细分为两个方面:
1、lua脚本中的api
这个cocos code ide本身已经支持, 只要是ide可以检索到的lua脚本, ide就可以识别出里面定义的api。[见参考资料转载2]
2、c++注册到lua中的api
这个可以参考cocos code ide是如何识别出lua库,cocos2d库,quick cocos库中的api。[见参考资料转载1]
[补充和愿景]
1、lua的调试原理。
2、vs插件的开发原理(如何直接在vs环境下实现lua开发调试)。
3、eclipse中如何实现某种语言的代码编辑功能和调试功能。
4、Lua Development Tools,LDT,一个基于eclipse的l开源的ua开发调试环境, 笔者强烈怀疑cocos code ide是以这个工具为基础改写的。
5、microsoft或许有一天会将lua视作c++指定的官方脚本, 直接在vs中集成lua的开发调试功能, 那可真是广大luaer的福音。
[参考资料转载]
1. lua binding 导出的自定义类怎么加到ide的代码提示?
答: IDE 1.0.1 beta开始支持lua binding导出的代码支持代码提示,需要通过指定项目的Lua
User Libraries方式导入。
lua binding导出的自定义类,需要压缩成zip格式,然后按如下步骤导入项目中。(global文件写
法见下面)
2. Lua 为什么自己添加的代码没有代码提示?
答: 1.0.0 beta 版本同文件的代码可以提示,不同文件如果在同目录也可以提示,但时如果另外的文件在子目录下就不能提示了,这是个bug,在1.0.1 beta之后解决了
ps:笔者亲自测试,1.1.0版本仍然存在这个问题。不过Sublime Text 2 + 插件的模式(QuickXDev)较好的解决了这个问题。
[参考资料]
在cocos code ide的基础上构建自己的lua开发调试环境的更多相关文章
- 学习cocos code ide 的lua编程
装上了cocos code ide,配了路径之后,建立一个默认lua工程,发现无法调试,报错. 问了别人,在cocos2dconstants.lua的613行插入cc.AsyncTaskPool = ...
- 搭建Cocos Code IDE开发环境
Cocos Code IDE是Cocos2d-x团队开发的,用于开发Cocos2d-JS和Cocos2d-x Lua绑定的游戏工具,它是基于Eclipse[ Eclipse 是一个开放源代码的.基于J ...
- 【cocos2d-x】尝鲜 Cocos Code IDE(不断更新)
Cocos Code IDE 是一个基于 Eclipse 的跨平台 IDE ,专门为 cocos2d lua & js 开发者准备,通过此工具.你能够方便的创建游戏project.编写而且调试 ...
- Cocos Code IDE + Lua初次使用FastTiledMap的坑
近期想玩玩Lua.又想玩玩Cocos Code IDE.更加想写一个即时战斗的.防守的.会动的.有迷雾的.要探索的(旁白:给我停!)跑地图游戏. 于是我就用Cocos Code IDE来写游戏了.挑战 ...
- Cocos Code IDE新建lua工程报错解决方案
今天想用cocos code IDE新建一个工程,但是控制台报错:Read json file null failed, the reason is:null.我下载的是官方3.5源码,sdk,ndk ...
- Cocos Code IDE (下载地址)
Cocos Code IDE 1.2.0 下载地址 Cocos Code IDE 1.2.0 Win32 下载地址: http://www.cocos2d-x.org/filedown/c ...
- 配置Cocos Code IDE 可以正常运行的组合:jdk,sdk ,ndk, ant, cocos2d-x
Cocos Code IDE:Cocos Code IDE 1.0.0-RC2 jdk:Cocos Code IDE 自动的jdk sdk:8以上 ndk:r9d(r10有bug),希望以后版本可以修 ...
- Cocos Code IDE里xcodeprojectlua脚本更新
lua脚本改动后xcode须要clean又一次编译才干更新,这个是xcode里的老毛病了,网上有一些脚本但不是针对Cocos Code IDE的project文件夹的,这里列出 cocos2dx版本号 ...
- Cocos Code IDE
https://www.cnblogs.com/luorende/p/6464181.html http://www.cocoachina.com/bbs/read.php?tid-464164.ht ...
随机推荐
- UIEdgeInsetsMake, CGRectOffset等API参数详解
1, UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right ) 2,position点是相对suerL ...
- Zabbix监控交换机设置
说明: Zabbix监控服务端已经配置完成,现在要使用Zabbix对交换机进行监控. 具体操作: 以下操作在被监控的交换机上进行,这里以Cisco交换机为例. 一.登录到Cisco交换机,开启snmp ...
- 高通平台 lcd driver 调试小结
一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2 开发环境 And ...
- 新买了ipad,在ipad上面看见的一个效果,pc上应该也见过,但是还是ipad上面有印象,如果是弹性运动就最好了
新买了ipad,在ipad上面看见的一个效果,pc上应该也见过,但是还是ipad上面有印象,如果是弹性运动就最好了 <!DOCTYPE html> <html> <hea ...
- eclipse创建java类时自动添加注释
一.按照以下顺序点击菜单 window-->preferences-->java-->Code Stype-->Code Templates-->Code-->Ne ...
- An Example of On-Error Trigger in Oracle Forms
I wrote this trigger around 4 years ago to handle errors in an application based on Oracle Forms 6i. ...
- Django 分页2 (Pagination)
分页是Web应用常用的手法,Django提供了一个分页器类Paginator(django.core.paginator.Paginator),可以很容易的实现分页的功能.该类有两个构造参数,一个是数 ...
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 题解
比赛链接:http://acm-software.hrbust.edu.cn/contest.php?cid=1082 A.好SB啊真是,还以为lis-数有多少个数不一样. #include < ...
- [CF733D]Kostya the Sculptor(贪心)
题目链接:http://codeforces.com/contest/733/problem/D 题意:给n个长方体,允许最多两个拼在一起,拼接的面必须长宽相等.问想获得最大的内切圆的长方体序号是多少 ...
- FPM的远程利用
看了lijiejie的博客,和乌云的PHPFastCGI的这篇文章,感觉在实际的业务中经常能遇到,所以在此记录下来: 原文:http://www.lijiejie.com/fastcgi-read-f ...