您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

quick cocos2dx学习记录

2025/1/19 8:39:50发布14次查看
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,旋转循环播放就是了。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product