quick cocos2dx学习记录

原文链接:http://www.jb51.cc/article/p-tbhttljg-kx.html

sprite :

:IsVisible()是否可见

:getPosition()返回x,y

:getContentSize().width

:getContentSize().height高

对于父节点居中

setPosition(parent:getContent().width/2,parent:getContent().height/2) --父节点中心


居中显示:元件宽、高=WIDTH、HEIGHT

self.mSprite:align(display.CENTER,display.cx - WIDTH,display.cy - HEIGHT)


滑动切换页面组件:(Sample里的TestUIpageViewScene.lua 比较详细)

cc.ui.UIPageView.new{..}

列表组件:(Sample里的TestUIListViewScene.lua 比较详细)

cc.ui.UIListView.new{...}

Grid组件;可用ListView实现,每个item就是N个相同的node组成的

UICheckBoxButton 开关

UICheckBoxButtonGroup 单选框 可实现tab

延迟delay执行函数:

node:performWithDelay(callback,delay)


图片、背景:

[html] view plain copy
  1. localbg=display.newSprite("#OtherSceneBg.png")
  2. --makebackgroundspritealwaysaligntop
  3. bg:setPosition(display.cx,display.top-bg:getContentSize().height/2)
  4. self:addChild(bg)

文本:

    cc.ui.UILabel.new({text="--"..title.."--",size=24,color=display.COLOR_BLUE})
  1. :align(display.CENTER,display.cx,display.top-20)
  2. :addTo(scene)

按钮

[python]
    cc.ui.UIPushButton.new("Button01.png",{scale9=true})
  1. :setButtonSize(200,80)
  2. :setButtonLabel(cc.ui.UILabel.new({text="REFRESH"}))
  3. :onButtonPressed(function(event)
  4. event.target:setScale(1.1)
  5. end)
  6. :onButtonRelease(function(event)
  7. event.target:setScale(1.0)
  8. end)
  9. :onButtonClicked(function()
  10. app:enterScene("MainScene",nil,"flipy")
  11. :pos(display.cx,display.bottom+100)
  12. :addTo(self)

飘字

    localmiss=display.newSprite("#Miss.png")
  1. :pos(bullet:getPosition())
  2. :addTo(self,1000)
  3. transition.moveBy(miss,{y=100,time=1.5,onComplete=function()
  4. miss:removeSelf()



消息分发处理:

HERO.LUA

self:dispatchEvent({name = Hero.EXP_CHANGED_EVENT})

HEROVIEW.LUA

cc.EventProxy.new(hero,self)
:addEventListener(cls.CHANGE_STATE_EVENT,handler(self,self.onStateChange_))
:addEventListener(cls.KILL_EVENT,self.onKill_))
:addEventListener(cls.HP_CHANGED_EVENT,self.updateLabel_))
:addEventListener(cls.EXP_CHANGED_EVENT,self.updateLabel_))


网络请求 httprequest

    <spanstyle="white-space:pre"></span>--创建一个请求,并以POST方式发送数据到服务端
  1. localurl="http://www.mycompany.com/request.php"
  2. localrequest=network.createHTTPRequest(onRequestFinished,url,"POST")
  3. request:addPOSTValue("KEY","VALUE")
  4. --开始请求。当请求完成时会调用callback()函数
  5. request:start()
    functiononRequestFinished(event)
  1. localok=(event.name=="completed")
  2. localrequest=event.request
  3. ifnotokthen
  4. --请求失败,显示错误代码和错误消息
  5. --print(request:getErrorCode(),request:getErrorMessage())
  6. return
  7. end
  8. localcode=request:getResponseStatusCode()
  9. ifcode~=200then
  10. --请求结束,但没有返回200响应代码
  11. --print(code)
  12. return
  13. end
  14. --请求成功,显示服务端返回的内容
  15. localresponse=request:getResponseString()
  16. print(response..'AAAresponse')
  17. app:enterHallScene()
  18. end


在Quick中要导入其他的类可以用require也可以用import,使用可以使用相对路径来载入,使用require就必须要把完整的路径写出来,详细的解析可以看framework下的functions.lua里面的import的实现


场景类的创建以及层Layer的添加(MainScene.lua)

[ruby]
    localMainScene=class("MainScene",function()
  1. returndisplay.newScene("MainScene")
  2. end)
  3. --相当于C++中的构造函数
  4. functionMainScene:ctor()
  5. --将背景设置为白色,而且这个作为当前场景的层,以便以后实现触摸事件
  6. self.touchLayer_=display.newColorLayer(cc.c4b(255,255)):addTo(self)
  7. end
  8. functionMainScene:onEnter()
  9. end
  10. :onExit()
  11. returnMainScene

    --添加忍者精灵
  1. self.player_=display.newSprite("Player.png")self.touchLayer_)
  2. self.player_:pos(:getContentSize().width/2,display.height/2)--左侧中间
  3. --初始化存储飞镖和敌人(怪物)的数组
  4. self.projectiles_={}
  5. self.monsters_={}
  6. --<spanstyle="color:#ff0000;">添加每帧刷新的方法</span>
  7. self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT,handler(self,self.update))
  8. :scheduleUpdate()

1源文件编译及加密:http://my.oschina.net/lonewolf/blog/178515

:将所有代码编译成二进制文件(所有代码文件名包含路径名)打包成gama.zip后放在/res资源路径下面,移除原有scripts文件夹下的代码。
AppDelegate .cpp 中添加game.zip即可

2基于(1)加密打包后的热更原理:http://my.oschina.net/SunLightJuly/blog/180639

关键:更改关键函数的调用顺序

在scripts目录下创建一个新文件appentry.lua,然后打开工程原来的main.lua文件,把里面调用程序入口的代码复制过来。如果你使用的是最新版的quick-x,那么就只有“require("app.MyApp").new():run()”这一句。保存appentry.lua文件。
现在修改main.lua文件,去掉原来的程序入口代码,改成“require "update"”。这样,更新模块就添加好了。程序在启动时,将先运行更新模块,完成后,自动调用appentry进入原来程序的真正入口,也就是更新后的版本了

endProcess():

[objc]
    <spanstyle="white-space:pre"><spanstyle="font-size:18px;"></span></span><spanstyle="font-size:18px;">ifcheckOKthen
  1. fori,vinipairs(self.fileList.stage)do
  2. <spanstyle="color:#ff0000;">ifv.act=="load"then
  3. CCLuaLoadChunksFromZIP(self.path..v.name)--关键:提前load要修改的代码
  4. end</span>
  5. self.fileList.remove)do
  6. removeFile(self.path..v)
  7. else
  8. removeFile(self.curListFile)
  9. end</span>

由于下载路径不变,所以如果要更新资源的话:将代码中的资源路径修改为

GAME_TEXTURE_DATA_FILENAME = device.writablePath.."game.plist"
2 GAME_TEXTURE_IMAGE_FILENAME = device.writablePath.."game.png"

已经require过的模块的更新

loadChunksFromZIP是可以多次调用的,而且如果第二次载入的包中的代码模块与之前载入的模块有重名,新的模块会覆盖旧的模块。

由于require不会重复加载一个文件,所以如果要更新一个已经加载的文件,在加载前package.loaded["config"] =nil


骨骼动画

例如一个菊花:如果你是一个团队,那么叫美术负责做就是了,自己弄这个没什么必要。如果闲的有兴致,可以去看下 http://cn.cocos2d-x.org/tutorial/show?id=847。如果想简单实现,自己弄几个光线sprite,旋转循环播放就是了。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...