quickcocos code ide quick精灵的问题

今天看啥 热点:
quick-cocos2d-x 从2.2.5升级到3.3的体会,quickcocos2dx3.3
& & 最近公司的项目需要把项目从quick 2.2.5升级到quick 3.3 final版本,我发现改动还是很大的,但是github上的文档只涵盖了很少的一部分,因此我在这里把自己升级中的一些注意事项罗列出来,希望能有所帮助。
&&&&&& 首先,我们可以看看github上的文档,主要有如下部分:
下列函数或常量需要替换:
CCLuaLog()
CCFileUtils:sharedFileUtils()
cc.FileUtils:getInstance()
kCCTexture2DPixelFormat_*
cc.TEXTURE2D_PIXEL_FORMAT_*
display.addSpriteFramesWithFile
display.addSpriteFrames
ccc4FFromccc4B()
cc.c4fFromc4b()
getZOrder()
getLocalZOrder()
setZOrder()
setLocalZOrder()
setFlipX()
setFlippedX()
setFlipY()
setFlippedY()
& & & & 结合自己的项目,我们发现还有一些我们在升级时需要注意的东西并没有标注出来。
1.ccp改为cc.p
2.CCDirector等大量CC的写法改为cc.Director,即CCDirector:sharedDirector()改为cc.Director:getInstance(),SimpleAudioEngine:sharedEngine()改为cc.SimpleAudioEngine:getInstance()。
3.骨骼动画写法的修改,如CCArmature:create 改为&ccs.Armature:create等
4.骨骼动画的释放,ccs.ArmatureDataManager:purge()改为ccs.ArmatureDataManager:destroyInstance()
5.音乐播放类的带background的方法写法的修改,如isBackgroundMusicPlaying改为isMusicPlaying
6.sprite的点击判断的修改,如下面例子:self.sprite是我们的精灵,pnt是我们的点,那么self.sprite:getBoundingBox():containsPoint(pnt)改为cc.rectContainsPoint(self.sprite:getBoundingBox(), pnt)
7.ui.newBMFontLabel改为cc.ui.UILabel.newBMFontLabel
8.现在的layer层默认是吞噬点击,所以我们在添加新的层的时候,应当设置为不可吞噬,也就是setTouchSwallowEnabled(false)
9.tableview里的写法改变:如kCCScrollViewDirectionVertical改为cc.SCROLLVIEW_DIRECTION_VERTICAL等
10.http请求回调的返回值“inprogress”改为“progress”
11.同时多个assetsmanager同时在下载的过程中,回调的progress值会产生跳动的情况,解决的方法是找到asstsmanager.cpp文件,修改其中的一个函数的percent前的前缀static,把static去掉并重新编译即可。
12.assetsmanager写法修改,如:
local assetsManager = cc.AssetsManager:new(zipurl, versionurl, path)
assetsManager:deleteVersion()
assetsManager:retain()
assetsManager:setConnectionTimeout(3)
其中retain这句话必不可少,否则会报错。
13.ui.newImageMenuItem改为cc.ui.UIPushButton.new。
14.在quick 3.3中,精灵不可以直接执行cc.PageTurn3D方法,会直接报错,我的解决方法是用cc.NodeGrid:create()创建一个nodegrid,把我们的精灵加在这个nodegrid上,然后在用nodegrid去调用类似PageTurn3D的方法即可。
15.物理引擎相关代码的修改,在一开始创建的时候,
local Scene = class(&Scene&, function()
return display.newPhysicsScene(&Scene&)
创建长方形的刚体,
local b = cc.PhysicsBody:createBox(cc.size(x, y))
b:getShape(0):setMass() & 设置重量
b:getShape(0):setRestitution() &设置弹力
b:setVelocity() 设置速度
如果我们想绑定精灵a到b上,即
a:setPhysicsBody(b)
16.在android上,device.cachePath改为device.writablePath
17.骨骼动画的play()方法去掉,改为playWithIndex
18.在android真机上编译的时候,我们要注意:
这里直接贴上github上的表格,
要启用这个功能,开发者需要打开项目中的&proj.android/jni/Application.mk&文件,然后将不需要的模块值改为&0。
CC_USE_CURL
使用 CURL 库提供 HTTP 网络功能。关闭后,assetsmanager等相关功能也会被去掉。quick 在 Android 下使用 Android 系统的 Java 接口提供 HTTP 网络功能,所以 CURL 关闭后仍然可以使用HttpRequest。
CC_USE_TIFF
使用 TIFF 图像格式。
CC_USE_WEBP
使用 WebP 图像格式。
CC_USE_JPEG
使用 JPEG 图像格式。
CC_USE_PHYSICS
使用物理引擎。
使用 3D 模块。
CC_USE_SQLITE
使用 Lua 的 Sqlite 数据库扩展 lsqlite3。
CC_USE_CCSTUDIO
使用 Cocos Studio 支持模块。
CC_USE_CCBUILDER
使用 Cocos Builder 支持模块。
CC_USE_SPINE
使用 Spine 支持模块。
CC_CODE_IDE_DEBUG_SUPPORT
使用 cocos IDE 调试支持模块。在 release 版本里自动关闭,因此没有统计它在release版本下的体积。
只需要在&Applicaiton.mk&中将相应的宏设置为&0,然后重新编译就可以得到更小的可执行文件。
在proj.android_no_anysdk工程中,以上可选模块均已经关闭。因此如果直接使用no_anysdk工程来编译,生成的apk包将不支持上述模块功能,如需要请自己修改相应的开关。
还有一些常用的基础模块可以去除,由于可能影响常用的功能,请根据自己的情况移除。打开文件 frameworks/runtime-src/Classes/lua_module_register.h ,分别注释掉以下语句:
register_cocosdenshion_module(L);
// 简单音效模块
register_network_module(L);
// 网络模块,如 socket 和 websocket
register_ui_moudle(L);
// 基础UI库,如编辑框等
register_extension_module(L);
// 基本扩展,如 TableView 等
register_audioengine_module(L);
// audio engine 模块
这里,如果我们发现编译后的包还是出现找不到sqlite3之类的错误,那么我们可以运行android项目下的clean.bat,然后再重新编译即可。
上面是自己在从quick2.2.5到3.3升级的过程中的一些理解,希望能有所帮助。
相关搜索:
相关阅读:
相关频道:
Android教程最近更新[Cocos2D-X ]初窥门径(8)判断精灵点击
在场景中添加几个精灵
mSprite1=CCSprite::create(&Sprite.png&);&
mSprite1-&setPosition(ccp(150,mSize.height/2));&
this-&addChild(mSprite1);&
mSprite2=CCSprite::create(&Sprite.png&);&
mSprite2-&setPosition(ccp(300,mSize.height/2));&
this-&addChild(mSprite2);&
&mSprite1=CCSprite::create(&Sprite.png&);
&mSprite1-&setPosition(ccp(150,mSize.height/2));
&this-&addChild(mSprite1);
&mSprite2=CCSprite::create(&Sprite.png&);
&mSprite2-&setPosition(ccp(300,mSize.height/2));
&this-&addChild(mSprite2);
判断点击的点是否在精灵自身的范围内,也就是判断是否点击了精灵:
void TouchScene::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)&&&
&&& CCPoint touchPoint=convertTouchToNodeSpace(pTouch);&
&&& if(mSprite1-&boundingBox().containsPoint(touchPoint))&
&&&&&&& CCMessageBox(&mSprite1 touched&,&&);&
&&& if(mSprite2-&boundingBox().containsPoint(touchPoint))&
&&&&&&& CCMessageBox(&mSprite2 touched&,&&);&
void TouchScene::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)&
&CCPoint touchPoint=convertTouchToNodeSpace(pTouch);
&if(mSprite1-&boundingBox().containsPoint(touchPoint))
&&CCMessageBox(&mSprite1 touched&,&&);
&if(mSprite2-&boundingBox().containsPoint(touchPoint))
&&CCMessageBox(&mSprite2 touched&,&&);
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。Quick cocos2dx-Lua(V3.3R1)学习笔记(六)----让精灵动起来吧,使用序列帧动画
时间: 23:41:26
&&&& 阅读:283
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&光有精灵太死板了,游戏里面肯定有不同的动画,难道人物走动,一张静态图就能打发对游戏质量要求越来越高的玩家么?所以我们要让精灵动起来
quick里面提供了使用序列帧动画的函数,我们直接使用就行了
现将大图载入缓存中,然后提取出来用即可
主要就是display,newFrames参数,这个有点string.format的味道
@function [parent=#display] newFrames
-- @param string pattern 模式字符串
-- @param integer begin 起始索引
-- @param integer length 长度
-- @param boolean isReversed 是否是递减索引
-- @return table#table ret (return value: table)
图像帧数组
使用时注意你的图片名格式就行了,比如你的事sprite001.png--sprite009.png,参数就是(&srite%00d.png&,1,9)
function MainScene:ctor()
display.addSpriteFrames("lqfRoleWalk.plist","lqfRoleWalk.png")
local sprite = display.newSprite("#lqfDownStop.png")
sprite:align(display.CENTER,display.cx,display.cy)
sprite:addTo(self)
sprite:setScale(2)
local frames = display.newFrames("lqfDownWalk%d.png",1,2)
local animation = display.newAnimation(frames,0.5/2)
--0.5s里面播放2帧
sprite:playAnimationForever(animation)
我们看到两张图,人物脚变化了(其实我是懒得截动态图了,哈哈哈哈,原谅我的懒惰)
但是我们不能用的时候才创建动画吧,我们还可以在进入场景前,把需要的动画新建好,存放到缓存中,用的时候直接调用名字即可
下面看代码
function MainScene:ctor()
display.addSpriteFrames("lqfRoleWalk.plist","lqfRoleWalk.png")
local sprite = display.newSprite("#lqfDownStop.png")
sprite:align(display.CENTER,display.cx,display.cy)
sprite:addTo(self)
sprite:setScale(2)
local frames = display.newFrames("lqfDownWalk%d.png",1,2)
local animation = display.newAnimation(frames,0.5/2)
display.setAnimationCache("lqfDownWalk",animation)
sprite:playAnimationForever(display.getAnimationCache("lqfDownWalk"))
我们这样将一个动画存放在缓存中,要用的时候再取出来。
好吧,本篇很短,但是可以旋转,哦,还没有旋转,下篇在写吧!O(&_&)O标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&& &&&&&&
&& && && &&
版权所有 鲁ICP备号-4
打开技术之扣,分享程序人生!quick-cocos2d-x(lua) 拖动精灵使其在屏幕移动的效果实现 - CSDN博客
(1)新建类TouchLayer
local TouchLayer=class(&TouchLayer&, function()
& & return display.newNode()
function TouchLayer:ctor(params)
-- self._func = params.func
player = params
& & self:init()
function TouchLayer:init()
local colorLayer=display.newColorLayer(ccc4(23,222,21,0))
self:addChild(colorLayer, 0)
-- 触摸事件
colorLayer:setTouchSwallowEnabled(true)
colorLayer:setTouchEnabled(true)
colorLayer:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE)
--cc.TOUCH_MODE_ALL_AT_ONCE 是多点触摸
--注册触摸事件
colorLayer:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)
& &if event.name == &began& then
print(&beganMask&)
return true
& &elseif event.name == &moved& then
local x1 = event.x
local y1 = event.y
local x2 = event.prevX
local y2 = event.prevY
local x = x1 - x2
local y = y1 - y2
if player:getPositionX() + x & 33 and player:getPositionX() + x & 287 and player:getPositionY() + y & 40 and player:getPositionY() + y & 440 then
player:setPosition(ccp(player:getPositionX() + x, player:getPositionY() + y))
print(&movedMask&)
elseif event.name == &ended& then
print(&endedMask&)
return true
return false
return TouchLayer
(2)在另一个类中调用
local touchlayer=TouchLayer.new(player)-------》player移动
self:addChild(touchlayer)}

我要回帖

更多关于 quickcocos 的文章

更多推荐

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

点击添加站长微信