cocos2dx触摸响应

Layer其实继承了触控的接口. 所以只需要重写一些函数即可.

在helloword类中重写:

virtual bool init();

/** Callback function for touch began.

*

* @param touch Touch information.

* @param unused_event Event information.

* @return if return false, onTouchMoved, onTouchEnded, onTouchCancelled will never called.

* @js NA

*/

virtual bool onTouchBegan(Touch *touch, Event *unused_event);

/** Callback function for touch moved.

*

* @param touch Touch information.

* @param unused_event Event information.

* @js NA

*/

virtual void onTouchMoved(Touch *touch, Event *unused_event);

/** Callback function for touch ended.

*

* @param touch Touch information.

* @param unused_event Event information.

* @js NA

*/

virtual void onTouchEnded(Touch *touch, Event *unused_event);

/** Callback function for touch cancelled.

*

* @param touch Touch information.

* @param unused_event Event information.

* @js NA

*/

virtual void onTouchCancelled(Touch *touch, Event *unused_event);

此时,只要这个layer在界面上,点击就会在这几个函数中响应. 即可在这里面控制精灵的移动

但是编译错误.

2>f:\cocos\p\demo\classes\gamescene.h(17): error C2061: syntax error : identifier ‘Touch‘ (..\Classes\HelloWorldScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(24): error C2061: syntax error : identifier ‘Touch‘ (..\Classes\HelloWorldScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(31): error C2061: syntax error : identifier ‘Touch‘ (..\Classes\HelloWorldScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(38): error C2061: syntax error : identifier ‘Touch‘ (..\Classes\HelloWorldScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(49): error C2143: syntax error : missing ‘;‘ before ‘*‘ (..\Classes\HelloWorldScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(49): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (..\Classes\HelloWorldScene.cpp)

2>f:\cocos\p\demo\classes\helloworldscene.cpp(105): warning C4996: ‘cocos2d::CCString‘: was declared deprecated

2>          f:\cocos\p\demo\cocos2d\cocos\deprecated\ccdeprecated.h(1108) : see declaration of ‘cocos2d::CCString‘

2>f:\cocos\p\demo\classes\gamescene.h(17): error C2061: syntax error : identifier ‘Touch‘ (..\Classes\GameScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(24): error C2061: syntax error : identifier ‘Touch‘ (..\Classes\GameScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(31): error C2061: syntax error : identifier ‘Touch‘ (..\Classes\GameScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(38): error C2061: syntax error : identifier ‘Touch‘ (..\Classes\GameScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(49): error C2143: syntax error : missing ‘;‘ before ‘*‘ (..\Classes\GameScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.h(49): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (..\Classes\GameScene.cpp)

2>f:\cocos\p\demo\classes\gamescene.cpp(42): error C2065: ‘zxsprite‘ : undeclared identifier

2>f:\cocos\p\demo\classes\gamescene.cpp(43): error C2065: ‘zxsprite‘ : undeclared identifier

2>f:\cocos\p\demo\classes\gamescene.cpp(43): error C2227: left of ‘->setScale‘ must point to class/struct/union/generic type

2>          type is ‘unknown-type‘

2>f:\cocos\p\demo\classes\gamescene.cpp(44): error C2065: ‘zxsprite‘ : undeclared identifier

2>f:\cocos\p\demo\classes\gamescene.cpp(44): error C2227: left of ‘->setPosition‘ must point to class/struct/union/generic type

2>          type is ‘unknown-type‘

2>f:\cocos\p\demo\classes\gamescene.cpp(45): error C2065: ‘zxsprite‘ : undeclared identifier

2>f:\cocos\p\demo\classes\gamescene.cpp(49): warning C4996: ‘cocos2d::Layer::setTouchMode‘: was declared deprecated

2>          f:\cocos\p\demo\cocos2d\cocos\2d\cclayer.h(181) : see declaration of ‘cocos2d::Layer::setTouchMode‘

2>f:\cocos\p\demo\classes\gamescene.cpp(56): error C2511: ‘bool GameScene::onTouchBegan(cocos2d::Touch *,cocos2d::Event *)‘ : overloaded member function not found in ‘GameScene‘

2>          f:\cocos\p\demo\classes\gamescene.h(4) : see declaration of ‘GameScene‘

2>f:\cocos\p\demo\classes\gamescene.cpp(57): warning C4996: ‘cocos2d::CCPoint‘: was declared deprecated

2>          f:\cocos\p\demo\cocos2d\cocos\deprecated\ccdeprecated.h(833) : see declaration of ‘cocos2d::CCPoint‘

2>f:\cocos\p\demo\classes\gamescene.cpp(58): error C2065: ‘zxsprite‘ : undeclared identifier

2>f:\cocos\p\demo\classes\gamescene.cpp(58): error C2227: left of ‘->setPosition‘ must point to class/struct/union/generic type

2>          type is ‘unknown-type‘

2>f:\cocos\p\demo\classes\gamescene.cpp(64): error C2511: ‘void GameScene::onTouchMoved(cocos2d::Touch *,cocos2d::Event *)‘ : overloaded member function not found in ‘GameScene‘

2>          f:\cocos\p\demo\classes\gamescene.h(4) : see declaration of ‘GameScene‘

2>f:\cocos\p\demo\classes\gamescene.cpp(70): error C2511: ‘void GameScene::onTouchEnded(cocos2d::Touch *,cocos2d::Event *)‘ : overloaded member function not found in ‘GameScene‘

2>          f:\cocos\p\demo\classes\gamescene.h(4) : see declaration of ‘GameScene‘

2>f:\cocos\p\demo\classes\gamescene.cpp(75): error C2511: ‘void GameScene::onTouchCancelled(cocos2d::Touch *,cocos2d::Event *)‘ : overloaded member function not found in ‘GameScene‘

2>          f:\cocos\p\demo\classes\gamescene.h(4) : see declaration of ‘GameScene‘

解决办法:

在cocos2d.h包含路径下添加USING_NS_CC即可.

#include "cocos2d.h"

USING_NS_CC;

在<权威指南>中关于注册触摸响应的方法在3.x中已经不再支持.

在权威指南中是需要重载registerWithTouchDispatcher()函数进行操作的.但我当前使用的3.12版本不再支持.

因为:  在Layer.h源码中有 final 关键字. 所以我认为应该就是不再使用.(不知道是不是这么理解)

/** If isTouchEnabled, this method is called onEnter. Override it to change the

way Layer receives touch events.

( Default: TouchDispatcher::sharedDispatcher()->addStandardDelegate(this,0); )

Example:

void Layer::registerWithTouchDispatcher()

{

TouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,INT_MIN+1,true);

}

@since v0.8.0

@js NA

*/

CC_DEPRECATED_ATTRIBUTE virtual void registerWithTouchDispatcher() final {};

来自为知笔记(Wiz)

时间: 2024-10-07 19:51:17

cocos2dx触摸响应的相关文章

自定义View的触摸响应时间间隔可以自已定义么

============问题描述============ ============解决方案1============ 触摸响应时间是系统规定的,根据屏幕的灵敏度等规定的,不同机型的触摸响应时间是不同的.一般20毫秒左右吧 ============解决方案2============ 触摸响应的时间无法自定义,不过在触摸响应函数中的响应操作你可以控制啊,你可以在这里作延迟.

(二)理解触摸响应

[写在该系列之前] 该系列为索尼关于智能手机触摸屏的文章,共四篇,对Android智能手机触摸体系做了系统并详细的说明. 注1:虽然做了翻译,但还是认为原文更准确,若可以,请大家移步原文:http://developer.sonymobile.com/tag/touch/ 注2:若有错误,肯请大家指正,先行谢过. 理解触摸响应 这是我们触摸屏技术系列中的第二篇文章.在前一篇文章中,我们解释了触摸屏系统的组件和这些组件如何将一个触摸输入转换成图形化用户反馈.在这篇文章中,我们将继续触摸响应话题,并

React-native 中的触摸响应功能

我们在做APP的时候,与桌面应用系统不同的是触摸响应. web页面对触摸响应的支持和原生的APP有着很大的差异. 基本用法 componentWillMount: function() { this._panResponder = PanResponder.create({ // 要求成为响应者: onStartShouldSetPanResponder: (evt, gestureState) => true, onStartShouldSetPanResponderCapture: (evt

cocos2d-x学习记录3——CCTouch触摸响应

游戏不同于影音,强交互性是其一大特色,在游戏中主要体现为接受用户的输入并响应.智能手机触摸是其重要的输入方式. 在cocos2d-x中,触摸分为单点触摸和多点触摸. 单点触摸:主要继承CCTargetedTouchDelegate 实现. 多点触摸:主要继承CCStandardTouchDelegate实现. MyScene.h 1 #ifndef MyScene_H_H 2 #define MyScene_H_H 3 4 #include "cocos2d.h" 5 using na

cocos2d-x触摸分发器原理

为了实现触摸事件,CCLayer已经封装好了简单的接口(继承了CCTouchDelegate类)来实现触摸事件的响应. 首先,触摸事件有两种:标准触摸代理和目标触摸代理.那么我们先看看如何开启这两种触摸代理. 1.标准触摸 在层初始化时调用setTouchEnable(true)方法即可实现标准触摸,实现处理事件回调函数,处理触摸事件即可. // optional virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) virt

cocos2dx 触摸钢琴

1.触摸钢琴项目描述 1.1触摸钢琴功能描述 实现手指点按琴键发出对应的音调,按下位置出现星云的粒子特效,滚动实现移动到别的琴键的位置,按下安卓返回键执行关闭. 1.2触摸钢琴所需技术 粒子特效,安卓按键监听. 2.触摸钢琴详细设计 2.1点击琴键发出对应的音调 首先创建好UI,底层为一个滚动层,在上面按照位置添加对应的琴键按钮,每个琴键按钮要设置Tag,和按照音调设置名字.注意:黑色琴键按钮的要通过cocostudio的对象结构树调整到白键的下面,这样点击黑键时才会优先响应黑键. 通过Tag值

关于cocostudio动态添加控件触摸响应无效的学习

time:2015/04/19 1. 描述 * 自己也碰到了在cocostudio上碰到点击按钮没有响应的情况 * 另外,网上有朋友也碰到过,所以自己觉得按照3.0的cocos引擎的新渲染逻辑应该是可以设置的 2. 学习 (1)代码直接调试 动态添加一个按钮或者一个精灵到有cocostudio加载的layout * 按钮和layout在一个层级,都加载layer上,没有位置上的重叠:结果没有影响,两遍都能响应触摸事件 * 按钮和layout在一个层级,都加载layer上,有位置上的重叠:结果依旧

3.x的触摸响应机制

第一种是采用函数回调,主要是用于MenuItem [cpp] view plaincopy // a selector callback void menuCloseCallback(Object* pSender); auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, th

cocos2dx触屏响应(单点触摸)CCTouchBegan,CCTouchMove,CCTouchEnd

今天白白跟大家分享一下cocos2dx单点触摸经验. cocos2dx触摸CCTouch类的单点触摸有四个函数CCTouchBegan,CCTouchMove,CCTouchEnd,CCTouchCancalled. 这些触摸的函数不一定每一个都要响应,可是CCTouchBegan是一定要有的,他的返回值是bool,其他函数返回值为void 以下我们看看怎样触摸: 首先我们新建一个项目Hello 1.在源文件Hello.h声明函数 void registerWithTouchDispatcher