cocos2dx 触摸钢琴

1.触摸钢琴项目描述

1.1触摸钢琴功能描述

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

1.2触摸钢琴所需技术

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

2.触摸钢琴详细设计

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

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

通过Tag值遍历得每一个按钮控件,如果存在对应的按钮对象,就绑定响应。

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:被点击的按钮对象
		  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.触摸钢琴运行结果

源码下载

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-24 12:38:08

cocos2dx 触摸钢琴的相关文章

cocos2d-x触摸分发器原理

为了实现触摸事件,CCLayer已经封装好了简单的接口(继承了CCTouchDelegate类)来实现触摸事件的响应. 首先,触摸事件有两种:标准触摸代理和目标触摸代理.那么我们先看看如何开启这两种触摸代理. 1.标准触摸 在层初始化时调用setTouchEnable(true)方法即可实现标准触摸,实现处理事件回调函数,处理触摸事件即可. // optional virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) virt

cocos2dx触摸响应

Layer其实继承了触控的接口. 所以只需要重写一些函数即可. 在helloword类中重写: virtual bool init(); /** Callback function for touch began. * * @param touch Touch information. * @param unused_event Event information. * @return if return false, onTouchMoved, onTouchEnded, onTouchCan

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

今天白白跟大家分享一下cocos2dx单点触摸经验. cocos2dx触摸CCTouch类的单点触摸有四个函数CCTouchBegan,CCTouchMove,CCTouchEnd,CCTouchCancalled. 这些触摸的函数不一定每一个都要响应,可是CCTouchBegan是一定要有的,他的返回值是bool,其他函数返回值为void 以下我们看看怎样触摸: 首先我们新建一个项目Hello 1.在源文件Hello.h声明函数 void registerWithTouchDispatcher

Cocos2d-x触屏响应(单点触摸)CCTouchBegan,CCTouchMove,CCTouchEnd

cocos2dx触摸CCTouch类的单点触摸有四个函数CCTouchBegan,CCTouchMove,CCTouchEnd,CCTouchCancalled. 这些触摸的函数不一定每个都要响应,但是CCTouchBegan是一定要有的,它的返回值是bool,其它函数返回值为void 下面我们看看如何触摸: 首先我们新建一个项目Hello. 1.在源文件Hello.h声明函数 1 void registerWithTouchDispatcher(void); //注册触摸 2 bool ccT

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

用helloworld讲解cocos2d-x的编程思路与要点 本文以cocos2d-x的helloworld为例,讲解cocos2d-x引擎的特点和要点,2.2为了展示新功能,把包括屏幕自适应在内的新特性相关代码加入了helloworld工程代码里,但是也增加新人的上手难度,我会避过不谈,只说关键的几句代码,对于已经了解cocos2d-x架构的朋友,本文后面的内容对你毫无帮助,可以去关注我写的<cocos2d-x提高篇>(不过此刻我或许还没写).当然了,不可能一开始就把所有内容说清楚,刚上手的

Cocos2d-x基础知识

本人在Visual Studio 2013用C++编写.运行时如果出现中文乱码,可在HelloWorldScene.cpp中加入 #pragma execution_character_set("utf-8") .  显示对象Sprite: 1 //加载图片 2 //方法一 3 /*auto logo = Sprite::create("icon.png");*/ 4 5 //方法二 6 7 auto img = Director::getInstance()-&g

Cocostudio学习笔记(2) Button + CheckBox

这篇记录了两个控件的使用流程:Button 和 CheckBox. ---------------------------------------------------------------------------------------------------------------------------- Button ------------------------------------------------------------------------------------

cocos2d-x 3.x之触摸事件

Layer类的一个重要作用就是接受输入事件,它封装了触摸输入的处理接口.一般情况下,我们可以通过setTouchEnabled方法来开启或关闭接收触摸输入.事实上并不是只有Layer才支持接收触摸事件,任何一个游戏元素都可以接收事件,只不过Layer提供了现成的支持. 我们只需通过创建一个事件监听器用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher中,所有事件监听器由这个分发器统一管理,即可完成事件响应. 为一个精灵添加触摸事件的四个步骤 1.创建一个精灵 2.创建一

Cocos2d-x 3.0 中使用单点触摸

Cocos2d-x 3.0 中使用单点触摸 尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2712 在游戏中,经常会用到触摸,大部分游戏也是通过触摸控制游戏角色运动的,在Cocos2d-x 3.0中使用了新的触摸机制,Cocos2d-x 3.0中摒弃了Cocos2d-x 2.0中将要触发的事件交给代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应,在Cocos2d-x 3.0中只需通过创建一个