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)
图片、背景:
- local bg = display.newSprite("#OtherSceneBg.png")
- -- make background sprite always align top
- bg:setPosition(display.cx, display.top - bg:getContentSize().height / 2)
- self:addChild(bg)
文本:
- cc.ui.UILabel.new({text = "-- " .. title .. " --", size = 24, color = display.COLOR_BLUE})
- :align(display.CENTER, display.cx, display.top - 20)
- :addTo(scene)
按钮
- cc.ui.UIPushButton.new("Button01.png", {scale9 = true})
- :setButtonSize(200, 80)
- :setButtonLabel(cc.ui.UILabel.new({text = "REFRESH"}))
- :onButtonPressed(function(event)
- event.target:setScale(1.1)
- end)
- :onButtonRelease(function(event)
- event.target:setScale(1.0)
- end)
- :onButtonClicked(function()
- app:enterScene("MainScene", nil, "flipy")
- end)
- :pos(display.cx, display.bottom + 100)
- :addTo(self)
飘字
- local miss = display.newSprite("#Miss.png")
- :pos(bullet:getPosition())
- :addTo(self, 1000)
- transition.moveBy(miss, {y = 100, time = 1.5, onComplete = function()
- 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, handler(self, self.onKill_))
:addEventListener(cls.HP_CHANGED_EVENT, handler(self, self.updateLabel_))
:addEventListener(cls.EXP_CHANGED_EVENT, handler(self, self.updateLabel_))
网络请求 httprequest
- <span style="white-space:pre"> </span> -- 创建一个请求,并以 POST 方式发送数据到服务端
- local url = "http://www.mycompany.com/request.php"
- local request = network.createHTTPRequest(onRequestFinished, url, "POST")
- request:addPOSTValue("KEY", "VALUE")
-
- -- 开始请求。当请求完成时会调用 callback() 函数
- request:start()
- function onRequestFinished(event)
- local ok = (event.name == "completed")
- local request = event.request
- if not ok then
- -- 请求失败,显示错误代码和错误消息
- -- print(request:getErrorCode(), request:getErrorMessage())
- return
- end
-
- local code = request:getResponseStatusCode()
- if code ~= 200 then
- -- 请求结束,但没有返回 200 响应代码
- --print(code)
- return
- end
-
- -- 请求成功,显示服务端返回的内容
- local response = request:getResponseString()
- print(response..'AAAresponse')
- app:enterHallScene()
- end
在Quick中要导入其他的类可以用require
也可以用import
,使用import
可以使用相对路径来载入,使用require
就必须要把完整的路径写出来,详细的解析可以看framework下的functions.lua里面的import的实现
场景类的创建以及层Layer的添加(MainScene.lua)
- local MainScene = class("MainScene", function()
- return display.newScene("MainScene")
- end)
-
- -- 相当于C++中的构造函数
- function MainScene:ctor()
- -- 将背景设置为白色,而且这个作为当前场景的层,以便以后实现触摸事件
- self.touchLayer_ = display.newColorLayer(cc.c4b(255,255,255,255)):addTo(self)
- end
-
- function MainScene:onEnter()
- end
-
- function MainScene:onExit()
- end
-
- return MainScene
- --添加忍者精灵
- self.player_ = display.newSprite("Player.png"):addTo(self.touchLayer_)
- self.player_:pos(self.player_:getContentSize().width / 2 , display.height / 2)--左侧中间
-
- -- 初始化存储飞镖和敌人(怪物)的数组
- self.projectiles_ = {}
- self.monsters_ = {}
-
- -- <span style="color:#ff0000;">添加每帧刷新的方法</span>
- self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT,handler(self , self.update))
- self: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():
- <span style="white-space:pre"> <span style="font-size:18px;"> </span></span><span style="font-size:18px;"> if checkOK then
- for i,v in ipairs(self.fileList.stage) do
- <span style="color:#ff0000;"> if v.act=="load" then
- CCLuaLoadChunksFromZIP(self.path..v.name) --关键:提前load要修改的代码
- end</span>
- end
- for i,v in ipairs(self.fileList.remove) do
- removeFile(self.path..v)
- end
- else
- removeFile(self.curListFile)
- end
- 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,旋转循环播放就是了。
原文地址:https://blog.csdn.net/zx84289061/article/details/40959819