cocos2d中的触摸监听
发布时间:2020-12-14 17:02:24 所属栏目:百科 来源:网络整理
导读:示例代码 新建场景类继承Scene。 重载init如下 bool ActionScene::init(){ // 1. super init first if ( !Layer::init() ) { return false ; } touchEvent( this ); return true ;} 在init前写上全局监听函数(或另建测试类) void touchEvent(ActionScene *sc
示例代码
bool ActionScene::init(){
// 1. super init first
if ( !Layer::init() )
{
return false;
}
touchEvent(this);
return true;
}
void touchEvent(ActionScene *scene){
//坐标标签
Label *label=Label::create();
label->setString("0,0");
label->setPosition(Point(50,200));
scene->addChild(label);
//目标1
Sprite *sprite1=Sprite::create("sprite1.png");
sprite1->setPosition(Point(200,200));
scene->addChild(sprite1);
//目标2
Sprite *sprite2=Sprite::create("sprite2.png");
sprite2->setPosition(Point(200,200));
scene->addChild(sprite2);
//设置监听对象
auto lister=EventListenerTouchOneByOne::create();
//在回调列表中阻止继续传播
lister->setSwallowTouches(true);
//触摸按下
lister->onTouchBegan=[](Touch *touch,Event *event){
auto target=static_cast<Sprite*>(event->getCurrentTarget());
Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView());
if(target->getBoundingBox().containsPoint(pnow)){
target->setOpacity(100);
return true;
}else{
return false;
}
};
//触发抬起
lister->onTouchEnded=[](Touch *touch,Event *event){
auto target=static_cast<Sprite*>(event->getCurrentTarget());
Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView());
target->setOpacity(255);
};
//触摸按下移动
lister->onTouchMoved=[=](Touch *touch,Event *event){
auto target=static_cast<Sprite*>(event->getCurrentTarget());
Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView());
char strshow[1000];
sprintf(strshow,"(%.2f,%.2f)",pnow.x,pnow.y);
label->setString(strshow);
};
auto eventDisP=Director::getInstance()->getEventDispatcher();
//绑定目标1
eventDisP->addEventListenerWithSceneGraphPriority(lister,sprite1);
//绑定目标2
eventDisP->addEventListenerWithSceneGraphPriority(lister->clone(),sprite2);
}
该函数实现的是,对某个精灵点击和松开会改变该精灵的透明度。以及在移动鼠标时显示坐标 注意处有界面的框架(如MFC、WinFrom)中都有一套事件监听模块。CC大致与它们相同,略微不同的地方是写法(废话)以及回调类型。在上面定义了三个动作的响应函数(落下,移动,抬起)。在MFC中它们回调函数类型相同,看一下CC中的定义。 其中onTouchBegan的返回类型和其它动作的返回类型不同,为bool。
在本例中,如果点击的时候没有点在某个精灵上,那么移动鼠标不会得到鼠标当前的坐标,松开鼠标修改该精灵透明度的代码也不会执行。 *主要内容来自cocos2dx 3.0游戏开发之旅 Section 5.4 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第七课: Co
- objective-c – UIViewController和ViewController有什么区
- C:警告:C4930:未调用原型函数(是否有变量定义?)
- SQLite学习手册(内存数据库)
- xml – SelectSingleNodeNS中namespaces参数的预期格式
- XML解析,NSXMLParser
- 如何在页面标签(textaera)禁止修改状态下可以修改.
- 一列字符拆解成多行
- cocos2dx 3.x 修改NDK_ROOT、ANDROID_SDK_ROOT、ANT_ROOT路
- c# – 使用WebClient.UploadFileAsync方法获取服务器响应