安卓 coco2dx lua+lua开发游戏怎么设置动画全局加速?

相关文章推荐
一个简单的技能冷却按钮的实现
var CoolButton = cc.Node.extend({ // 需要做成Node 否则会无法addchild
callback : null, // 点击后...
1. CCTableView三基友:
CCTableViewCell,负责单个cell,含有唯一idx用于区别。
CCTableViewDataSource,负责数据源相关,包括数据个数,数据根据...
哎,周围的同学都在搞cocos2dx 3.X了,而我还在用2.2.3。没办法,网上3.X的教程毕竟很少,还是等我的同学学得差不多了,我再换成3.X跟着同学搞,哪里不会问哪里...
直接贴代码:
local BlodProgressBar = class("BlodProgressBar", function (
return cc.Scene:create()
在游戏前通常都会加载好游戏中需要用到的资源,游戏的时候绘图才不会让内存飙升,不那么卡顿,
加载资源存到缓存时有一点点需要等待的时间,那么就设置一个场景显示一下进度条,加载完成就切换场景进入主游戏
可以说,进度条是游戏中特别常用的一个控件,大部分游戏都会需要用到资源加载条,技能道具的cd,或者是时间条。最近特别喜欢看底层,自我感觉底层是一个让人熟悉整个框架的特别好的方式,这次就来看下进度条的底层...
本来这篇博文是昨晚就要写的,可是因为今早要去参加考驾照相关的体检,而我最害怕的就是视力没能达到5.0,毕竟这阶段对着屏幕的时间过久。
所以呢,昨晚我几乎没碰电脑,没玩手机,早睡早起。体检顺利通过!
他的最新文章
讲师:Array
讲师:李志伟
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)网上关于cocos2dx c++版本中的图片加密方式已经很充分了。采用的是texturepacker工具的加密功能。
具体步骤是参考:
由于D:\cocos2d-x-2.1.5\cocos2dx\support\zip_support目录中已经包含了相关的.cpp文件,所以直接调用代码就好了。
这里是ZipUtils.h文件中的部分解释:
* Sets thepvr.ccz encryption key parts separately for added
* security.
* Example: If the key used to encryptthe pvr.ccz file is
* 0xaaaaaaaabbbbbbbbccccccccddddddddyou will call this function 4
* different times, preferably from 4different source files, as follows
*ZipUtils::ccSetPvrEncryptionKeyPart(0, 0xaaaaaaaa);
* ZipUtils::ccSetPvrEncryptionKeyPart(1,0xbbbbbbbb);
*ZipUtils::ccSetPvrEncryptionKeyPart(2, 0xcccccccc);
*ZipUtils::ccSetPvrEncryptionKeyPart(3, 0xdddddddd);
* Splitting the key into 4 parts andcalling the function
* from 4 different source filesincreases the difficulty to
* reverse engineer the encryption key.Be aware that encrpytion
* is *never* 100% secure and the keycode can be cracked by
* knowledgable persons.
* IMPORTANT: Be sure to callccSetPvrEncryptionKey or
* ccSetPvrEncryptionKeyPart with all ofthe key parts *before* loading
* the spritesheet or decryption willfail and the spritesheet
* will fail to load.
基本流程是:
texturePacker的32位16进制的加密key,在程序中使用32位key进行解密即可,程序可以参考
D:\cocos2d-x-2.1.5\samples\Cpp\TestCpp\Classes\TexturePackerEncryptionTest\TextureAtlasEncryptionTest.cpp
相关解密pvr.ccz代码如下
// Load theencrypted atlas
// 1) Set the encryption keys or step 2will fail
// In this case the encryption key0xaaaaaaaabbbbbbbbccccccccdddddddd is
// split into four parts. See the headerdocs for more information.
ZipUtils::ccSetPvrEncryptionKeyPart(0,0xaaaaaaaa);
ZipUtils::ccSetPvrEncryptionKeyPart(1,0xbbbbbbbb);
ZipUtils::ccSetPvrEncryptionKeyPart(2,0xcccccccc);
ZipUtils::ccSetPvrEncryptionKeyPart(3,0xdddddddd);
// Alternatively, you can call the functionthat accepts the key in a single
// function call.
// This is slightly less secure because theentire key is more easily
// found in the compiled source. See theheader docs for more information.
//ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc,0xdddddddd);
// 2) Load the encrypted atlas
CCSpriteFrameCache::sharedSpriteFrameCache()-&addSpriteFramesWithFile("Images/encryptedAtlas.plist","Images/encryptedAtlas.pvr.ccz");
// 3) Create a sprite from the encryptedatlas
CCSprite *encryptedSprite =CCSprite::createWithSpriteFrameName("powered.png");
C++中的资源加密解密是这样完成的,但是Lua中的tolua文件没有实现ZipUtils,所以我们不能使用c++的方式去操作。
我采用的是将Cocos2dx文件中的ZipUtils的API进行tolua++的操作,生成可供lua使用的ZipUtils方法。
因为是在quick x下面操作,我也是用quick x下面的tolua工具来导出C++的API。首先编写自己的类文件(.h and .cpp),
根据.h文件写出.tolua文件,由于我使用的是最新版本的quick x 2.2.1-rc,所以我自己摸索了半天,终于生成了自己的LuaCocos2d.cpp文件,其中也已经包含了我的类的定义和方法声明,具体操作主要是在
D:\quick-x\quick-cocos2d-x\lib\cocos2d-x 目录 和&D:\quick-x\quick-cocos2d-x\lib\luabinding目录,放置好自己的.h and .cpp文件和.tolua文件到这两个目录中,通过点击luabinding目录下的build.bat文件来生成LuaCocos2d.cpp
至此也都没什么问题,然后是重新编译自己的x-player,不过报错了。
lua调用C++API的原理我是这样理解的:
1)lua文件中的类首先要通过Luacocos2d.cpp来找到对应的c++文件
2)c++文件执行并返回相应的结果
tolua++生成的LuaCocos2d.cpp更像是一个中间层,负责交互的任务。
.tolua文件的作用是用来生成LuaCocos2d.cpp文件的,所以我们的.tolua文件的书写需要有点差异,这个网上有说明;
.tolua主要就是声明提供的方法,这样才能让Luacocos2d.cpp知道某个类有哪些方法可以调用,而Luacocos2d.cpp的作用就是进行lua方法到调用C++方法的转换。
在生成LuaCocos2d.cpp文件时单纯的需要.tolua文件就可以了。
在lua代码中调用C++的方法时,也就是只需要LuaCocos2d.cpp文件和自己类的.cpp and .h 文件
上面遗留的报错问题待解决.....................................................T_T
相关参考网址聚合:
http://blog.csdn.net/xiaominghimi/article/details/8770396
http://blog.csdn.net/aryang/article/details/9611883
/archives/746
http://blog.csdn.net/stalendp/article/details/8920018
http://cn./?p=235
/kf/704.html
网友的对这一块的解释截图:
阅读(...) 评论()相关文章推荐
cocos2dx-lua的项目打包流程详细。
Cocos2d-x 3.0 Android修改APK名、更改图标、修改屏幕方向、修改版本号,一些需要注意的问题。...
本人用的是Android Studio。如果对用Android Studio创建Cocos2d-x项目有疑问的请戳这里。
创建好Cocos2d-x项目之后,我们发现在在Android Studio里...
本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: /iphone-cocos2dx/681.ht...
欢迎各位童鞋转载,转载请注明出处:http://blog.csdn.net/song_hui_xiang
作者新浪微博:/u/
作者腾讯微博:h...
假定我们现在有个纯洁的处女项目,cocos2dx3.4 lua项目,在E:\cocos\cocos2d-x-3.4\cocosCode\MyGame下。
我们要把它添油加醋地发布到自己的Android...
1、IOS篇(用OC和C++混编)
头文件声明:
public static void copy(std::string str);
实现如下:
void copy(std::string str)...
这个问题搞死我了……弄了好久才弄好。看上去其实挺唬人的,需要从Lua调到C++,再调到OC,其实仔细分析一下的话还好。我们下面开始讲解:
首先是Lua调到C++(如果直接是C++的项目请无视):
欢迎各位童鞋转载,转载请注明出处:http://blog.csdn.net/song_hui_xiang
作者新浪微博:/u/
作者腾讯微博:h...
Android是基于Linux 2.6 内核的系统,所以理论上Linux OS可以运行的脚本语言,给予相应的运行库,在Android也可以运行。
在Android手机上编写并运行Lua脚本
他的最新文章
讲师:Array
讲师:李志伟
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)相关文章推荐
年前在对我做的项目做性能优化,虽然在开发中,性能问题是一直关注着的,但是这个东西依然需要在后期做一段时间的优化的,也遇到不少坑,在这里分享下,也记作笔记,另外也欢迎大家有这方面的问题经验在这里讨论。性...
原文地址:/freeze86/p/4245020.html
项目接近尾声,需要做加载效率优化和内存优化。
在加载Spine制作的资源时候,我们需...
Spine是一款优秀的2D骨骼动画软件,提供了几乎包含目前所有主流游戏引擎和编程语言的运行库。
本人使用cocos2d引擎开发移动游戏,鉴于Spine强大的功能和良好的UI,选择其实现骨骼动画。
Spine效率低Unity加载spine动画,经常会出现卡顿的情况,尤其是SkeletonRenderer.Awake时,会瞬间出现大量的GC Alloc,造成瞬间的卡顿,像我们游戏一个角色动画的时间...
在cocos2dx中,图片默认是使用RGBA8888来加载图片的,这样的结果就是在默认情况下,虽然你用了jpg或者压缩过的png,你的包是小了,但是你发现使用的内存并没有减少?why?
譬如,我使用...
近期游戏准备出安卓版本,在安卓上的性能表现不佳。经过一周多的优化,在性能上取得了较大的提升。游戏采用 Cocos2d-x 3.2 + Lua 进行开发,以下将在渲染效率,CPU效率,包大小等方面进行总...
cocos2dx游戏性能优化之对象池对象池机制:可回收与重复使用手机游戏的性能对于一款手机游戏来说,那是相当的重要了,我们常说的性能呢,一般包括耗电,发热情况,流畅度,是否存在卡帧等等。从专业的角度来...
ObjectPool.h
DragonBall
Created by user on 13-8-22.
#ifndef __DragonBall__O...
只是用到皮毛,各位大神不喜勿喷,有什么好的建议,请指出
**Cocos2d-x子弹篇**
对象池: 主要 是为了 避免在程序的生命周期中,大...
local PrefabObjectPool = {}PrefabObjectPool.__index = PrefabObjectPool
function PrefabObjectPool.Ne...
他的最新文章
讲师:Array
讲师:李志伟
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)『 不要让任何事情成为你不去学习的理由!』
【COCOS2DX-LUA 脚本开发之一】LUA语言基础在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
本站文章均为
原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接:
对于游戏公司而言,采用游戏脚本lua、python等进行开发也很常见,但是很多童鞋对脚本并没有很熟悉的概念,本篇则向大家简单介绍脚本的用途以及在Cocos2dx基础用法;
Lua和python这些详细介绍的话,请不太熟悉的童鞋自行百度百科哈,那么对于lua和python则是两个常用的脚本语言,lua相对于python而言,lua比较轻量级罢了,而其他区别就不多说了,但是为什么本章要讲解lua的原因则有两点,首先第一:cocos2dx 游戏引擎内嵌lua,第二点:自从“令人愤怒的小鸟”火起来之后,国内很多都偏向于使用lua了=。 =
那么对于脚本的用途这里也大概说两点:
脚本在手游中是类于“大脑”的功能,所有游戏相关的逻辑代码一般都放在脚本中,而客户端(前台)的代码都则属于“肢体”,也可以说是“播放器”,作用只是用户展示出UI界面的功能;那么脚本的作用那么不仅仅如此,比如地图数据等都可以利用脚本使用;
2. 脚本在手机网游中的作用尤为重要,比如一款网游“Himi”没有使用脚本,如果“Himi”1.0版本在发布后突然发现客户端出现一些棘手的bug需要修复,那么你想修改那么也要等待再次更新客户端重新提交发布才可以解决,这样会流失一大批用户,而且游戏每次更新也会流失掉部分用户,这是肯定的;但是如果“Himi”这款网游使用脚本的话,那么解决此类问题很eazy,比如我在“Himi”游戏中的逻辑代码都放在脚本a.lua 中,那么如果a.lua逻辑中哪里出现了问题,我们直接可以将修复后的a.lua脚本更新至服务器中,因为一般脚本都会定义version号,比如a.lua有bug的version:1.0,那么我们修复后的a.lua version改成1.1,当用户每次启动游戏的时候,客户端都会将脚本的version与服务器脚本version做对比,当server端脚本version号比当前脚本新,那么自动下载并覆盖当前脚本,OK,问题解决;不仅仅如此,比如游戏中做个活动呀,换个图片呀等等都可以即使更新,而不是每次修改前端代码都要重新发布新的游戏版本,造成一些损失!
OK,不再多说了,下面我们来介绍在Cocos2dx中对于lua脚本的一些简单使用,首先我们通过新建一个Cocos2dx-lua模版项目,默认此模版中有个示例,童鞋们可以直接运行项目看效果,但是大家可能会郁闷在class中完全找不到任何相关的代码?!?那就对了,因为所有逻辑代码都放置在了lua脚本中,项目启动后直接解析的一个名称为hello.lua的脚本!
打开项目的Resources仔细找下,有没有发现有 hello.lua 合hello2.lua两个脚本文件?!OK,就是这里拉。 那么对于cocos2dx_lua demo的例子脚本我这里不多说比较容易,但是肯定不太熟悉的童鞋比较疑惑,那么Himi这里重新整理了一份简单的示例脚本代码,大家可以直接将如下代码直接复制到hello.lua中看效果;代码如下:
require "hello2"
-- 包含hello2这个脚本
-- 注视语句
-- 基本上调用的cocos2dx函数和类的时候就是以cocos2d.*这样子来用
-- 注意2:function 关键字定义函数,end结束函数
cocos2d.CCLuaLog("脚本hello开始运行... " .. myadd(3, 5))
-- 创建一个Scene
sceneForWorld = cocos2d.CCScene:node()
-- 创建一个Layer
layerForWorld = cocos2d.CCLayer:node()
sceneForWorld:addChild(layerForWorld)
-- 创建一个精灵
spriteForWorld
= cocos2d.CCSprite:spriteWithFile("Icon.png")
layerForWorld:addChild(spriteForWorld)
-- 获取屏幕宽高
screenSize=cocos2d.CCDirector:sharedDirector():getWinSize()
-- 设置精灵坐标
spriteForWorld:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5))
-- 设置精灵缩放2倍
spriteForWorld:setScale(2)
-- 添加一个CCLabelTTF
(!!!!!!备注!!!!!!)
myLableTTF =cocos2d.CCLabelTTF:labelWithString("Himi- Lua 基础","Helvetica-Bold",24)
myLableTTF:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5+100))
sceneForWorld:addChild(myLableTTF)
-- 添加一个CCLabelTTF
myLableTTF2 =cocos2d.CCLabelTTF:labelWithString("上面icon跟随用户触屏位置","Helvetica-Bold",24)
myLableTTF2:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5-100))
sceneForWorld:addChild(myLableTTF2)
@@@@@@@@@@触摸事件
--开启触摸
layerForWorld:setIsTouchEnabled(true)
-- 注册触摸事件
layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHBEGAN, "btnTouchBegin")
layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHMOVED, "btnTouchMove")
layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHENDED, "btnTouchEnd")
-- touch handers
pointBegin = nil
function btnTouchBegin(e)
cocos2d.CCLuaLog("btnTouchBegin")
local v = e[1]
local pointMove = v:locationInView(v:view())
pointMove = cocos2d.CCDirector:sharedDirector():convertToGL(pointMove)
spriteForWorld:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))
function btnTouchMove(e)
cocos2d.CCLuaLog("btnTouchMove")
local v = e[1]
local pointMove = v:locationInView(v:view())
pointMove = cocos2d.CCDirector:sharedDirector():convertToGL(pointMove)
spriteForWorld:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))
function btnTouchEnd(e)
cocos2d.CCLuaLog("btnTouchEnd")
@@@@@@@@@@触摸结束
--动态小狗
winSize = cocos2d.CCDirector:sharedDirector():getWinSize()
FrameWidth = 105
FrameHeight = 95
textureDog = cocos2d.CCTextureCache:sharedTextureCache():addImage("dog.png")
frame0 = cocos2d.CCSpriteFrame:frameWithTexture(textureDog, cocos2d.CCRectMake(0, 0, FrameWidth, FrameHeight))
frame1 = cocos2d.CCSpriteFrame:frameWithTexture(textureDog, cocos2d.CCRectMake(FrameWidth*1, 0, FrameWidth, FrameHeight))
spriteDog = cocos2d.CCSprite:spriteWithSpriteFrame(frame0)
spriteDog:setPosition(cocos2d.CCPoint(100, winSize.height/4*3))
layerForWorld:addChild(spriteDog)
animFrames = cocos2d.CCMutableArray_CCSpriteFrame__:new(2)
animFrames:addObject(frame0)
animFrames:addObject(frame1)
animation = cocos2d.CCAnimation:animationWithFrames(animFrames, 0.5)
animate = cocos2d.CCAnimate:actionWithAnimation(animation, false);
spriteDog:runAction(cocos2d.CCRepeatForever:actionWithAction(animate))
--自定义函数
function prForHimi()
cocos2d.CCLuaLog("reFresh function")
--取消选择器
--cocos2d.CCScheduler:sharedScheduler():unscheduleScriptFunc("prForHimi")
--使用选择器进行函数更新
--cocos2d.CCScheduler:sharedScheduler():scheduleScriptFunc("prForHimi", 1, false)
--循环语句
for i=0,4,1 do
for j=0,4,2 do
cocos2d.CCLuaLog("for loop",i)
-- 避免内存泄漏
collectgarbage( "setpause", 100)
collectgarbage( "setstepmul", 5000)
-- 播放背景音乐
--CocosDenshion.SimpleAudioEngine:sharedEngine():playBackgroundMusic("background.mp3", true)
-- 播放音效
--CocosDenshion.SimpleAudioEngine:sharedEngine():preloadEffect("effect1.wav")
-- run整个scene
cocos2d.CCDirector:sharedDirector():runWithScene(sceneForWorld)
cocos2d.CCLuaLog("脚本hello正常执行结束... " .. myadd(3, 5))
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
require "hello2"&&-- 包含hello2这个脚本&-- 注视语句 &-- 基本上调用的cocos2dx函数和类的时候就是以cocos2d.*这样子来用-- 注意2:function 关键字定义函数,end结束函数&-- 打印cocos2d.CCLuaLog("脚本hello开始运行... " .. myadd(3, 5))&-- 创建一个ScenesceneForWorld = cocos2d.CCScene:node()&-- 创建一个LayerlayerForWorld = cocos2d.CCLayer:node()sceneForWorld:addChild(layerForWorld)&-- 创建一个精灵spriteForWorld&&= cocos2d.CCSprite:spriteWithFile("Icon.png")layerForWorld:addChild(spriteForWorld)&-- 获取屏幕宽高screenSize=cocos2d.CCDirector:sharedDirector():getWinSize()&-- 设置精灵坐标spriteForWorld:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5))&-- 设置精灵缩放2倍spriteForWorld:setScale(2)&-- 添加一个CCLabelTTF&&&&(!!!!!!备注!!!!!!)myLableTTF =cocos2d.CCLabelTTF:labelWithString("Himi- Lua 基础","Helvetica-Bold",24)myLableTTF:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5+100))sceneForWorld:addChild(myLableTTF)-- 添加一个CCLabelTTFmyLableTTF2 =cocos2d.CCLabelTTF:labelWithString("上面icon跟随用户触屏位置","Helvetica-Bold",24)myLableTTF2:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5-100))sceneForWorld:addChild(myLableTTF2)&--&& @@@@@@@@@@触摸事件&--开启触摸layerForWorld:setIsTouchEnabled(true)&-- 注册触摸事件layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHBEGAN, "btnTouchBegin")layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHMOVED, "btnTouchMove")layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHENDED, "btnTouchEnd")&-- touch handerspointBegin = nil&function btnTouchBegin(e)&&&&cocos2d.CCLuaLog("btnTouchBegin")&&&&local v = e[1]&&&&local pointMove = v:locationInView(v:view())&&&&pointMove = cocos2d.CCDirector:sharedDirector():convertToGL(pointMove)&&&&spriteForWorld:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))end&function btnTouchMove(e)&&&&cocos2d.CCLuaLog("btnTouchMove")&&&&local v = e[1]&&&&local pointMove = v:locationInView(v:view())&&&&pointMove = cocos2d.CCDirector:sharedDirector():convertToGL(pointMove)&&&&spriteForWorld:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))end&function btnTouchEnd(e)&&&&cocos2d.CCLuaLog("btnTouchEnd")end&--&& @@@@@@@@@@触摸结束&--动态小狗winSize = cocos2d.CCDirector:sharedDirector():getWinSize()FrameWidth = 105FrameHeight = 95&textureDog = cocos2d.CCTextureCache:sharedTextureCache():addImage("dog.png")frame0 = cocos2d.CCSpriteFrame:frameWithTexture(textureDog, cocos2d.CCRectMake(0, 0, FrameWidth, FrameHeight))frame1 = cocos2d.CCSpriteFrame:frameWithTexture(textureDog, cocos2d.CCRectMake(FrameWidth*1, 0, FrameWidth, FrameHeight))&spriteDog = cocos2d.CCSprite:spriteWithSpriteFrame(frame0)spriteDog:setPosition(cocos2d.CCPoint(100, winSize.height/4*3))layerForWorld:addChild(spriteDog)&animFrames = cocos2d.CCMutableArray_CCSpriteFrame__:new(2)animFrames:addObject(frame0)animFrames:addObject(frame1)&animation = cocos2d.CCAnimation:animationWithFrames(animFrames, 0.5)&animate = cocos2d.CCAnimate:actionWithAnimation(animation, false);spriteDog:runAction(cocos2d.CCRepeatForever:actionWithAction(animate))&--自定义函数function prForHimi()&&&&cocos2d.CCLuaLog("reFresh function")&&&&--取消选择器&&&&--cocos2d.CCScheduler:sharedScheduler():unscheduleScriptFunc("prForHimi")end&--使用选择器进行函数更新--cocos2d.CCScheduler:sharedScheduler():scheduleScriptFunc("prForHimi", 1, false)&--循环语句for i=0,4,1 do&&&&for j=0,4,2 do&&&&&&&&cocos2d.CCLuaLog("for loop",i)&&&&endend&-- 避免内存泄漏collectgarbage( "setpause", 100)collectgarbage( "setstepmul", 5000)&-- 播放背景音乐--CocosDenshion.SimpleAudioEngine:sharedEngine():playBackgroundMusic("background.mp3", true)-- 播放音效--CocosDenshion.SimpleAudioEngine:sharedEngine():preloadEffect("effect1.wav")&-- run整个scenecocos2d.CCDirector:sharedDirector():runWithScene(sceneForWorld)&cocos2d.CCLuaLog("脚本hello正常执行结束... " .. myadd(3, 5))
运行效果图如下:
对于Himi上面给出的自己修改后的代码注视写的狠清楚了 =。 = 所以不多加赘述,但是Himi这里需要还要详细说一点;
脚本lua等一般都示通过中间层(解析)进行与前端代码(Cocos2dX封装的引擎类库)交互,所以很多方法名称可能发生了改变,那么对于不太熟悉的童鞋我们如何下手?
OK,如刚才的代码中有个“备注”,不知道细心童鞋们看到没有,这里是添加了一个CCLabelTTF ,假如我们不知道它的构造函数是否有修改,或者说参数忘记都是什么了,那么请打开你项目的libs文件夹,然后打开lua文件夹,继续打开cocos2dx_support文件夹找到 LuaCocos2d.cpp文件打开,(注意这个文件代码很多,打开较慢)然后你会看到很多方法的定义与实现!
那么假如我们来找 CCLabelTTF的构造方法,那么搜一下如下语句:
tolua_beginmodule(tolua_S,"CCLabelTTF");
tolua_beginmodule(tolua_S,"CCLabelTTF");
你将发现此类下方一大批类似的代码:
没错这里就是此类的所有是lua-cocos2dx之间的转换函数定义,比如常用的CCLabelTTF构造函数:
tolua_function(tolua_S,"labelWithString",tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01);
tolua_function(tolua_S,"labelWithString",tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01);
此函数第一参数大家不用理会,第二个参数表示我们使用cocos2d/x时调用的函数名称,后面则是lua-cocos2dx之间的转换函数实现代码,大家可以继续搜索第三个参数或者按住command然后点击第三个参数找到其函数实现代码:
/* method: labelWithString of class
cocos2d::CCLabelTTF */
#ifndef TOLUA_DISABLE_tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01
static int tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01(lua_State* tolua_S)
tolua_Error tolua_
!tolua_isusertable(tolua_S,1,"cocos2d::CCLabelTTF",0,&tolua_err) ||
!tolua_isstring(tolua_S,2,0,&tolua_err) ||
!tolua_isstring(tolua_S,3,0,&tolua_err) ||
!tolua_isnumber(tolua_S,4,0,&tolua_err) ||
!tolua_isnoobj(tolua_S,5,&tolua_err)
goto tolua_
const char* label = ((const char*)
tolua_tostring(tolua_S,2,0));
const char* fontName = ((const char*)
tolua_tostring(tolua_S,3,0));
float fontSize = ((float)
tolua_tonumber(tolua_S,4,0));
cocos2d::CCLabelTTF* tolua_ret = (cocos2d::CCLabelTTF*)
cocos2d::CCLabelTTF::labelWithString(label,fontName,fontSize);
tolua_pushusertype(tolua_S,(void*)tolua_ret,"cocos2d::CCLabelTTF");
tolua_lerror:
return tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString00(tolua_S);
#endif //#ifndef TOLUA_DISABLE
12345678910111213141516171819202122232425262728
/* method: labelWithString of class&&cocos2d::CCLabelTTF */#ifndef TOLUA_DISABLE_tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01static int tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01(lua_State* tolua_S){ tolua_Error tolua_err; if (&&&& !tolua_isusertable(tolua_S,1,"cocos2d::CCLabelTTF",0,&tolua_err) ||&&&& !tolua_isstring(tolua_S,2,0,&tolua_err) ||&&&& !tolua_isstring(tolua_S,3,0,&tolua_err) ||&&&& !tolua_isnumber(tolua_S,4,0,&tolua_err) ||&&&& !tolua_isnoobj(tolua_S,5,&tolua_err) )&&goto tolua_lerror; else {&&const char* label = ((const char*)&&tolua_tostring(tolua_S,2,0));&&const char* fontName = ((const char*)&&tolua_tostring(tolua_S,3,0));&&float fontSize = ((float)&&tolua_tonumber(tolua_S,4,0));&&{&& cocos2d::CCLabelTTF* tolua_ret = (cocos2d::CCLabelTTF*)&&cocos2d::CCLabelTTF::labelWithString(label,fontName,fontSize);&&&&tolua_pushusertype(tolua_S,(void*)tolua_ret,"cocos2d::CCLabelTTF");&&} } return 1;tolua_lerror: return tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString00(tolua_S);}#endif //#ifndef TOLUA_DISABLE
在这里看到此函数转换过程,并可以很清楚看到:
cocos2d::CCLabelTTF* tolua_ret = (cocos2d::CCLabelTTF*)
cocos2d::CCLabelTTF::labelWithString(label,fontName,fontSize);
cocos2d::CCLabelTTF* tolua_ret = (cocos2d::CCLabelTTF*)&&cocos2d::CCLabelTTF::labelWithString(label,fontName,fontSize);
到这里大家会很清楚需要的参数都是哪些,如果还不清楚,继续按住Command然后点击labelWithString进入cocos2dx引擎代码 CCLabelTTF.cpp中的此函数实现啦!
可能这部分有童鞋看得比较迷茫 =。 = 那么Himi来简化这些复杂来说:
解析lua脚本中的一句代码-&通过解析层代码-&将其转换并转到前端代码进行使用
那么当然此过程也可逆:
前端代码-&通过解析层代码-&使用lua脚本中东东
这里由于Himi对cocos2dx 中的lua还没有深入了解,所以不知是否过程可逆;
OK,基本就是这样,对于脚本的熟悉,主要还是在公司进行使用然后慢慢熟悉和熟练掌握的,本章主要需要童鞋们记住的是脚本的概念和作用!
广播: luaer
广播: 【木头】
广播: 疯刀
? 【Unreal Engine 】 ? 【React Native】 ? 【Cocos Creator】? 【Cocos2dx】? 【C2dx-Lua】
Himi’s Book
小广告先森
小广告先森}

我要回帖

更多关于 cocos2dx lua 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信