quik讲解-2

1:  local AdBar = import( "..views.AdBar” )
import  require 功能一样, 只不过require要使用绝对路径

2:  local function 与局部变量等效的作用域

3:  lua 优点:
    -- 弱类型     (类型随时可以动态改变,)
    -- 省略声明   (像C++必须要一个.h文件声明, 但lua只有一个.lua实现文件 )
    -- 在线更新   (可以绕过苹果的审核 — 最主要的原因)
4:	弱类型的语言的东西没有明显的类型,他能随着环境的不同,自动变换类型
	而强类型则没这样的规定,不同类型间的操作有严格定(C#就是一个强类型语言)
	弱类型语言vbs:
 a=1
 b=a+"1"+"a" //结果是11a,这里 a 成了字符串
 c=a+1 //结果是2 ,这里a则是数字型
5: 想这种不是类如何调用函数: 等价于 action["delay"] = func匿名函数
action = {}  — 不是个类,是个表/模块

function action.delay( time, func )
	local node = cc.Node:create() 。。。
6:  :  。不管函数声明用神魔:只用记住
sp:setVisible(false)  — 冒号默认隐藏第一个参数,化为.是, 把调用者加上
sp.setVisible(sp,false)  
  之间的转化,时等效的。  是sp 不是self—sp.setVisible(self,false)
例子:1
function tab.func(a,b,c,d )
	-- body
	print(value)
end

function tab:func2( value )
	print(self) --1
end
-- tab:func(1,2,3,4)
-- tab.func(tab,1,2,3,4); — 用点声明用点调用/用:声明用:调用最简单了,一一对应即可

-- tab.func2(tab,1)   —- 不一定要传调用者, 用到了self才传得 (5的答案action.delay(0.5,fun))
)
 例子:2
tab = {x = 1};
    function tab:func1( value)
      print(value)
    end
tab.func1(1);   — 输出nil
例子:3
  1. a = { x = 1 }  
  2. function a.fun(self)   
  3. print(self.x)  
  4. end  

  5. a.fun(a)--输出1,将a自己做为参数传给fun函数的self  

--------------------------------------------官方教程------------------------------------------------------

一、基础的main.lua、config.lua 和MyApp.lua

1 : 先打开src下的main.lua

-- 启动后执行MyApp脚本, 并执行当中的 run() 方法
require( "app.MyApp" ). new ():run()
每个新建的工程的main.lua都一样,不需要改动,我们只要知道它是程序lua脚本的启动文件就够了。接着我们沿着最后一句代码 require("app.MyApp").new():run() ,打开MyApp.lua, 观察当中的run()方法

2:ctor() 相当于构造函数 或者说 是Cococs2d-x里的init(),一旦new,就会调用ctor() ,

3: 在Quick中使用图片,如果使用的图片是以#开头的话表示是从SpriteFrameCache中读取,如果没有使用#开头的话表示是直接从文件读取。(还记得在MyApp.lua中我们已经加载了图片缓存了吗?)

----------------------------------------------------------------------------------------------------

1 : 2者只是结构上等价, 功能不等价。  不能用.new()函数

2:   定义类:
   Hero = class("Hero",function ( )                    
          return cc.Sprite:create()                ---  C++原生API :
end)
local   Bullet = class( "Bullet" function ()     
    return  display.newSprite("1.png”);    — 浅封装的一层
end );

上面的代码中添加了一个以CCSprite为基类的Player类。在Quick中添加新的类的方式就是这么简单

3:比如我们想要新建一个精灵,我们会调用display.newSprite,类似的接口还有display.newLayer。基本的格式都是display.newXXX,"XXX"包括sprite、layer、node、scene等,详细的可以查看display文
------------------------------------------------------------------------------

一.tolua++简介
      tolua++是一种第三方的软件包,可以为Lua提供面向对象的特性,这样我们就可以使用Lua来编写使用C++语言库的脚本文件.

2:  找不到对应的接口咋办:
 打开Xcode搜索, 搜素时要加“”否则太多了
------------------------------------------------------------------------------------------------

1.  这两种写法是没差别的

  lua中的函数可以被存放在变量、表中,也可以作为函数的参数,还可以作为函数的返回值,如:

      func = function()

        print("Hello");

      end

  等价于

      function func()

      print("Hello");      end

  这两种写法都是函数func()的定义;

COMAND +SHIFT + Z  前进

2:区别 : 一个遍历数组部分, 一个遍历所有

 for i,v in ipairs(fnsß) do

  print(i,v)

end

for k,v in pairs(table_name) do

  print(k,v)

end

3:A          函数的局部变量是可以保存在函数内部的,通过调用该函数内嵌的函数可以获取并修改局部变量的值,该函数的局部变量(upvalue)和内嵌函数的组合使用,形成了闭包,这看起来与C++中类的成员变量有些类似。函数具有闭包的功能后,不必再担心其局部变量没办法保存了,这一点对程序员的影响是很大的。

 B:   function func()

        return function()  print("Hello");  end  --函数作为返回值 直接return不能加函数函数名字 syntax

      end              — return 函数名字也可以

不对改为:

   function add( )

    function show( )  print("...hello”)    end  — 这时候加函数名字  不能匿名了
  return show

   end

add();  调用后只是返回一个函数指针变量   会输出”heelo”吗?

C:

function add( )

  local a = 1

  local function show( )  a = a+1           print(a)    end
  show()       — return show     add()();  完全不同了

end

add();   — 只调用了add函数,没有调用show()函数  2


D:

function add( )

  local a = 1               — 此时作用域  chunk

  local function show( … )    end

end

4: 闭包函数: 函数作为返回值    优点:

    function func()

        return function()  print("Hello");  end  --函数作为返回值

      end

      local f1 = func();

      print(f1);            --运行结果:function:00379738

      f1();              --运行结果:Hello

  是函数作为函数返回值的情况,其中f1是func()内部返回的函数,打印出来为函数在内存中的地址,f1()调用了内部函数,执行后打印出了"Hello"结果。


************************************************************************************************
1:
local  MainScene = class("MainScene", function() ----- ????
    return display.newScene("MainScene")
end)

function MainScene:onExit()
end
function MainScene:ctor()
end

return MainScene    ---  ???   因为是local(本文家)所以要return , 去掉local就可以不要return

-- MainScene = {            — 这种方式是 与上面是等价的
-- ctor = function ( )                    
-- -- body
-- end,
-- onExit = function ( )        — 匿名函数                
-- -- body
-- end,
-- new = function (  )                — 300行function.lua文件中 包含了ctor
-- -- body
-- end
-- }

-- local c = xxx
-- c.onExit
-- c.ctor

2:

function MainScene:ctor()
    -- cc.ui.UILabel.new({
    --         UILabelType = 2, text = "Hello, World", size = 64})             — 这种Lua 封装的
    --     :align(display.CENTER, display.cx, display.cy)
    --     :addTo(self)
    print(cc)
    local label = cc.Label:createWithSystemFont("Hello, World","",64)    —  cococs2dx 的
    label:setPosition(cc.p(display.cx, display.cy))
    self:addChild(label)
-- print(require("app.scenes.class_test”))
3:
self.a= 4     成员变量  直接定义
-- local  _bg = cc.Sprite(); 
-- self:addChild();
end

4:
scene.a 
a = 4         全局变量放在一个_G表中,
print(_G["a”]) — 或者_G.a      访问
文件也
5:
require("app.MyApp").new():run()  — .new()不要self    — print()输出table是个表 “safdsa”、1
说明: require 返回一个值;
去掉local 只用包含一次就行了, 之后再用MAinScene只要内存中存在,就不用在include了; 
当  引用计数=0时; 垃圾回收机制会自动销毁; cocos2d-x retainCount =0
6:
CC  是个table包含了常用的, 都可以用CC.找到  
  cc.Label:createWithSystemFont("Hello, World","",64)   — setPosition(cc.p(display.cx, display.cy))
**********************************************************************************************************
1:Quick框架中的display文件,里面放的是与显示相关的部分接口

2:比如我们想要新建一个精灵,我们会调用display.newSprite
2:类似的接口还有display.newLayer。基本的格式都是display.newXXX,"XXX"包括sprite、layer、node、scene等,详细的可以查看display文件。

3:在Quick中使用图片有个规则,如果使用的图片是以#开头的话表示是从SpriteFrameCache中读取,如果没有使用#开头的话表示是直接从文件读取。
打开Player.lua文件,添加以下内容:
local Player = class("Player", function()   -- ?
    local sprite = display.newSprite("#player1-1-1.png")
    return sprite
end)

function Player:ctor()
end
return Player   

4:在Quick中创建一个类很简单,廖大已经给我们留好了一个class方法,只需要使用这个方法就能轻松的创建一个类。我们来看下具体的创建方式: 首先第一句:
打开Quick的functions.lua文件,里面有class方法的具体实现

5:现在,我们知道了显示层级、触摸区域,那么要让任何 CCNode 都可以接受触摸事件就变得很简单了:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值