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通信、电子邮件等