<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>cocos2dxの疑問・対処</title>
<link>https://ameblo.jp/39saaaa/</link>
<atom:link href="https://rssblog.ameba.jp/39saaaa/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>開発中発生した疑問とその解決策を列挙</description>
<language>ja</language>
<item>
<title>ボタンでSpriteを切り替え</title>
<description>
<![CDATA[ ボタン宣言時のλ関数内で、リンク先の方法が使えなかったので試行錯誤した。<br>(cf. http://bribser.co.jp/blog/changeimage/)<br><br>要点は、<br>・ベクター形式で画像を格納<br>・setVisibleで表示非表示を切り替え<br>・ボタン押下時の操作はsetVisibleのみ<br><br>心配なのはメモリの食いだが、とりあえずこの方法を保存しておく。<br>画像切り替えに置けるメモリ消費はないはず。<br><br>以下コード<br><br>    // 親スプライト<br>    Sprite* prnt = Sprite::create();<br>    // 各画像を子スプライトとして登録<br>    Vector<sprite*> childSpr = Vector<sprite*>();<br>    std::string pngName;<br>    for (int i = 0; i &lt; 4; i++) {<br>        pngName = StringUtils::format("%d.png", i);　　　//適当に<br>        childSpr.pushBack(Sprite::create(pngName));<br>        // すべて非表示で登録<br>        childSpr.at(i)-&gt;setVisible(false);<br>        childSpr.at(i)-&gt;setPosition(prntPos);    //prntPosは適当な位置、前もって宣言<br>        prnt-&gt;addChild(childSpr.at(i));<br>    }<br>    // スコープ番号のスプライトを表示<br>    childSpr.at(_scpNum)-&gt;setVisible(true);    //スコープ番号はグローバル変数で宣言<br><br><br>    //test button<br>    auto chgBtn = MenuItemImage::create("button.png",<br>                                            "pressed.png",<br>                                            [this, childSpr](Ref* ref){<br>                                                childSpr.at(_scpNum)-&gt;setVisible(false);<br>                                                _scpNum++;<br>                                                if (_scpNum &gt;= SCOPE_PNG_NUM) {  //最大画像登録数<br>                                                    _scpNum = 0;    //最初に戻る<br>                                                }<br>                                                childSpr.at(_scpNum)-&gt;setVisible(true);<br>                                            });<br></sprite*></sprite*>
]]>
</description>
<link>https://ameblo.jp/39saaaa/entry-11993190795.html</link>
<pubDate>Sun, 22 Feb 2015 17:16:13 +0900</pubDate>
</item>
<item>
<title>ターミナルからのコンパイル、etc.</title>
<description>
<![CDATA[ iOS-&gt;Xcode<br>Android-&gt;ターミナルによるコンパイル、動作確認のみでOK<br><br>iOS, Android両方に対応させたいが、基本はXcodeによる開発を行っている。<br>現在、Android側はちゃんと動くか確認のみでよいためEclipseは不要、コマンドラインでのコンパイル、genymotionでの動作確認のみができればよいという状況。<br>(Eclipseは開発が停止するような鬱陶しいエラーをよく吐く)<br>したがって冒頭のような条件で動かしている。<br><br>そこで発生している疑問点<br><br>・画面の縦横固定方法ー＞マニフェスト？<br>今は横固定となっている(Android)<br>どこで設定するのか不明。<br><br>解決方法がわかり次第追記予定。<br><br><br><br>その他現在の疑問点<br><br>・座標が異なる<br>同じ原点でも画面左下端か中央か（cocos2d-x, アンカーポイント）<br>状況として、<br><br>①DrawNodeを生成<br>-&gt;setPositionせずaddChildしている。そのためか画面中央(アンカーポイント？)に設置される。<br>このDrawNodeに対してgetPositionを行うと、画面中央（初期位置）を原点とする座標を返す。<br><br>②Spriteを生成<br>-&gt;setPositionする。この座標指定は左下が原点となっている。<br><br>問題<br>②のSpriteに対してgetBoundingBox, containsPointを行うと片方の座標で判断するため座標変換を行わなければいけない状況。<br>疑問としては①の座標がなぜ中央を原点とするか。<br><br>対応<br>単純に①を座標変換している。<br>当座は問題ないが気持ち悪い。
]]>
</description>
<link>https://ameblo.jp/39saaaa/entry-11992326962.html</link>
<pubDate>Fri, 20 Feb 2015 16:04:50 +0900</pubDate>
</item>
</channel>
</rss>
