# 坐标
默认以左下角为原点计算坐标
# clone函数的使用
能被clone
的对象必须是Widget
的子类,否则无效
精灵(Sprite
)并不继承自Widget
,所以它不能被clone
,Node
同理
# ListView
- 子节点必须是
Widget
的子类 - 常用方法:
-- 1.设置滚动条不启用
listView:setScrollBarEnabled(false)
-- 2.获取内部滚动容器的位置(可用来计算子节点相对位置)
--[[
子节点相对位置的判断,也可通过子节点坐标转化为世界坐标(convertToWorldSpace),
再转变为其他子节点下的本地坐标(convertToNodeSpace)来计算
]]
listView:getInnerContainerPosition()
-- 3.设置Text显示宽度,比如自动换行
text:setTextAreaSize(cc.size(100, 0))
-- 4.设置图片大小为原始尺寸,不固定大小
img:ignoreContentAdaptWithSize(true)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 注册点击事件
- 方式一:节点必须继承自
Widget
组件
self.widgetNode:addTouchEventListener(function(sender, state)
if state == 0 then
print("start")
elseif state == 1 then
print("move")
elseif state == 2 then
print("ended")
else -- 3
print("canceled")
end
end)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 方式二:这种方式比较复杂点,针对
Node
都可以
-- 触摸开始
local function onTouchBegan(touch, event)
-- 只有当onTouchBegan的返回值是true时才执行后面的两个触摸事件
return true
end
local function onTouchMove(touch, event)
-- 获取点击位置
local location = touch:getLocation()
print(location.x .. " "..location.y)
end
-- 触摸结束
local function onTouchEnd(touch, event)
-- 获取点击位置
local location = touch:getLocation()
print(location.x .. " "..location.y)
end
local listener = cc.EventListenerTouchOneByOne:create()
-- 注册两个回调监听方法
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
listener:registerScriptHandler(onTouchMove,cc.Handler.EVENT_TOUCH_MOVED)
listener:registerScriptHandler(onTouchEnd,cc.Handler.EVENT_TOUCH_ENDED)
listener:registerScriptHandler(onTouchEnd,cc.Handler.EVENT_TOUCH_CANCELLED)
local eventDispatcher = cc.Director:getInstance():getEventDispatcher()-- 事件派发器
-- 绑定触摸事件到层当中
-- node:监听器的优先级基于此节点的绘制顺序。
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, node)
-- 移除事件
-- eventDispatcher:removeEventListener(listener)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31