http://blog.csdn.net/hitwhylz/article/details/26042751
首先是显示触摸操作。
在文章最后。对性能进行一些提升改造。
由于要演示我们的作品。使用试玩过程中, 假设没办法显示我们的触摸操作(像录制视频一样, 点击了屏幕某点, 出现红点或者水波荡漾这种效果), 那样的话演示效果不好。观众就无法直观的了解我们的游戏。
所以考虑增加这个功能。
之后, 走了点弯路。一直在考虑手机本身有没有这个功能。后来找了非常久。
非越狱iPhone是没有这个功能的。
于是乎, 自己写呗。
详细效果例如以下:
实现非常easy,主要用到了一个粒子效果。
详细过程例如以下:
0.导入粒子效果文件. showClick.png + showClick.plist(可在我给出的demo中下载)
1.开启触摸
2.在ccTouchBegan中获取触摸点
3.在该触摸点中加入粒子效果
好了。
以下给出详细代码。
当然, 也能够去我的Github中下载源代码:
https://github.com/colin1994/showClickTest
代码例如以下:(注意:在头文件加入 USING_NS_CC;亦可可是必须加入)
HelloWorld.h
-
#ifndef __HELLOWORLD_SCENE_H__
-
#define __HELLOWORLD_SCENE_H__
-
-
#include "cocos2d.h"
-
using namespace cocos2d;
-
-
class HelloWorld : public cocos2d::CCLayer
-
{
-
public:
-
-
virtual bool init();
-
-
-
static cocos2d::CCScene* scene();
-
-
-
void menuCloseCallback(CCObject* pSender);
-
-
-
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()
-
{
-
-
CCScene *scene = CCScene::create();
-
-
-
HelloWorld *layer = HelloWorld::create();
-
-
-
scene->addChild(layer);
-
-
-
return scene;
-
}
-
-
-
-
bool HelloWorld::init()
-
{
-
-
-
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()
-
{
-
-
-
-
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;
-
}
=============
2次改造性能提升
ParticleBatchNode能够引用且仅仅能够引用1个texture(一个图片文件,一个texture图集)。添加到SpriteBatchNode中的ParticleSystem都是在OpenGL ES调用画图函数时绘制的。
假设ParticleSystem没有添加到ParticleBatchNode中,OpenGL ES会调用每一个粒子系统的画图函数,这样做效率会比較低。
bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
//获得触摸点坐标
CCPoint touchLocation = pTouch->getLocation();
CCParticleSystemQuad *mParticle = CCParticleSystemQuad::create("showClick.plist");
mParticle->setScale(0.5f);
mParticle->setPosition(touchLocation);
//加入ParticleBatchNode
mParticle->retain();
CCParticleBatchNode *batch = CCParticleBatchNode::createWithTexture(mParticle->getTexture());
batch->addChild(mParticle);
this->addChild(batch);
mParticle->release();
return false;
}