zoukankan      html  css  js  c++  java
  • (转)quick cocos2dx学习记录

    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. local bg = display.newSprite("#OtherSceneBg.png")  
    2.     -- make background sprite always align top  
    3.     bg:setPosition(display.cx, display.top - bg:getContentSize().height / 2)  
    4.     self:addChild(bg)  



     

     

    文本:

     

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

     

     

    按钮

     

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



     

    飘字

     

    [html] view plain copy
     
    1. local miss = display.newSprite("#Miss.png")  
    2.                 :pos(bullet:getPosition())  
    3.                 :addTo(self, 1000)  
    4.             transition.moveBy(miss, {y = 100, time = 1.5, onComplete = function()  
    5.                 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

     

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

     

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

     

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

     

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


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

     

    [objc] view plain copy
     
    1. <span style="white-space:pre">    <span style="font-size:18px;">    </span></span><span style="font-size:18px;"> if checkOK then  
    2.                     for i,v in ipairs(self.fileList.stage) do  
    3.                        <span style="color:#ff0000;"> if v.act=="load" then  
    4.                             CCLuaLoadChunksFromZIP(self.path..v.name) --关键:提前load要修改的代码  
    5.                         end</span>  
    6.                     end  
    7.                     for i,v in ipairs(self.fileList.remove) do  
    8.                         removeFile(self.path..v)  
    9.                     end  
    10.                 else  
    11.                     removeFile(self.curListFile)  
    12.                 end  
    13.               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
  • 相关阅读:
    lr如何获取当前系统时间戳
    linux创建用户、设置密码、修改用户、删除用户
    Linux下安装load generator步骤及问题解决
    怎么将手动设定的IP变成固定的自动IP.
    Redis与Memcached的区别
    memcached 下载安装
    linux上传下载文件rz,sz
    oracle错误码
    sharepoint 2013 附件控件FileUpload怎样检验是否为图片的方法
    10gocm-&gt;session3-&gt;数据备份与恢复
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/9103838.html
Copyright © 2011-2022 走看看