zoukankan      html  css  js  c++  java
  • 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:cocospdemoclassesgamescene.h(17): error C2061: syntax error : identifier 'Touch' (..ClassesHelloWorldScene.cpp)
    2>f:cocospdemoclassesgamescene.h(24): error C2061: syntax error : identifier 'Touch' (..ClassesHelloWorldScene.cpp)
    2>f:cocospdemoclassesgamescene.h(31): error C2061: syntax error : identifier 'Touch' (..ClassesHelloWorldScene.cpp)
    2>f:cocospdemoclassesgamescene.h(38): error C2061: syntax error : identifier 'Touch' (..ClassesHelloWorldScene.cpp)
    2>f:cocospdemoclassesgamescene.h(49): error C2143: syntax error : missing ';' before '*' (..ClassesHelloWorldScene.cpp)
    2>f:cocospdemoclassesgamescene.h(49): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (..ClassesHelloWorldScene.cpp)
    2>f:cocospdemoclasseshelloworldscene.cpp(105): warning C4996: 'cocos2d::CCString': was declared deprecated
    2>          f:cocospdemococos2dcocosdeprecatedccdeprecated.h(1108) : see declaration of 'cocos2d::CCString'
    2>f:cocospdemoclassesgamescene.h(17): error C2061: syntax error : identifier 'Touch' (..ClassesGameScene.cpp)
    2>f:cocospdemoclassesgamescene.h(24): error C2061: syntax error : identifier 'Touch' (..ClassesGameScene.cpp)
    2>f:cocospdemoclassesgamescene.h(31): error C2061: syntax error : identifier 'Touch' (..ClassesGameScene.cpp)
    2>f:cocospdemoclassesgamescene.h(38): error C2061: syntax error : identifier 'Touch' (..ClassesGameScene.cpp)
    2>f:cocospdemoclassesgamescene.h(49): error C2143: syntax error : missing ';' before '*' (..ClassesGameScene.cpp)
    2>f:cocospdemoclassesgamescene.h(49): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (..ClassesGameScene.cpp)
    2>f:cocospdemoclassesgamescene.cpp(42): error C2065: 'zxsprite' : undeclared identifier
    2>f:cocospdemoclassesgamescene.cpp(43): error C2065: 'zxsprite' : undeclared identifier
    2>f:cocospdemoclassesgamescene.cpp(43): error C2227: left of '->setScale' must point to class/struct/union/generic type
    2>          type is 'unknown-type'
    2>f:cocospdemoclassesgamescene.cpp(44): error C2065: 'zxsprite' : undeclared identifier
    2>f:cocospdemoclassesgamescene.cpp(44): error C2227: left of '->setPosition' must point to class/struct/union/generic type
    2>          type is 'unknown-type'
    2>f:cocospdemoclassesgamescene.cpp(45): error C2065: 'zxsprite' : undeclared identifier
    2>f:cocospdemoclassesgamescene.cpp(49): warning C4996: 'cocos2d::Layer::setTouchMode': was declared deprecated
    2>          f:cocospdemococos2dcocos2dcclayer.h(181) : see declaration of 'cocos2d::Layer::setTouchMode'
    2>f:cocospdemoclassesgamescene.cpp(56): error C2511: 'bool GameScene::onTouchBegan(cocos2d::Touch *,cocos2d::Event *)' : overloaded member function not found in 'GameScene'
    2>          f:cocospdemoclassesgamescene.h(4) : see declaration of 'GameScene'
    2>f:cocospdemoclassesgamescene.cpp(57): warning C4996: 'cocos2d::CCPoint': was declared deprecated
    2>          f:cocospdemococos2dcocosdeprecatedccdeprecated.h(833) : see declaration of 'cocos2d::CCPoint'
    2>f:cocospdemoclassesgamescene.cpp(58): error C2065: 'zxsprite' : undeclared identifier
    2>f:cocospdemoclassesgamescene.cpp(58): error C2227: left of '->setPosition' must point to class/struct/union/generic type
    2>          type is 'unknown-type'
    2>f:cocospdemoclassesgamescene.cpp(64): error C2511: 'void GameScene::onTouchMoved(cocos2d::Touch *,cocos2d::Event *)' : overloaded member function not found in 'GameScene'
    2>          f:cocospdemoclassesgamescene.h(4) : see declaration of 'GameScene'
    2>f:cocospdemoclassesgamescene.cpp(70): error C2511: 'void GameScene::onTouchEnded(cocos2d::Touch *,cocos2d::Event *)' : overloaded member function not found in 'GameScene'
    2>          f:cocospdemoclassesgamescene.h(4) : see declaration of 'GameScene'
    2>f:cocospdemoclassesgamescene.cpp(75): error C2511: 'void GameScene::onTouchCancelled(cocos2d::Touch *,cocos2d::Event *)' : overloaded member function not found in 'GameScene'
    2>          f:cocospdemoclassesgamescene.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 {};  
     
     
     
     
     
     
     
     
     
     
     
     
     





  • 相关阅读:
    Poj 2017 Speed Limit(水题)
    Poj 1316 Self Numbers(水题)
    Poj 1017 Packets(贪心策略)
    Poj 1017 Packets(贪心策略)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    Poj 2662,2909 Goldbach's Conjecture (素数判定)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2388 Who's in the Middle(快速排序求中位数)
    poj 2000 Gold Coins(水题)
    poj 2000 Gold Coins(水题)
  • 原文地址:https://www.cnblogs.com/skyhuangdan/p/5761653.html
Copyright © 2011-2022 走看看