cocos2d-x Touch触屏事件
来源:互联网 发布:js判断法定节假日 编辑:程序博客网 时间:2024/05/30 05:06
单点触控
1. OnEnter或init中添加开启触屏接收属性:
setTouchEnabled(true);
2. 重载
virtual void registerWithTouchDispatcher(void);
并添加:
CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0, true)
3. 重载需要的响应函数
ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
下面看一个例子:
新建HelloWorld, AppDelegate.cpp的applicationDidFinishLaunching注释掉原有HelloWorld的,添加CCScene *pScene = GameScene::scene();
为工程添加新类GameScene.定义如下:
#pragma once#include "cocos2d.h"using namespace cocos2d;class GameScene :public CCLayerColor{public:static cocos2d::CCScene* scene();public:virtual bool init(); virtual bool ccTouchBegan(CCTouch *pTouches, CCEvent *pEvent); virtual void ccTouchMoved(CCTouch *pTouches, CCEvent *pEvent);virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);virtual void registerWithTouchDispatcher();void menuCloseCallback(CCObject* pSender);CREATE_FUNC(GameScene);void updateSize(CCPoint p);};
#include "GameScene.h"#include "HelloWorldScene.h"using namespace cocos2d;CCScene* GameScene::scene(){CCScene* scene = CCScene::create();GameScene *gameScene = GameScene::create();scene->addChild(gameScene);return scene;}bool GameScene::init(){CCLayerColor::init();CCSize size = CCDirector::sharedDirector()->getWinSize();setTouchEnabled(true);CCLayerColor *colorRect = CCLayerColor::create(ccc4(255, 255, 0, 255), 200.0, 200.0);colorRect->setPosition(ccp(size.width/2, size.height/2));colorRect->ignoreAnchorPointForPosition(false);addChild(colorRect, 0, 1);CCActionInterval *colorAction = CCRepeatForever::create((CCActionInterval *)CCSequence::create(CCTintTo::create(0.2f, 255, 0, 0),CCTintTo::create(0.2f, 0, 255, 0),CCTintTo::create(0.2f, 0, 0, 255),CCTintTo::create(0.2f, 0, 255, 255),CCTintTo::create(0.2f, 255, 255, 0),CCTintTo::create(0.2f, 255, 0, 255),CCTintTo::create(0.2f, 255, 255, 255),NULL));colorRect->runAction(colorAction);return true;}bool GameScene::ccTouchBegan(CCTouch *pTouches, CCEvent *pEvent){CCPoint point = pTouches->getLocation();updateSize(point);return true;}void GameScene::ccTouchMoved(CCTouch *pTouches, CCEvent *pEvent){CCPoint point = pTouches->getLocation();updateSize(point);}void GameScene::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){CCPoint point = pTouch->getLocation();updateSize(point);}void GameScene::updateSize(CCPoint p){CCSize size = CCDirector::sharedDirector()->getWinSize();CCSize newSize = CCSizeMake( fabs(p.x-size.width/2)*2, fabs(p.y-size.height/2)*2 );CCLayerColor *layer = (CCLayerColor*)getChildByTag(1);layer->setContentSize(newSize);}void GameScene::registerWithTouchDispatcher(){CCDirector* pDirector = CCDirector::sharedDirector();pDirector->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority + 1, true);}
运行点击屏幕,拖动屏幕可看到效果。
CCDirector的addTargetedDelegate的作用是在Dispatcher的列表中注册一个触屏事件的委托,用来监听用户的触屏事件。
参数分别为:触屏世家你委托CCTouchDelegate目标,优先级(值越高越早被响应),是否拦截触屏事件(true表示拦截触屏事件,即响应响应本次事件委托后,不再继续分发触屏事件到Dispatcher列表的中其他委托)。
多点触控
多点触控与单点触控类似,只不过是在触控的一串输入中,遍历这一串经行处理,在TestCpp的例子中有一个专门的例子MutiTouchTest
所用到的函数有:
ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)
ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent)
void MutiTouchTestLayer::registerWithTouchDispatcher(void)
{
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
}
{
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
}
- cocos2d-x Touch触屏事件
- cocos2d-x Touch触屏事件
- cocos2d-x 自定义Touch事件触屏:
- cocos2d-x touch事件
- cocos2d-x touch事件
- cocos2d-x touch事件
- Cocos2d-x---Touch事件
- Cocos2d-x Touch事件处理
- Cocos2D-X 之 Touch事件
- cocos2d-x注册touch事件
- Cocos2d-x之Touch事件
- cocos2d-x Touch事件处理机制
- cocos2d-x Touch事件处理机制
- cocos2d-x Touch事件处理机制
- cocos2d-x 屏蔽场景的Touch事件
- cocos2d-x Touch事件处理机制
- cocos2d-x Touch事件处理机制
- cocos2d-x里面touch事件传递机制
- android手机root后的安全问题 (四)
- Linux命令之ssh - Secure Shell 客户端
- Windows 2003 远程桌面超时 自动断开 自动注销
- 解决Entity Framework(EF) 使用时,数据库结构对应,但EF还是提示要删除数据库的问题
- VirtualBox里面 Ubuntu9.10 USB转串口设置
- cocos2d-x Touch触屏事件
- Oracle-Lock Query
- 汇率生成BAPI
- 开启FMS服务器的debug功能
- 统计推断(第五章)
- Oracle-rman脚本
- 读 Beginning Android Games 2nd Edition (三) 创建速度感应器事件监听类
- javascript ClientId用法
- 用js在新页面打开