<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>カワイデスドットコム｜河合徳光 &#187; Cocos2d-x</title>
	<atom:link href="http://kawaidesu.com/category/cocos2d-x/feed/" rel="self" type="application/rss+xml" />
	<link>http://kawaidesu.com</link>
	<description>経営のコツここなりと気づいた価値は百万両。</description>
	<lastBuildDate>Tue, 24 Mar 2026 14:54:02 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.8.41</generator>
	<item>
		<title>cocos2d-xでボタン付きスクロールメニューを作る方法</title>
		<link>http://kawaidesu.com/cocos2d-x/make_scroll_menu_button/</link>
		<comments>http://kawaidesu.com/cocos2d-x/make_scroll_menu_button/#comments</comments>
		<pubDate>Thu, 26 Jun 2014 11:51:28 +0000</pubDate>
		<dc:creator><![CDATA[digibe]]></dc:creator>
				<category><![CDATA[Cocos2d-x]]></category>

		<guid isPermaLink="false">http://kawaidesu.com/?p=155</guid>
		<description><![CDATA[cocos2d-xで作られたゲームでスクロールできるメニューをよく見かける。例えばクッキーランでクッキーの一覧が見れるページとか。 要するに指でスワイプすると、画面の一部分がスクロールするメニューを作りたい。ので作ってみ [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>cocos2d-xで作られたゲームでスクロールできるメニューをよく見かける。例えばクッキーランでクッキーの一覧が見れるページとか。</p>
<p>要するに指でスワイプすると、画面の一部分がスクロールするメニューを作りたい。ので作ってみた。<br />
<span id="more-155"></span><br />
ちなみにクッキーランのメニューはこんな感じです。</p>
<p><img class="aligncenter size-full wp-image-158" alt="cookie-run" src="http://kawaidesu.com/wp-content/uploads/cookie-run.jpg" /></p>
<p>そして自作したスクロールメニューの完成形はこんな感じ。</p>
<p><iframe src="//www.youtube.com/embed/gCMn1TnYxag?rel=0" height="169" width="300" allowfullscreen="" frameborder="0"></iframe></p>
<p>それでは作成手順。cocos2d-xのバージョンは2.2.3です。</p>
<p>まずはAppDelegate.cppのapplicationDidFinishLaunching関数に解像度を変更するプログラムを追加しておく。</p>
<pre class="brush: cpp; title: ; notranslate">
bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    CCDirector* pDirector = CCDirector::sharedDirector();
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

    pDirector-&gt;setOpenGLView(pEGLView);

    // 解像度を変更する
    pEGLView-&gt;setDesignResolutionSize(480, 320, kResolutionShowAll);
    ・・・
}
</pre>
<p>続いてHelloWorldScene.hにエクステンションを読み込む。</p>
<pre class="brush: cpp; title: ; notranslate">
#include &quot;cocos-ext.h&quot;
USING_NS_CC_EXT;
</pre>
<p>HelloWorldクラスにCCScrollViewDelegateを多重継承し、純粋関数であるscrollViewDidScrollとscrollViewDidZoomを定義しておく。</p>
<pre class="brush: cpp; title: ; notranslate">
class HelloWorld : public cocos2d::CCLayer, public CCScrollViewDelegate
{
public:
・・・
private:
    void buttonCallback(cocos2d::CCNode *pSender);
    void scrollViewDidScroll(CCScrollView* view);
    void scrollViewDidZoom(CCScrollView* view);
};
</pre>
<p>HelloWorld.cppに定数を定義して、init関数の中にスクロールビューを追加する。</p>
<p>スクロールビューはCCScrollViewを使うのだけど、CCScrollViewの中にCCLayerをセットして、さらにCCLayerの中にCCMenuをセットする仕組みで実現できる。</p>
<pre class="brush: cpp; title: ; notranslate">
// レイヤーの大きさ
#define LAYER_WIDTH 480
#define LAYER_HEIGHT 900

// ビューの大きさ
#define VIEW_WIDTH 480
#define VIEW_HEIGHT 320

bool HelloWorld::init()
{
・・・
	// ----- レイヤーを生成する
    CCLayerGradient* pLayerView = CCLayerGradient::create();
	pLayerView-&gt;setAnchorPoint(CCPointZero);
	pLayerView-&gt;setPosition(CCPointZero);
	pLayerView-&gt;initWithColor(ccc4(170,250,120,225), ccc4(70,145,15,255), ccp(0.0f,1.0f));
	pLayerView-&gt;setContentSize(CCSizeMake(LAYER_WIDTH, LAYER_HEIGHT));

	// ----- ボタンメニューを生成する
	CCSprite* pBtnSprite = CCSprite::create(&quot;button.png&quot;);
	CCMenuItemSprite* pBackMenuBtn = CCMenuItemSprite::create(pBtnSprite, pBtnSprite, this, menu_selector(HelloWorld::buttonCallback));
	pBackMenuBtn-&gt;setPosition(CCPointZero);

	CCMenu* pMenu = CCMenu::create(pBackMenuBtn, NULL);
	pMenu-&gt;setPosition(ccp(pLayerView-&gt;getContentSize().width / 2, pLayerView-&gt;getContentSize().height / 2));
	pLayerView-&gt;addChild(pMenu);

	// ----- スクロールビューを配置する
	CCScrollView* pScrollView = CCScrollView::create(CCSizeMake(VIEW_WIDTH, VIEW_HEIGHT));						// 見えてるサイズ
	pScrollView-&gt;setAnchorPoint(CCPointZero);
	pScrollView-&gt;setPosition(CCPointZero);
	pScrollView-&gt;setContentSize(pLayerView-&gt;getContentSize());													// スクロールできる範囲
	pScrollView-&gt;setContainer(pLayerView);
	pScrollView-&gt;setContentOffset(ccp(0, VIEW_HEIGHT - pLayerView-&gt;getContentSize().height), false);			// スクロールの初期位置
	pScrollView-&gt;setDirection(kCCScrollViewDirectionVertical);
	pScrollView-&gt;setDelegate(this);
    this-&gt;addChild(pScrollView);
・・・
};
</pre>
<p>おっと、忘れずに純粋関数とボタンをタップした時の処理も追加しておこう。</p>
<pre class="brush: cpp; title: ; notranslate">
void HelloWorld::buttonCallback(cocos2d::CCNode *pSender)
{
	CCLog(&quot;ボタンがクリックされました&quot;);
}

void HelloWorld::scrollViewDidScroll(cocos2d::extension::CCScrollView *view)
{
}

void HelloWorld::scrollViewDidZoom(cocos2d::extension::CCScrollView *view)
{
}
</pre>
<p>ソースを見た方が早いという人のために<a href="https://github.com/kawai-norimitsu/cocos2dx-scroll-menu">githubに公開</a>しておいたのでどうぞー。</p>
]]></content:encoded>
			<wfw:commentRss>http://kawaidesu.com/cocos2d-x/make_scroll_menu_button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
