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 {};