cocos2d-x 显示触摸操作(单击显示效果浪潮,对于视频演示)-绩效转型

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

[cpp] view
plain
copy

  1. #ifndef __HELLOWORLD_SCENE_H__
  2. #define __HELLOWORLD_SCENE_H__
  3. #include "cocos2d.h"
  4. using namespace cocos2d;
  5. class HelloWorld : public cocos2d::CCLayer
  6. {
  7. public:
  8. // Method ‘init‘ in cocos2d-x returns bool, instead of ‘id‘ in cocos2d-iphone (an object pointer)
  9. virtual bool init();
  10. // there‘s no ‘id‘ in cpp, so we recommend to return the class instance pointer
  11. static cocos2d::CCScene* scene();
  12. // a selector callback
  13. void menuCloseCallback(CCObject* pSender);
  14. // preprocessor macro for "static create()" constructor ( node() deprecated )
  15. CREATE_FUNC(HelloWorld);
  16. //进入, 退出响应
  17. virtual void onEnter();
  18. virtual void onExit();
  19. //触屏逻辑函数
  20. virtual void registerWithTouchDispatcher(void);
  21. virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
  22. };
  23. #endif // __HELLOWORLD_SCENE_H__

HelloWorld.m

[cpp] view
plain
copy

  1. #include "HelloWorldScene.h"
  2. #include "SimpleAudioEngine.h"
  3. using namespace cocos2d;
  4. using namespace CocosDenshion;
  5. CCScene* HelloWorld::scene()
  6. {
  7. // ‘scene‘ is an autorelease object
  8. CCScene *scene = CCScene::create();
  9. // ‘layer‘ is an autorelease object
  10. HelloWorld *layer = HelloWorld::create();
  11. // add layer as a child to scene
  12. scene->addChild(layer);
  13. // return the scene
  14. return scene;
  15. }
  16. // on "init" you need to initialize your instance
  17. bool HelloWorld::init()
  18. {
  19. //////////////////////////////
  20. // 1. super init first
  21. if ( !CCLayer::init() )
  22. {
  23. return false;
  24. }
  25. return true;
  26. }
  27. void HelloWorld::menuCloseCallback(CCObject* pSender)
  28. {
  29. CCDirector::sharedDirector()->end();
  30. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
  31. exit(0);
  32. #endif
  33. }
  34. #pragma mark - enter,exit
  35. //进入响应函数
  36. void HelloWorld::onEnter()
  37. {
  38. CCLayer::onEnter();
  39. //进入开启触摸
  40. this->setTouchEnabled(true);
  41. }
  42. //退出响应函数
  43. void HelloWorld::onExit()
  44. {
  45. CCLayer::onExit();
  46. }
  47. #pragma mark - 触摸事件
  48. void HelloWorld::registerWithTouchDispatcher()
  49. {
  50. //kCCMenuHandlerPriority=-128,将这个值设置为-128的二倍。能够比下边的层的优先级高
  51. //并且ccTouchBegan的返回值为true,说明其它的层将接受不到这个触摸消息了,仅仅有这个层上边的
  52. //菜单的优先级比他还要打,所以它上边的菜单是能够接收到触摸消息的
  53. CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,
  54. kCCMenuHandlerPriority*2,true);
  55. }
  56. //触摸事件
  57. bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
  58. {
  59. //获得触摸点坐标
  60. CCPoint touchLocation = pTouch->getLocation();
  61. CCParticleSystemQuad *mParticle =  CCParticleSystemQuad::create("showClick.plist");
  62. mParticle->setScale(0.5f);
  63. mParticle->setPosition(touchLocation);
  64. //假设不设置,粒子播放后内存不释放
  65. mParticle->setAutoRemoveOnFinish(true);
  66. this->addChild(mParticle);
  67. return false;
  68. }

=============

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;

}

时间: 2024-10-28 22:16:17

cocos2d-x 显示触摸操作(单击显示效果浪潮,对于视频演示)-绩效转型的相关文章

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

昨天刚刚參加玩游戏设计大赛, 积累了一些东西. 接下去将会逐个分享出来. 首先是显示触摸操作. 由于要演示我们的作品.使用试玩过程中, 假设没办法显示我们的触摸操作(像录制视频一样, 点击了屏幕某点, 出现红点或者水波荡漾这种效果), 那样的话演示效果不好. 观众就无法直观的了解我们的游戏.所以考虑加入这个功能. 之后, 走了点弯路.一直在考虑手机本身有没有这个功能,后来找了非常久.非越狱iPhone是没有这个功能的. 于是乎, 自己写呗. 详细效果例如以下: 实现非常easy.主要用到了一个粒

AudioPlayer.js,一个响应式且支持触摸操作的jquery音频插件

AudioPlayer.js是一个响应式.支持触摸操作的HTML5 的音乐播放器.本文是对其官网的说用说明文档得翻译,博主第一次翻译外文.不到之处还请谅解.之处. JS文件地址:http://osvaldas.info/examples/audio-player-responsive-and-touch-friendly/audioplayer.js 你可以在右键点击上面的地址,然后选择另存为把JS文件保存到本地. 英文原文地址:http://osvaldas.info/audio-player

10大支持移动“触摸操作”的JavaScript框架

摘要:移动开发行业的发展速度让人目不暇接,也在此大势之下,推出移动网站App成为开发者必经之路,如何让触屏设备 更易使用?如何让网站对触摸手势做出反应并使触摸更友好?所有这一切,皆因JavaScript变得轻而易举.本文介绍了Hammer.js等10个极佳 的支持移动触摸操作的JavaScript框架. 为什么说移动开发是一项非常艰苦的工作?原因很多,比如非常耗时.压力无处不在等等.最重要的一点是,作为一名移动开发者,你必须始终秉承“活到老 学到老”,还要明了最新的发展趋势.问题及解决方案等.比

在VMWare Workstation中以独占显示像操作物理机一样使用当前虚拟机?

在VMWare Workstation中以独占显示像操作物理机一样使用当前虚拟机? ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/lander IT Helpdesk 工程师实战培训课程:https://edu.51cto.com/lecturer/733218.html轻松进外企:IT Helpdesk工程师实战自学之路:https://blog.51cto.com/lander/2413

iOS中如何获取用户的触摸操作

iOS设备是一个多点触控的设备,在屏幕上可以进行多个手指的控制.那么如何在开发中获取用户的手势操作呢?iOS有四种手指的操作,分别是按下,抬起,移动和取消.四个方法如下: //按下屏幕,开始触摸: override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { println("touchesBegan") } //手指抬起,结束触摸: override func touchesE

Unity3d android开发之触摸操作识别-双击,滑动去噪处理

在android上开发unity游戏,和在IOS上差不多,但是还是有许多细微的差别的,这可能是由于系统或者硬件问题导致的差异吧,比较典型的就是-触摸屏上实现双击的差别. Unity3d 官方API文档上告诉我们一件事,http://docs.unity3d.com/Manual/MobileInput.html ,如图 你看他说,IOS设备就可以通过tapcontrol来判断是否有双击产生,然而android设备并没有这个功能.原因不管,看到这里我们就知道了,要想判断双击事件,还得靠自己手动写代

手势操作(单击手势,长按手势,策划手势)

1.策划手势操作 // // ViewController.m // 1-28策划手势 // // Created by ma c on 16/1/28. // Copyright © 2016年 bjsxt. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (strong, nonatomic) UISwipeGestureRecognizer *rec

利用 Excel封装成OCX 在wxPython窗口中显示、操作

# -*- coding: utf-8 -*- SCITE 消除乱码设置: 文件->编码->带BOM的UTF-8 # 奇怪的乱码! """ 目的: 1. 封装Excel 的 OCX太少! 好用的更是少之又少!(注意!!! iWebOffice2006.ocx涉及到版权! 这里iWebOffice2006.ocx仅做学习.研究.交流用! 如需使用请君购买正版! ) 2. OCX嵌入到wxPython对话框例子太少. 3. 这个例子就是填补1-2空白 4. 最好的利用

Springmvc file多附件上传 显示 删除操作

之前项目需求要做一个多附件上传 并显示上传文件 带删除操作 一筹莫展之际搜到某个兄弟发的博客感觉非常好用被我copy下来了此贴算是改良版 再次感谢(忘记叫什么了时间也有点久没有历史记录了)先上图 基于springmvc附件上传 所需jar包 commons.fileupload-1.2.0.jar commons.io-1.4.0.jar 这个是我使用的jar包有需要的可以直接百度网盘下载 里面有好几个版本 自行选择 放在lib下面 使用的话maven 直接下载也可以 链接:https://pa