1.触摸钢琴项目描写叙述

1.1触摸钢琴功能描写叙述

实现手指点按琴键发出相应的音调,按下位置出现星云的粒子特效,滚动实现移动到别的琴键的位置,按下安卓返回键运行关闭。

1.2触摸钢琴所需技术

粒子特效,安卓按键监听。

2.触摸钢琴具体设计

2.1点击琴键发出相应的音调

首先创建好UI,底层为一个滚动层。在上面依照位置加入相应的琴键button。每一个琴键button要设置Tag。和依照音调设置名字。注意:黑色琴键button的要通过cocostudio的对象结构树调整到白键的以下。这样点击黑键时才会优先响应黑键。

通过Tag值遍历得每个button控件。假设存在相应的button对象,就绑定响应。

or (int i = 0; i < 70; i++)
{
auto btn = (Button*)Helper::seekWidgetByTag(UI, i);
if (btn)
{
btn->addTouchEventListener(this, toucheventselector(CPaino::onBtnTouch));
}
}

在响应函数onBtnTouch中,被点击的对象最为Ref传入到函数中。对传入的对象进行类型转换,就能够得到名字,然后拼出一个声音文件路径名,播放该声音文件就可演奏发声。

/******************************************************
函数功能:触摸按键响应
传入參数:Ref* target:被点击的button对象
TouchEventType type:点击的类型
*******************************************************/
void CPaino::onBtnTouch(Ref* target, TouchEventType type)
{
auto btn = (Button*)target;
if (btn && type == TouchEventType::TOUCH_EVENT_BEGAN)
{
std::string sBtnName = btn->getName();
std::string sSoundName = StringUtils::format("sound/%s.wav", sBtnName.c_str());
CocosDenshion::SimpleAudioEngine::getInstance()->playEffect(sSoundName.c_str());
}
}

2.2触摸位置产生星云粒子特效

採用cocos2dx中的粒子特效。注意要在琴键当前层上在挂载一个触控层。在触摸的点处播放粒子特效。

2.3监听安卓按键

初始化中添加同意接收按键事件的函数。

auto listenerKeyPad = EventListenerKeyboard::create();
listenerKeyPad->onKeyReleased = CC_CALLBACK_2(CPaino::onKeyPadReleased,this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listenerKeyPad,this);

之后写onKeyPadReleased。识别到返回键退出游戏。

4.触摸钢琴执行结果

源代码下载

cocos2dx 触摸钢琴的更多相关文章

  1. cocos2d-x触摸分发器原理

    屏幕捕捉到触摸消息的派发流程: 如果有一个组件如果想要接收触摸事件,会通过继承一个CCTouchDelegate接口注册给CCTouchDispatcher,CCTouchDispatcher 中维护 ...

  2. cocos2d-x触摸事件优先级的探究与实践

    如何让自定义Layer触发触摸事件? bool LayerXXX::init() { this->setTouchEnabled(true); CCTouchDispatcher* td = C ...

  3. cocos2d-x触摸事件优先级

     CCTouchDispatcher是管理cocos2d-x中全部Touch事件派发的类, CCTouchDispatcher中包括了两个CCTouchHandler的列表, 分别存储Standa ...

  4. cocos2d-x 触摸偏移

    转自:http://www.cnblogs.com/fjut/archive/2012/04/28/2475693.html //ccTouchBegan必须实现,否则会报错 bool PicScan ...

  5. cocos2dx触摸

    两种方法其实都一样,CCLayer也是继承CCTouchDelegate. 1.继承CCTouchDelegate 添加触摸代理 CCTouchDispatcher* pDispatcher = CC ...

  6. cocos2dx触摸响应

      Layer其实继承了触控的接口. 所以只需要重写一些函数即可.   在helloword类中重写:     virtual bool init();     /** Callback functi ...

  7. cocos2dx触屏响应(单点触摸)CCTouchBegan,CCTouchMove,CCTouchEnd

    今天白白跟大家分享一下cocos2dx单点触摸经验. cocos2dx触摸CCTouch类的单点触摸有四个函数CCTouchBegan,CCTouchMove,CCTouchEnd,CCTouchCa ...

  8. cocos2d-x中false,setSwallowTouches,stopPropagation的区别

    研究到cocos2d-x触摸这一块了,3.0和2.0相比已经有了很大的不同,使用更加方便和容易理解了. 直接进入正题,解释下,标题中3个用法的区别 通常来说,应用程序中更多使用的是单点触摸,为了简化单 ...

  9. helloworld讲解cocos2d-x的编程思路与要点

    用helloworld讲解cocos2d-x的编程思路与要点 本文以cocos2d-x的helloworld为例,讲解cocos2d-x引擎的特点和要点,2.2为了展示新功能,把包括屏幕自适应在内的新 ...

随机推荐

  1. js 数组 : 差集、并集、交集、去重

    //input:[{name:'liujinyu'},{name:'noah'}] //output:['liujinyu','noah'] Array.prototype.choose = func ...

  2. Apache Tez on hive

    ———————————————————— 调配 Hadoop  ———————————————————— 1 将 编译好的 TEZ .tar.gz 文件上传到 HDFS 中.   hdfs fs -p ...

  3. HDU 3625

    有点置换群的味道. 当撞开一个门后,能打开一连串的门,即是可以排成一个圈.求的是种数,于是,可以使用第一类斯特林数,求出撞了0~K次的种数. 但是,注意,当第一个门为独自一个圈时,是不可行的,因为这代 ...

  4. Find Blank Cell in Excel

    Click Home > Find & Select > Go To Special. In the Go To Special dialog box, check the Bla ...

  5. php和js区别

    php和js区别 两者在语法上类似,楼上说的对,js=javascript是工作在浏览器端的脚本语言,他所提交的数据是交给浏览器来处理的.但是现在的Ajax技术已经可以把js提交的数据交付到浏览器来处 ...

  6. ES跨版本升级?——难道升级集群发生shard allocation是因为要分配replica节点???

    Full cluster restart upgrade Elasticsearch requires a full cluster restart when upgrading across maj ...

  7. 一题多解(一) —— list(Python)判空(以及 is 与 == 的区别)

    >> l = [] 1. == >> l == [] True 2. not >> not l True 3. 注意 is 与 == 的区别 >> l ...

  8. 安卓-活动Activity

    Android有4大组件,活动 Activity,服务 Service ,广播接收器 Brostcast receiver,内容提供器 Content Provider 安卓活动的生命周期有7种, o ...

  9. CBO基础概念

    CBO基础概念 CBO:评估 I/O,CPU,网络(DBLINK)等消耗的资源成本得出 一.cardinality cardinality:集合中包含的记录数.实际CBO评估目标SQL执行具体步骤的记 ...

  10. 关闭WPS屏保

    WPS作为国产的Office,可谓是越来越流氓,无缘无故给你弄个屏保,不好好做Office就知道如何圈钱,或许这就是国内IT行业和国外的差距吧. 我用的WPS内部版本是:10.1.0.7311 如何查 ...