quickcocos2dx 学习系列之十三 触摸Word文档下载推荐.docx
- 文档编号:22351341
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:21
- 大小:22.70KB
quickcocos2dx 学习系列之十三 触摸Word文档下载推荐.docx
《quickcocos2dx 学习系列之十三 触摸Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《quickcocos2dx 学习系列之十三 触摸Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
sprite.label=label
returnsprite
end
划BOX框
functiondrawBoundingBox(parent,target,color)
localcbb=target:
getCascadeBoundingBox()
localleft,bottom,width,height=cbb.origin.x,cbb.origin.y,cbb.size.width,cbb.size.height
localpoints={
{left,bottom},
{left+width,bottom},
{left+width,bottom+height},
{left,bottom+height},
}
localbox=display.newPolygon(points,{borderColor=color})
parent:
addChild(box,1000)
1.1响应触摸事件
调用该函数:
self.sprite=createTouchableSprite({
image="
WhiteButton.png"
size=cc.size(500,300),
label="
TOUCHME!
"
labelColor=cc.c3b(255,0,0)})
:
pos(display.cx,display.cy)
addTo(self)
drawBoundingBox(self,self.sprite,cc.c4f(0,1.0,0,1.0))
--启用触摸
self.sprite:
setTouchEnabled(true)
addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)
--event.name是触摸事件的状态:
began,moved,ended,cancelled
--event.x,event.y是触摸点当前位置
--event.prevX,event.prevY是触摸点之前的位置
locallabel=string.format("
sprite:
%sx,y:
%0.2f,%0.2f"
event.name,event.x,event.y)
self.sprite.label:
setString(label)
--返回true表示要响应该触摸事件,并继续接收该触摸事件的状态变化
returntrue
end)
单点触摸是最直接的使用方式了。
1.2事件穿透和事件捕获
--创建底层触摸层
self.parentButton=createTouchableSprite({
size=cc.size(600,500),
self.parentButton.name="
parentButton"
drawBoundingBox(self,self.parentButton,cc.c4f(0,1.0,0,1.0))
self.parentButton:
--给该触摸层增加监听
parentButton:
self.parentButton.label:
--在底层创建button1,button1响应触摸后,会吞噬掉触摸事件
self.button1=createTouchableSprite({
GreenButton.png"
size=cc.size(400,160),
})
pos(300,400)
addTo(self.parentButton)
cc.ui.UILabel.new({text="
SWALLOW=YES\n事件在当前对象处理后被吞噬"
size=24})
align(display.CENTER,200,90)
addTo(self.button1)
drawBoundingBox(self,self.button1,cc.c4f(1.0,0,0,1.0))
self.button1:
setTouchSwallowEnabled(true)--是否吞噬事件,默认值为true
self.button1:
button1:
self.button1.label:
--在底层创建button2,响应触摸后,不会吞噬掉触摸事件
self.button2=createTouchableSprite({
PinkButton.png"
pos(300,200)
SWALLOW=NO\n事件会传递到下层对象"
addTo(self.button2)
drawBoundingBox(self,self.button2,cc.c4f(0,0,1.0,1.0))
self.button2:
setTouchSwallowEnabled(false)--当不吞噬事件时,触摸事件会从上层对象往下层对象传递,称为“穿透”
self.button2.label:
事件穿透通过函数setTouchSwallowEnabled来实现。
如下函数设置是否捕捉触摸
setTouchCaptureEnabled(button:
isButtonSelected())
1.3在事件捕获阶段决定是否接受事件
--这个标志变量用于在触摸事件捕获阶段决定是否接受事件
self.isTouchCaptureEnabled_=true
--parentButton是button1的父节点
self.parentButton=createTouchableSprite({
self.parentButton.label2=cc.ui.UILabel.new({text="
size=24,color=cc.c3b(0,0,255)})
align(display.CENTER,300,60)
self.parentButton:
printf("
%s%s[TARGETING]"
"
event.name)
ifevent.name=="
ended"
orevent.name=="
cancelled"
then
print("
-----------------------------"
)
else
end
--可以动态捕获触摸事件,并在捕获触摸事件开始时决定是否接受此次事件
addNodeEventListener(cc.NODE_TOUCH_CAPTURE_EVENT,function(event)
began"
parentButtonCAPTURE:
self.parentButton.label2:
%s%s[CAPTURING]"
moved"
returnself.isTouchCaptureEnabled_
--button1响应触摸后,会吞噬掉触摸事件
button1"
--button2响应触摸后,不会吞噬掉触摸事件
button2"
--即便父对象在捕获阶段阻止响应事件,但子对象仍然可以捕获到事件,只是不会触发事件
--放置一个开关按钮在屏幕上
locallabels={}
labels[true]="
父对象【可以】捕获触摸事件"
labels[false]="
父对象【不能】捕获触摸事件"
localimages={on="
CheckBoxButton2On.png"
off="
CheckBoxButton2Off.png"
}
self.captureEnabledButton=cc.ui.UICheckBoxButton.new(images)
setButtonLabel(cc.ui.UILabel.new({text=labels[true],size=24}))
setButtonLabelOffset(40,0)
setButtonSelected(true)
onButtonStateChanged(function(event)
localbutton=event.target
button:
setButtonLabelString(labels[button:
isButtonSelected()])
onButtonClicked(function(event)
self.isTouchCaptureEnabled_=button:
isButtonSelected()
pos(display.cx-160,display.top-80)
cc.ui.UILabel.new({
text="
事件处理流程:
\n1.【捕获】阶段:
从父到子\n2.【目标】阶段\n3.【传递】阶段:
尝试传递给下层对象"
size=24})
align(display.CENTER_TOP,display.cx,display.top-120)
其中NODE_TOUCH_EVENT和NODE_TOUCH_CAPTURE_EVENT表示两种事件。
在NODE_TOUCH_CAPTURE_EVENT的处理函数中返回真假,然后决定是否调用NODE_TOUCH_EVENT的处理函数。
1.4容器的触摸区域由子对象决定
创建一个node,在node上增加几个精灵,精灵的局域决定的触摸的范围。
--touchableNode是启用触摸的Node
self.touchableNode=display.newNode()
self.touchableNode:
setPosition(display.cx,display.cy)
self:
addChild(self.touchableNode)
--在touchableNode中加入一些sprite
localcount=math.random(3,8)
localimages={"
BlueButton.png"
fori=1,countdo
localsprite=display.newScale9Sprite(images[math.random(1,4)])
setContentSize(cc.size(math.random(100,200),math.random(100,200)))
setPosition(math.random(-200,200),math.random(-200,200))
addChild(sprite)
self.stateLabel=cc.ui.UILabel.new({text="
self.stateLabel:
align(display.CENTER,display.cx,display.top-100)
addChild(self.stateLabel)
--启用触摸
--添加触摸事件处理函数
touchableNode:
drawBoundingBox(self,self.touchableNode,cc.c4f(0,1.0,0,1.0))
2.多点触摸
2.1响应触摸事件
--createTouchableSprite()定义在includes/functions.lua中
self.sprite=createTouchableSprite({
size=cc.size(500,600),
locallabelPoints=cc.ui.UILabel.new({text="
align(display.CENTER_TOP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- quickcocos2dx 学习系列之十三 触摸 学习 系列 十三