zoukankan      html  css  js  c++  java
  • cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)

    昨天刚刚參加玩游戏设计大赛, 积累了一些东西。

    接下去将会逐个分享出来。


    首先是显示触摸操作

    由于要演示我们的作品。使用试玩过程中, 假设没办法显示我们的触摸操作(像录制视频一样, 点击了屏幕某点, 出现红点或者水波荡漾这种效果), 那样的话演示效果不好。

    观众就无法直观的了解我们的游戏。所以考虑加入这个功能。

    之后, 走了点弯路。一直在考虑手机本身有没有这个功能,后来找了非常久。非越狱iPhone是没有这个功能的。

    于是乎, 自己写呗。

    详细效果例如以下:



    实现非常easy。主要用到了一个粒子效果。

    详细过程例如以下:

    0.导入粒子效果文件. showClick.png + showClick.plist(可在我给出的demo中下载)

    1.开启触摸

    2.在ccTouchBegan中获取触摸点

    3.在该触摸点中加入粒子效果


    好了。以下给出详细代码。

    当然, 也能够去我的Github中下载源代码:

    https://github.com/colin1994/showClickTest


    代码例如以下:

    HelloWorld.h

    #ifndef __HELLOWORLD_SCENE_H__
    #define __HELLOWORLD_SCENE_H__
    
    #include "cocos2d.h"
    using namespace cocos2d;
    
    class HelloWorld : public cocos2d::CCLayer
    {
    public:
        // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
        virtual bool init();
    
        // there's no 'id' in cpp, so we recommend to return the class instance pointer
        static cocos2d::CCScene* scene();
        
        // a selector callback
        void menuCloseCallback(CCObject* pSender);
    
        // preprocessor macro for "static create()" constructor ( node() deprecated )
        CREATE_FUNC(HelloWorld);
        
        
        //进入, 退出响应
        virtual void onEnter();
        virtual void onExit();
        
        //触屏逻辑函数
        virtual void registerWithTouchDispatcher(void);
        virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
    };
    
    #endif // __HELLOWORLD_SCENE_H__
    

    HelloWorld.m

    #include "HelloWorldScene.h"
    #include "SimpleAudioEngine.h"
    
    using namespace cocos2d;
    using namespace CocosDenshion;
    
    CCScene* HelloWorld::scene()
    {
        // 'scene' is an autorelease object
        CCScene *scene = CCScene::create();
        
        // 'layer' is an autorelease object
        HelloWorld *layer = HelloWorld::create();
    
        // add layer as a child to scene
        scene->addChild(layer);
    
        // return the scene
        return scene;
    }
    
    
    // on "init" you need to initialize your instance
    bool HelloWorld::init()
    {
        //////////////////////////////
        // 1. super init first
        if ( !CCLayer::init() )
        {
            return false;
        }
    
        
        return true;
    }
    
    void HelloWorld::menuCloseCallback(CCObject* pSender)
    {
        CCDirector::sharedDirector()->end();
    
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
        exit(0);
    #endif
    }
    
    
    #pragma mark - enter,exit
    //进入响应函数
    void HelloWorld::onEnter()
    {
        CCLayer::onEnter();
        //进入开启触摸
        this->setTouchEnabled(true);
    }
    //退出响应函数
    void HelloWorld::onExit()
    {
        CCLayer::onExit();
    }
    
    #pragma mark - 触摸事件
    
    void HelloWorld::registerWithTouchDispatcher()
    {
    	//kCCMenuHandlerPriority=-128。将这个值设置为-128的二倍,能够比下边的层的优先级高
    	//并且ccTouchBegan的返回值为true。说明其它的层将接受不到这个触摸消息了,仅仅有这个层上边的
    	//菜单的优先级比他还要打,所以它上边的菜单是能够接收到触摸消息的
    	CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,
                                                                                kCCMenuHandlerPriority*2,true);
    }
    //触摸事件
    bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
    {
        //获得触摸点坐标
        CCPoint touchLocation = pTouch->getLocation();
        
        CCParticleSystemQuad *mParticle =  CCParticleSystemQuad::create("showClick.plist");
        mParticle->setScale(0.5f);
        mParticle->setPosition(touchLocation);
        //假设不设置,粒子播放后内存不释放
        mParticle->setAutoRemoveOnFinish(true);
        this->addChild(mParticle);
        
        return false;
    }


    学习的路上, 与君共勉。

  • 相关阅读:
    java核心学习(十六) javaIO框架---Process类的流,读写其他进程
    java核心学习(十五) IO框架---重定向标准输入输出
    java核心学习(十四) IO框架---推回输入流
    java核心学习(十三) IO框架---转换流和缓冲流
    java核心学习(十二) IO框架---理解IO流
    递推+矩阵快速幂 HDU 2065
    树形DP hdu1520
    二分图之最小路径覆盖 HDU1151
    二分图之最小独立集 HDU 2768
    最短路 POJ2267
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6939648.html
Copyright © 2011-2022 走看看