用cocos2d-x做开发的话,用的最多的开发语言就是c++/lua了,而现在公司很多都比较看重开发速度,较多的公司都选择了lua作为开发语言,同时lua的热更新也比c++的热更新更为便捷,更让更多的开发者都开始使用了lua进行开发。

作为手游开发者,自然不能落后^ ^。

开发工具的选择:sublime Text 。这里不选择coco官方的cocos code IDE 的理由是:api,各个方面插件功能支持不完善,基于eclpise的(之前在ADT遇到的种种问题,让我非常不爽,所以不喜欢!),内存占用问题(我电脑开着还想干其他事呢,怎么能卡呢? pass!),界面不简洁,不美观。然后么,基本上cocos code IDE 的不足之处都是sublime text的优势咯。

sublime 有功能众多的插件帮助开发者使用,界面精简,美观,占用内存小,开发速度快。而其中的QuickXDev插件,在基于quick的开发中,显得功能十分强大。

首先基本配置,选择QuickXDev 的setting-user:(以下是我本地的配置)

{
    "quick_cocos2dx_root": "D:/cocos/quick-3.3","cocos2dx_root": "D:/cocos/quick-3.3","author": "cjsjy123","compile_scripts_key": "encrypt_key"
}
功能:

1.go to DeFinition,使其能够像IDE自由进行调整,查看这些api的具体实现和文档注释。

2.run with player ,快捷的启动player,查看运行效果。(这里可能会有问题,因为文档跳转用到了quick_cocos2dx_root 和cocos2dx_root的环境变量配置,如果在这里修改使之能运行player,则将无法正确跳转,所以在quickx.py(在sublime 打开brower packages ,找到QuickXDev的安装目录,找到它)中修改77行:

playerPath=quick_cocos2dx_root+"/quick/player/win32"+"/player3.exe"

就能正确的运行player了。

)

拓展:

实际上QuickXDev提供的api还是比较有限的,比如在quick中比较常用的display中的函数基本在api代码补全和提示中看不到,这点也是让我有点伤心啊,难道真的没办法了么?还是有的!

参考了QuickXDev的api提示文件,我用python写了个,自动根据lua文件生成api提示的脚本,这个脚本的优势是能把当前文件夹下的所有.lua文件统一生成api提示,不仅仅是引擎的api,还有我们之前在程序中各个lua文件中的函数都能被智能识别,提示代码补全和提示功能,下面分享代码:

import os,sys,time
import Image
from kbtools import *

global mode
mode =[".lua",]

def Build_Snippet(filename):
	if filename.endswith(mode[0]):
		m_filename=os.path.split(filename)[-1]
		m_exportName =m_filename.split(".")[0]+"_export"
		if os.path.exists(os.path.abspath(m_exportName)) and os.path.isdir(os.path.abspath(m_exportName)):
			pass
		else:
			os.mkdir(os.path.abspath(m_exportName))
		print "export --- %s " %os.path.abspath(m_exportName)
		with open(filename,"rb") as f:
			for sub in f.readlines():
				passContent ="".join(sub.split())
				if passContent.startswith("function"):
					CreateSnip(passContent,filename,os.path.abspath(m_exportName))
			f.close()
		# with open(filename)
	else:
		print "filename error"

def CreateSnip(string,fileVaule,dirname):
	param_list =[]
	left_index =string.find("(")
	right_index =string.find(")")
	index = string.find(".") 
	if  string.find(".")==-1  and string.find(":")==-1:
		return
	elif string.find(":") >left_index or index > left_index:
		return
	elif  string.find(".")!=-1  and string.find(":")!=-1:
		pass
	else:
		index =max(index,string.find(":"))
		
	function_name = string[index+1:left_index]
	print "function_name %s" %function_name

	newstr = string[left_index+1:right_index]
	for substr in newstr.split(","):
		param_list.append(substr)
#start create
	file_content ="<snippet>\n"
	file_content += "\t<content><![CDATA["+function_name+"("
	par_num = 0
	for each in param_list:
		if par_num ==len(param_list)-1:
			file_content +="${"+str(par_num)+":"+each+"})]]></content>\n"
		else:
			file_content +="${"+str(par_num)+":"+each+"},"
		par_num =par_num +1
	file_content +="\t<tabTrigger>"+string[index+1:len(string)]+"</tabTrigger>\n"
	file_content +="\t<scope>source.lua</scope>\n"
	file_content +="\t<description>"+fileVaule.split(".")[0].split("\\")[-1]+"</description>\n"
	file_content +="</snippet>"
	exportName =checkSNFile(os.path.split(fileVaule)[-1]+"_"+function_name)
	# print "  %s  fileVaule  %s" % (exportName,fileVaule)
	with open(os.path.join(dirname,exportName),"w") as f:
		f.write(file_content)
		f.close()

def checkSNFile(filename):
	newFile=filename
	if os.path.exists(filename):
		mfile =filename.split(".")[0]
		newFile=mfile +"_extern"
		newFile =newFile.replace(".","_")
		newFile =newFile.replace(":","_")
		newFile += ".sublime-snippet"
		return checkSNFile(newFile)
	else:
		if filename.endswith(".sublime-snippet") == True:
			newFile = filename.split(".")[0]
			newFile = newFile.replace(".","_")
			newFile = newFile.replace(":","_")
			newFile +=".sublime-snippet"
		else:
			newFile = filename.replace(".","_")
			newFile = filename.replace(":","_")
			newFile += ".sublime-snippet"
		return newFile

def setFlag(pmode):
	global mode
	mode[0] =pmode

if __name__ =="__main__":
	if len(sys.argv) ==1:
		FileSearch(".",os.getcwd())
		for each in  get_allFile_list():
			Build_Snippet(each)
	input("finish__________")
	# Build_Snippet(os.path.join("a","display.lua"))
	pass

效果如下:


这样我们就能轻松愉快的进行lua编码,麻麻再也不怕我写错代码了!

脚本文件下载:点击打开链接

Cocos2dx -lua QuickXDev拓展的更多相关文章

  1. HTML5之消息通知的使用(Web Notification)

    通知可以说是web中比较常见且重要的功能,私信、在线提问、或者一些在线即时通讯工具我们总是希望第一时间知道对方有了新的反馈。本篇文章主要介绍了HTML5之消息通知的使用(Web Notification),感兴趣的小伙伴们可以参考一下

  2. ios – 如何使用Objective C类中的多个参数调用Swift函数?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  3. ios – Swift 4添加手势:覆盖vs @objc

    我想在我的视图中添加一个手势,如下所示:但是,在Swift4中,我的编译器给出了以下错误:建议添加@objc以将此实例方法公开给Objective-C.实现此目的的另一个选项将覆盖touchesBegan()函数并使用它来处理点击.我试图以“Swift”的方式做到这一点,而不必带入Obj-C.有没有纯粹的Swift方式来添加这个轻击手势而不使用@objc?

  4. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  5. ios – 以编程方式在Swift中添加联系人

    我想在Swift中以编程方式添加联系人.我发现了一些Objective-C示例,但我没有让它们工作,甚至在Objective-C中也没有.我不希望这涉及到AddressBookUI,因为我想从我自己的UI中获取值.解决方法这是在Swift中添加联系人的快速方法.我在我的iPhone5iOS7.1上验证了它,因为我发现模拟器并不总是与我的手机对AB的东西相同.您可以添加一个按钮并指向此方法:顺便说一下–它假设你已经分配了一个地址簿var,你可以通过覆盖viewDidAppear来打开视图.它也会执行安全提示

  6. ios – 我可以使用哪些iPhone OS API来实现类似于iBook页面翻转过渡的过渡动画?

    >UIKitAPI中的某个地方是否可以使用该动画,还是我必须自己实现?它肯定有3D感觉,他们可以使用OpenGLESAPI吗?解决方法Apple当然使用OpenGLES来实现它.Apple使用的实际API是私有的,但thisblogger具有示例代码的实现的开始.

  7. ios – 为目标c中的方法传递未知类型的参数,可能吗?

    是否可以将未知类型的参数传递给objective-C方法?在C#中你可以写实现这一点,但我知道Objective-C没有泛型,所以有没有其他方法可以在Objective-C中实现这一点?我需要这个,因为我想创建一个方法来改变不同对象的文本颜色,如UITextField和UIButton的占位符文本.所以我的计划是创建一个名为textWhite的方法,然后在此方法中检查对象的类型,然后运行匹配的代码以使文本颜色变为白色.解决方法是的,可以传递未知类型的参数.见下面的例子.请参考使用id对象的链接作为参数Us

  8. ios – Swift指针算术和解除引用;将一些类似C的地图代码转换为Swift

    我有一点似乎没有工作的Swift代码……解决方法您正在指定locationPointer指向新位置,但仍在下一行中使用ptr,并且ptr的值尚未更改.将您的最后一行更改为:或者你可以改变指向var的指针并推进它:

  9. iOS 7,用于断开调用的私有API CTCallDisconnect不起作用

    谢谢!

  10. 我应该使用哪个高级API来管理iOS上的UDP套接字?

    在“NetworkProgrammingTopicsConceptualGuide”的“UsingSocketsandStreams”一章中,Apple说:Note:POSIXnetworkingdoesnotactivatethecellularradiooniOS.Forthisreason,thePOSIXnetworkingAPIisgenerallydiscouragediniOS.同样

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部