二、lua语言基础2

1.lua的类型有哪些?
答:lua的数据类型有:number,string,nil function,table,thread,userdata(用户自定义的类型),boolean(布尔类型) 
2.什么是尾调用,尾调用有什么优点
尾调用:在一个函数的最后一步开始调用另外一个函数,
优点:直接调用一个函数,不需要额外的堆栈空间,防止栈的溢出,节省空间


3.什么是闭合函数,闭合函数有什么作用,handler的作用
答:闭合函数
举例:


function count()


    local i = 0;


    return function()


              i = i + 1;


              return i;


           end


end


以下是输出的数据




    local func = count();


    print(func());


    print(func());


    print(func());
对应的是
1
2
3


闭合函数:一个函数加上该函数所需要访问的所有的“非局部变量”
count() 函数就是一个闭合函数   ,闭合函数可以节省空间,更新变量的值


handler:将lua  对象和其方法包装为一个匿名的函数,然后再特定事件发生时就会掉那个传入的函数
例如触摸、帧事件


4.lua的__index
答:,当我们访问一个表中的元素不存在时,则会除法区寻找__index元方法(可以是函数或者表),
若存在 ,就返回  否则返回nil






5.lua的__newindex
答:访问表中的元素不存在的时候,会触发寻找__newindex元方法()可以是表或者函数,执行该方法进行赋值




6.lua有真正的面向对象的语言吗?
答:不是,是模拟面向对象的语言




7.怎么向table中添加一个元素,使用库函数
t = {4,5,6}
table.insert(t,2,100)—-参数依次是  需要添加的表,添加的位置,添加的值
for i,v in ipairs(t) do
print(i,v)
end
8.怎么向table中移除一个元素,使用库函数
t = {4,5,6}
table.remove(t,1)
for i,v in ipairs(t) do
print(i,v)
end




9.quick中定时器怎么使用
答:
local schedule = cc.Director:getInstance():getScheduler()
self.id = schedule:scheduleScriptFunc(handler(self, self.createZombies), 1.0, false)








10.物理引擎的碰撞筛选?


答:

local  pl = cc.EventListenerPhysicsContact:create();
pl:registerScriptHandler(handler(self, self.onContactBegan),cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN);
d:addEventListenerWithSceneGraphPriority(pl, self);




body:setGroup(-10) -- 设置组
body:setCategoryBitmask(1) -- 类别
body:setCollisionBitmask(1) -- 碰撞
body:setContactTestBitmask(1) -- 碰撞监听
a = A.setCategoryBitmask & B.setCollisionBitmask
a = B.setCategoryBitmask & A.setCollisionBitmask
-- a, b都非零 发生碰撞
a = A.setCategoryBitmask & B.setContactTestBitmask
a = B.setCategoryBitmask & A.setContactTestBitmask
-- a, b都非零 监听函数调用




11.Cocos2dx内存管理
答:在堆上分配一块内存,这个对象的引用计数就是1;
当有对象要引用这块内存空间的时候,对这块内存retain一次,引用计数就增加1;
当不再引用这块内存的时候,对这块内存release一次,引用计数就减1;
当这个引用计数减为0的时候就使用delete删除掉这块内存;
当调用了autorelease方法以后,我们的对象就会放到这个内存回收池中而不会进行release,当一帧结束的时候这个自动释放池就会释放掉,这个时候在自动释放池中的所有对象就会被release一下,引用计数就会减一,如果这个时候引用计数为0,就会被删除
12.缓存的作用
以空间换时间,提前加载,减少访问时间
13.为什么将小图合成大图
答:因为计算机的存储方式是以2的n次方为单位,所以将小图合成大图可以节省空间
将小图合成大图还可以减少渲染时间
14.结构体 {
int a;—4
long b;—4
char c;—-4
}
在32位操作系统占多少内存,写出计算过程
答:12byte


15.网络分层,每层的作用
物理层和链路层:解决相邻节点的单跳接入问题,就是保证相连(有线网络)或者相邻(无线网络)的节点可以相互发送数据比特;
网络层:负责多跳的路由选择问题(也就是收到一个数据包后判断是否是自己的,如果不是应该发往相连的哪个节点);
传输层:只在目的和源两个节点起作用,用于保证传输质量、流量控制、跟上层应用交互等;
应用层:主要是各种应用程序(或者说操作系统中进行通信的进程),比如浏览器浏览网页、qq通信、电子邮件等
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值