cocos2d-x 3.x学习之TouchOneByOne单点触摸
来源:互联网 发布:php文件怎么用打开手机 编辑:程序博客网 时间:2024/05/21 01:47
#include <iostream>#include "cocos2d.h"USING_NS_CC;class TouchOneByOneTest:public Layer{public: static Scene* createScene(); virtual bool init(); void menuCloseCallback(Ref* pSender); CREATE_FUNC(TouchOneByOneTest);};
#include "TouchOneByOneTest.h"Scene* TouchOneByOneTest::createScene(){ auto scene = Scene::create(); auto layer = TouchOneByOneTest::create(); scene->addChild(layer); return scene;}bool TouchOneByOneTest::init(){ if(!Layer::init()){ return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(TouchOneByOneTest::menuCloseCallback, this)); closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width / 2,origin.y + closeItem->getContentSize().height / 2)); //删除触摸监听器 auto removeAllTouchItem = MenuItemFont::create("删除所有的触摸监听器",[this](Ref* sender){ auto senderItem = static_cast<MenuItemFont*>(sender); senderItem->setString("触摸监听器删除成功"); _eventDispatcher->removeEventListenersForType(EventListener::Type::TOUCH_ONE_BY_ONE); }); removeAllTouchItem->setPosition(visibleSize.width / 2, visibleSize.height * 0.2); //创建菜单 auto menu = Menu::create(removeAllTouchItem,closeItem,NULL); menu->setPosition(Vec2::ZERO); this->addChild(menu); //标题标签 auto title = Label::createWithSystemFont("单点触摸测试","", 64); this->setPosition(visibleSize.width / 2,visibleSize.height * 0.9); this->addChild(title); //提示标签 auto subtitle = Label::createWithSystemFont("请单击或拖动滑块","", 32); subtitle->setPosition(visibleSize.width / 2,visibleSize.height * 0.8); this->addChild(subtitle); //创建三个精灵对象 auto sprite1 = Sprite::create("CyanSquare.png"); sprite1->setPosition(Vec2(visibleSize.width / 2,visibleSize.height / 2) + Vec2(-80, 80)); addChild(sprite1,10); auto sprite2 = Sprite::create("MagentaSquare.png"); sprite2->setPosition(Vec2(visibleSize.width / 2,visibleSize.height / 2)); addChild(sprite2,20); auto sprite3 = Sprite::create("YellowSquare.png"); sprite3->setPosition(Vec2(0, 0)); sprite2->addChild(sprite3,1); //创建一个单点触摸事件监听器,处理触摸事件逻辑 auto listener1 = EventListenerTouchOneByOne::create(); //设置是否向下传递触摸 listener1->setSwallowTouches(true); listener1->onTouchBegan = [](Touch* touch,Event* event){ //获得当前事件触摸的目标对象 auto target = static_cast<Sprite*>(event->getCurrentTarget()); //获得当前的触摸点 Point locationInNode = target->convertToNodeSpace(touch->getLocation()); //获得触摸对象的ContentSize Size s = target->getContentSize(); //获得位置矩形 Rect rect = Rect(0, 0, s.width, s.height); //如果位置矩形包含触摸点 if(rect.containsPoint(locationInNode)){ log("onTouchBegan..x = %f, y = %f",locationInNode.x,locationInNode.y); //设置透明度 target->setOpacity(180); //表明用户触摸事件已经被处理,后续的Moved Ended Cancelled会接着响应,其他事件监听器则不会再去进行监听本次触摸事件 return true; } return false; }; listener1->onTouchMoved = [](Touch* touch,Event* event){ log("onTouchMoved..."); auto target = static_cast<Sprite*>(event->getCurrentTarget()); //移动触摸的精灵 target->setPosition(target->getPosition()+touch->getDelta()); }; listener1->onTouchEnded = [=](Touch* touch,Event* event){ auto target = static_cast<Sprite*>(event->getCurrentTarget()); //设置透明度 target->setOpacity(255); std::string name; if(target == sprite2){ name = "MagentaSquare.png"; sprite1->setZOrder(100); subtitle->setString("响应事件的是酒红色滑块,青色滑块的ZOrder修改为100"); } else if(target == sprite1){ name = "CyanSquare.png"; sprite1->setZOrder(0); subtitle->setString("响应事件的是青色滑块,青色滑块的ZOrder值修改为0"); }else{ name = "YellowSquare.png"; } log("onTouchEnded..您触摸的是%s",name.c_str()); }; //添加场景优先事件监听器 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1,sprite1); //再次使用上面的函数时要使用clone函数创建一个新的克隆 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),sprite2); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite3); return true;}void TouchOneByOneTest::menuCloseCallback(Ref* pSendr){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert"); return;#endif Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0);#endif}
0 0
- cocos2d-x 3.x学习之TouchOneByOne单点触摸
- Cocos2d-x 单点触摸
- cocos2d-x学习之给CCLayer设置单点触摸
- cocos2d-x 2.14 单点触摸
- cocos2d.x单点触摸事件
- cocos2d-x 3.x之触摸事件
- Cocos2d-x游戏开发之处理单点触摸事件
- cocos2d-x学习之触摸移动
- Cocos2d-x实例:单点触摸事件
- Cocos2d-x开发实例:单点触摸事件
- cocos2d-x-lua 单点触摸事件
- cocos2d-x学习笔记(12)屏幕触摸事件(单点触摸)
- Cocos2d-X之触摸事件
- Cocos2d-x——触摸事件(单点触摸)
- cocos2d-x 3.x学习之多点触摸
- cocos2d-x 3.x 触摸响应
- cocos2d-x学习之层的触摸消息响应
- cocos2d-x学习之层的触摸消息响应
- java 当前系统时间的问题
- UIButton
- SQL Server将一列的多行内容拼接成一行
- leetcode8. String to Integer (atoi)
- cordova支持私人HTTPS证书
- cocos2d-x 3.x学习之TouchOneByOne单点触摸
- 剑指Offer:面试题4——替换空格(java实现)
- 二分查找
- Android之 广播和服务
- [codevs2152] 滑雪
- 宏定义的黑魔法 - 宏菜鸟起飞手册
- Quartz基本概念
- 微信支付之扫码支付相关代码(Java)
- httpclient post