码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)

时间:2014-05-18 08:01:59      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   c   tar   

昨天刚刚参加玩游戏设计大赛, 积累了一些东西。接下去将会逐个分享出来。


首先是显示触摸操作

因为要演示我们的作品。使用试玩过程中, 如果没办法显示我们的触摸操作(像录制视频一样, 点击了屏幕某点, 出现红点或者水波荡漾这样的效果), 那样的话演示效果不好。观众就无法直观的了解我们的游戏。所以考虑加入这个功能。

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

于是乎, 自己写呗。

具体效果如下:

bubuko.com,布布扣


实现很简单,主要用到了一个粒子效果。

具体步骤如下:

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


学习的路上, 与君共勉。

cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示),布布扣,bubuko.com

cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)

标签:style   blog   class   code   c   tar   

原文地址:http://blog.csdn.net/hitwhylz/article/details/26042751

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!