cocos2dx 触摸吞噬的实现

我这里设置优化的文本域组件,然后添加一个layer来覆盖它,来看看实际效果

添加imageview图片背景

auto image = ImageView::create("platformlogin_write.png");
image->setPosition(Vec2(100, 200));
image->setAnchorPoint(Vec2(0, 0));
image->setTouchEnabled(true);
image->setTag(10);
image->addTouchEventListener(this, toucheventselector(HelloWorld::onTouchExhcangeTextBg));
addChild(image,0);

//触摸函数实现使文本域获得焦点

void HelloWorld::onTouchExhcangeTextBg(Ref *target, TouchEventType type)
{
if (type != TouchEventType::TOUCH_EVENT_ENDED) return;
txtUser->attachWithIME();
}


添加文本域

txtUser = TextField::create();
txtUser->setFontSize(25);
txtUser->setPlaceHolder("11  ");
txtUser->setAnchorPoint(Vec2(0, 0));
txtUser->setMaxLength(11);
txtUser->setMaxLengthEnabled(true);
txtUser->setPosition(Vec2(100, 200));

this->addChild(txtUser, 0);

添加layer层级

auto layer = LayerColor::create();
layer->setContentSize(visibleSize);
layer->setPosition(Vec2::ZERO);
layer->setColor(ccColor3B::GREEN);
layer->setOpacity(120);
addChild(layer,30);

添加监听事件

auto lis = EventListenerTouchOneByOne::create();
lis->setSwallowTouches(true);
lis->onTouchBegan = [](Touch*t, Event*e)
{
return true;
};
//Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(lis, this);//这个函数我试了下,不能使用this,要使用对应的层layer也可以实现效果
Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(lis, -1);//此处必须是小于0的一个数字

setSwallowTouches这个函数就是用来控制触摸吞噬的,设置false为不吞噬,设置true就可以保证上层的对象获取完触摸事件后不往下传递

设置true文本域无法触发触摸事件


设置false文本域可以获得触摸事件



猜你喜欢

转载自blog.csdn.net/qq_20686495/article/details/78412189