视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
quickcocos2dx学习记录
2020-11-09 08:31:52 责编:小采
文档

sprite : :IsVisible()是否可见 :getPosition()返回x,y :getContentSize().width :getContentSize().height高 对于父节点居中 setPosition(parent:getContent().width/2,parent:getContent().height/2) --父节点中心 居中显示:元件宽、高=WIDTH、HEIGHT sel

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

	 -- 创建一个请求,并以 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_ = {}
 
 -- 添加每帧刷新的方法
 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():

	 if checkOK then
 for i,v in ipairs(self.fileList.stage) do
 if v.act=="load" then
 CCLuaLoadChunksFromZIP(self.path..v.name) --关键:提前load要修改的代码
 end
 end
 for i,v in ipairs(self.fileList.remove) do
 removeFile(self.path..v)
 end
 else
 removeFile(self.curListFile)
 end
 end

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

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,旋转循环播放就是了。

下载本文
显示全文
专题