ringoringo のすべての投稿

[Cocos2d-x 3.x]Menuなどのボタンを押した(触れた)直後にアクションを起こす方法

Menuなどでボタンを実装すると、ボタンを押して離したときにアクションが行なわれるようになっています。
しかし、それではダメな場合が多々あると思います。(リズムゲームなど)
今回はMenuなどのボタンを押した(触れた)直後にアクションを起こす方法を紹介したいと思います。

まず、Cocos2d-x自体のCCMenuItem.hを開いてください。
そして、

public:
   void setTouchMenuCallback( const std::function<void(cocos2d::Ref*)> &callback );
 
 
protected:
    std::function<void(Ref*)>  m_callback;

このコードを追加してください。

次にCCMenuItem.cppを開いてください。

void MenuItem::setTouchMenuCallback(const std::function<void (cocos2d::Ref *)> &callback)
{
    m_callback = callback;
}
 
 
void MenuItem::selected()
{
    //コールバックに連絡、selectedメソッドはすでに存在するので、これだけ追加
    if (m_callback) m_callback(this);
    
    _selected = true;
}

同じく、このコードを追加してください。

そして、それらのコードが書き終わったあとに、

    auto pSprite = Sprite::create("black.png");
    pSprite->setOpacity(0);
    auto pBtnItem = MenuItemSprite::create(pSprite, pSprite,nullptr);
    //ここから
    pBtnItem->setTouchMenuCallback([this](Ref *sender){
     //ボタンに触れた時の処理を記載する        
    });
    //ここまで
    auto pMenu = Menu::create(pBtnItem, NULL);
    pMenu->setPosition(Point(200, 200));
    this->addChild(pMenu);

これで、setTouchMenuCallback内に処理を記述すればアクションが起こるようになります。

今回の記事は、
http://albatrus.com/main/cocos2d/6753
を参考にさせていただきました。
ありがとうございます。

cocos2dxでadx2 LEを使用するときにはまったこと(効果音やBGM)

いま、cocos2dxでアプリ開発をおこなっているんですが、その際にBGMをつけることにしました。

cocos2dxで音を鳴らすとなると、SimpleAudioEngineとかを使うのが多いと思います。ですが、SimpleAudioEngineだと少し不便なときがあります。
たとえば、イントロを先にながして、それ以降はサビをループさせたいとき。SimpleAudioEngineだとこれをしようとすると少し面倒です。しかし、adx2 LEだとこれも簡単に実装できます。それらのやり方などは別の機会に。

今回のタイトルの「adx2 LEを使用するときにはまったこと」なんですが、自分はテストをAndroidの実機、Nexus7でしていました。このNexus7を使い、adx2 LEで音周りを実装して試してみると無事に動きました。ところが、別の端末で試してみると動かない……

E/AndroidRuntime: java.lang.UnsatisfiedLinkError: Cannot load library: link_image

こんな感じのエラーが出ました。面倒なんで自分の解決方法だけ書きます。はじめから入っているAppActivityを編集します。

package org.cocos2dx.cpp;

import org.cocos2dx.lib.Cocos2dxActivity;

public class AppActivity extends Cocos2dxActivity {
}

から

package org.cocos2dx.cpp;

import org.cocos2dx.lib.Cocos2dxActivity;

public class AppActivity extends Cocos2dxActivity {
	static {
		System.loadLibrary("cri_ware_android_LE");
	}
}

です。
自分はcocos2dxなどは初心者で、参考書を片手にやっているので、今回参考書通りにやってもエラーが出てしまい、大変混乱しました。