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