cocos2d-xはじめました

はじめます
といっても、会社でもcocos2d-xは触っているんですが、バージョンが2系という事と、
申請、公開までの流れを自分で掴んでみたいという事もあり、独自でさくっと出してみようと。

cocos2d-x

いつのまにかalphaからbetaに変わっていた。
cocos2d-x-3.0beta
で試す。

環境は

  • mac os x 10.8.5
  • xcode 5.0.2
  • cocos2d-x-3.0beta.zipをダウンロードし、解凍されたディレクトリをcocos2d-xにリネームしたら、
    自分の開発環境の適当な所にコピー

    後は、README.mdに書いてある通り。
    2013/1/8時点で一部README.mdに誤植?があり、そこだけ修正してます。
    project-creater.pyというのは無く、create_project.pyになっている

    $ cd cocos2d-x/tools/project-creator
    $ ./create_project.py -n mygame -k com.your_company.mygame -l cpp -p /Users/username/mygame
    $ cd /Users/username/mygame
    

    出来上がった、proj.ios_macのmygame.xcodeprojを立ち上げビルド…

    hello world

    こんにちは、世界!

    次からはこれを元に色々いじっていく予定。 楽になったなぁ、、

    luaのシングルトン

    lua勉強中。

    luaってスクリプト毎にメモリ常駐なの? なんなの? どうなってるの?
    って位luaを知らないので、とりあえず常駐かつ一つしか保証されないもの=シングルトンが欲しいという事で、
    luaでシングルトンを書くにはのメモ。

    SINGLETONS IN LUA

    うむ。今の俺にはまだちゃんと理解できぬ。
    きっと追記有り
    ↓↓↓↓↓

    6時間後追記

    こんな感じになりました

    
    Singleton = {}
    
    local _instance = nil
    
    -----------------------------------------------------------------------------
    -- メンバ変数初期化
    -- @note メンバ変数はここに追加する
    --
    -----------------------------------------------------------------------------
    function Singleton:initialize()
        self._hoge = "hoge"
        self._piyo = "piyo"
     end
    
    function Singleton.getInstance()
        if not _instance then
            _instance = Singleton;
            _instance:initialize()
            setmetatable(_instance, { __index = Singleton })  
        end
    
        return _instance
    end
    
    function Singleton:getHoge()
        return self._hoge
    end
    
    function Singleton:getPiyo()
        return self._piyo
    end
    
    function Singleton:new()
        print('Singleton cannot be instantiated - use getInstance() instead');
    end
    
    return Singleton
    

    参考サイトでは無名関数(?)でgetInstance内にメソッド書く形式だったけど、
    外に出したかったんで

    setmetatable(_instance, { __index = Singleton })  
    

    で外で定義できるようにしました。

    なんか、もう一段階コンストラクタ周りを上手く呼び出せる気がするけど、
    今の知識ではこれが限界。

    luaの本を読もう、、

    ローカルでのhttpのパケットキャプチャコマンド

    ネイティブアプリとサーバーのhttp通信でパケットキャプチャをしたい時に、
    しょっちゅうコマンドを忘れるのでメモ
    lo0なのはローカルでテスト中だから
    port8000なのはdjangoのデフォルト値でテスト中

    tcpdump -A -s 0 -i lo0 dst or src host localhost and port 8000
    

    シングルトンのテンプレートって

    久々にC++でシングルトンを書く事があって、昔はテンプレート化してたなーと思いつつ
    「シングルトン テンプレート」で、ぐぐれば色んなエントリー出るんですね。
    多様な書き方があるなーと思いつつ、久々にシングルトン書いてみた。

    #ifndef __SINGLETON__
    #define __SINGLETON__
    
    /*! @class Singleton
        @brief シングルトン
    */       
    template <typename T> class Singleton
    {
    private:
        /** コンストラクタ */
        Singleton(void)
        {
        }
    
        /** デストラクタ */
        ~Singleton(void)
        {
        }
    
        /** コピーコンストラクタ(使用禁止) */
        Singleton(const Singleton& single);
    
        /** 代入演算子(使用禁止) */
        const Singleton& operator = (const Singleton& single);
    
    public:
        /*! 共通ポインタの取得
        @param[in]      none
        @return         T 唯一の静的インスタンス
        @exception      none
        */
        static T* sharedSingletonPtr(void)
        {
            if (!_pSingleton) _pSingleton = new T();
            return _pSingleton;
        }
    
    private:
        static T*  _pSingleton;            //!< 唯一のインスタンス
    };
    
    //---- 唯一のインスタンス静的変数
    template <typename T> T* Singleton<T>::_pSingleton = NULL;
    
    #endif  //__SINGLETON__
    
    

    で、これを使う側。

    class Hoge : public Singleton<Hoge>
    {
    friend Singleton<Hoge>;
    private:
    /** コンストラクタ /
    Hoge();
    /* デストラクタ */
    virtual ~Hoge();
    
    public:
    int getPiyo()
    {
        return piyo;
    }
    private;
    int piyo;
    }
    
    /*! @brief アクセスインターフェース
    / 
    inline Hoge* HogePtr(void)
    {
        return Singleton<Hoge>::sharedSingletonPtr();
    }
    

    言いたい点はここ

    friend Singleton<Hoge>;
    private:
    /** コンストラクタ /
    Hoge();
    /* デストラクタ */
    virtual ~Hoge();
    

    コンストラクタ部分をpublicにしている人もいるけど、そもそもpublicにしてしまうと、
    Hoge hoge;
    でインスタンスつくれてしまう

    wikiでもいうとおり、

    そのクラスのインスタンスが1つしか生成されないことを保証することができる

    というからには、privateにする必要がある。
    ただ、そうなると、singleton.hで

    if (!_pSingleton) _pSingleton = new T();
    

    が呼び出せなくなってしまうので、

    friend Singleton<Hoge>;
    

    でSingletonからはアクセス可能にする為、穴をあける。

    // Example:
    HogePtr()->getPiyo();
    

    UnityをiPhoneで試してみた

    はれてiOS Developerの仲間入りしたので、ひっかかっていた証明書を落としてくる

    iOS Developer Programに行って
    メンバーセンター→ログイン
    Certificates, Identifiers & Profilesというのがそれっぽいのでクリック!

    iOS AppsのCertificatesがそれっぽいのでクリック!!

    証明書っぽいのがでるので、その中にクリックできそうなCertificate Signing Request という部分があったのでクリック!!!

    What type of certificate do you need?
    

    坊やはどんな証明書が欲しいんだい?
    的な事を聞かれるので、言ってやったんだ
    開発(iOS App Development)するのさ! 配布(App Store and Ad Hoc)も予定してるよ!ってね

    続きは[iOS Provisioning Portalがついにリニューアル! とりあえずどんなものか]が詳しいので割愛。

    キーチェーンアクセスで証明書を作っておく必要はある。

    証明書もダウンロードできて、キーチェーンアクセスに登録できたので、これでいけるか!?と
    再ビルドしてみたけど、まだできず、、

    App IDを登録する必要があるらしい

    [Xcodeで実機デバッグをするまでの手順(スクリーンショット付き)]とかを参考にしつつやってみたけど、

    App ID Suffixは
    Explicit App IDは実際に配布する時にはユニークで取得して、
    Wildcard App IDは開発用で使い回すように取得しとけばいい感じかなぁと、、

    App Serviceも登録後に編集できるようなのでスルー


    Unity側
    Bundle Identiferを変更する
    最初、APP IDだけを入れていたけど怒られたので
    com.{APP_ID)
    的な名前にしたら通った、、 ここら辺ルールがあるのかな

    iPhone0928

    という感じでビルドしたらiPhoneで表示する事ができました!
    ちゃんとTouchも動いてていい感じ! 操作性はボロボロだけど!

    iOS Developer Program 購入だん

    さぁUnityでキャラも出た事だし、iPhoneでやってみるかーー
    と試してみたら

    Code Sign error: The identity 'iPhone Developer' doesn't match any valid, non-expired certificate/private key pair in your keychains
    

    証明書期限切れてるよ!な感じで怒られた。。

    エラーメッセージでググるとキーチェーンをこねこねすると直るという事なんですが、

    そもそも証明書なんて取ってない!
    に登録が必要という事なので登録してきました。

    登録手順は参考に。

    で、Activation Codeが送られるのに結構かかるという記事をちょこちょこ見てたのですが、
    僕の場合は10分くらいで返信がが。

    メールでActivation Codeが送られてくるので、それを選択すると
    We are unable to activate your Apple Developer Program membership
    まさに、ここで詰まる、、、
    この時点で8000円で購入しているので、認証とおらないとちょっとイラッとくる。
    ソシャゲでいうとガチャ引いたけどカードは付与されないようなもん。

    ただ、その下に「連絡メール送るからちょっと待ってね!」的な事が英語で書かれてたので、
    信じて待つ。5分待つ。10分待つ。30分待つ。1時間待つ。寝る。

    次の日の朝にApple Developer Program Support(日本語窓口)からメールが!
    英語で質問されたらどうしよう! 不安で寝れない!
    という事も無く普通に寝てたんですが、日本語でとりあえずヨカタ!

    内容的には
    Apple IDに登録している名前と住所を全部ローマ字に変更してね!
    という、、 海外の方が目diffでアカウント管理してるんかね。

    いわれた通りローマ字で変更し、Supportに返信(日本語で

    数時間後に再度返信が来て、
    またActivation Codeを押してね! それでうまくいくよ!
    という内容だったので、前のメールを探してActivation Codeを再選択!
    →この時点で前のメールが迷惑メール入りしてて探すのに時間ロス

    晴れて登録できました!

    え、iOSに転送はまだですよ

    mecanim触ってみた

    モデルの骨を入れるのが一番苦労、、
    blenderで頑張ってたけど、結局みじょに骨いれてもらいました。

    モデルはここからDL
    ってか色んなモデルがあるので、これはこれで個人でなら楽しめるかも?
    製品とするなら色々問題でそうですがが

    アニメーションはAsset Storeでmecanimで検索するとひっかかる無料のやつです。
    Mecanim Lomotion StarterとかMecanim Example Scenesとかね!

    あのアルタイルがこんなに簡単に動くのはUnityだけ!

    sublime text 3めも。emacs風(時々追記)

    ログインすら忘れてて、1年以上放置してましたが、久々のメモ

    ここ1年はお仕事の方で、webアプリ2〜3本リリースしたり、数回心折れそうになったりしてました。

    で、最近新しい仕事に移ったという事&unity熱がまた発足したので、一時復活中です。

    とりあえず気分転換の一つとしてエディタを乗り換えようかと思った訳で。
    さよならemacs! ありがとうemacs!

    と、いうわけでここからは自分用メモ。
    細かいインストール方法とかは調べたらたくさん転がってるので割愛。
    インストールしたパッケージとかを書いてます。

    sublime text 3のダウンロード

    ここからダウンロード


    package control

    package controlは入れなきゃ始まらない。

    ↑が見れなかった時の為の呪文。
    View→Show Consoleに入力

    import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

    sublemacsproのインストール

    emacsのキーバインドにしてくれるパッケージ。
    command + Shift + PでPackage controlを開き

    Package Control : Add Repository

    https://github.com/grundprinzip/sublemacspro

    を入力。

    Package Control:Install Package

    sublemacspro

    が出てくるので、インストール。


    さらにemacs風に

    カーソル移動はsublemacsproを入れるだけでemacsに近づいたけど、
    ctrl + m(改行)とかが効いてない。
    Preferences→Key Bindings – User
    に追記。
    Userの方を優先してくれるらしい。

    emacsでは鬼軍曹を入れていたので、それにそった形で設定を上書きする。
    多分まだ足りない

    [
    	// Key bindings like Emacs.
    	{"keys": ["ctrl+m"], "command": "insert", "args": {"characters": "\n"}},
    	// close
    	{ "keys": ["ctrl+x","ctrl+k"], "command": "close" },
    	// save
    	{ "keys": ["ctrl+x","ctrl+s"], "command": "save" },
    	// side_bar focus
    	{ "keys": ["ctrl+x","l"], "command": "focus_side_bar" },
    	// tab
    	{ "keys": ["ctrl+i"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
    	{ "keys": ["ctrl+i"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
    		"context":
    		[
    			{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
    		]
    	},
    	// find show panel
    	{ "keys": ["ctrl+s"], "command": "show_panel", "args": {"panel": "find", "reverse": false} },
    	// Find panel key bindings
    	{ "keys": ["ctrl+s"], "command": "find_next", "context":
    		[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
    	},
    	{ "keys": ["shift+enter"], "command": "find_prev", "context":
    		[{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
    	},
    ]
    

    ※追記の可能性あり


    Theme

    SodaとかFlatlandとか試してみたけど、Phoenixに落ち着きました。

    Install packegeからPhoneixを追加して、
    Settings -Userに追記

    	"indent_to_bracket": true,
    	"phoenix_color_green": true,
    	"phoenix_eighties": true,
    	"phoenix_highlight_current_tab": true,
    	"phoenix_sidebar_tree_large": true,
    	"phoenix_solid_current_tab": true,
    	"theme": "Phoenix Dark.sublime-theme",
    	"translate_tabs_to_spaces": true
    

    細かい設定はここ見ながらで。


    おまけ

    やたらキーリピートが遅く、KeyRemap4でも変わらないので調べてみたら

    defaults write com.sublimetext.3 ApplePressAndHoldEnabled -bool false
    

    をターミナルで叩かないといけないらしい、、
    sublime2の場合は2の所を3にしたらうまくいく?

    Ajile japan 2012が気になる



    アジャイルサムライを執筆したJonathan Rasmussonも講演に来るとか
    セッションが同時進行なので、誰か誘って行かないとなぁ
    大阪だけど時間合わせたい

    CyberX勉強会 #1に行ってきた

    昨日
    スマートフォン版のソーシャルアプリができるまで HTML5 + JavaScript
    という、SmartPhone対応に関しての勉強会があるというので、行ってきました。

    それに関してのメモです。
    ラブホ街に一人で突っ込みかけたので、時間ギリギリでした。。


    スマートフォン版のソーシャルアプリができるまで HTML5 + JavaScript
    ■発表者
     株式会社Cyber X CTO 白井 英さん

    ■SmartPhoneへの展開
     ・各Platform(mixi,モバゲ,GREE)の開設が始まっている
     ・今まではFeaturePhoneが圧倒的台数だったが、今後はSmartPhoneが主流になるはず
     ・FeaturePhoneで使用していたアプリのデータを引き継げるのを
      各PlatFormが推奨している
     ・FeaturePhone,SmartPhone共に同じアプリ上でコミュニケーションがとれる

    ■コーデマニアの例(サムザップ事例)
    ・Feature Phone版を最初に出した
    ・SmartPhoneに対応
     →FeaturePhoneとユーザデータは共有
    ・開発方針
     →FeaturePhoneを元にSmartPhone用のソースを一から記述
     →別々のソース管理(ほぼ力技)
    ・大変なのでは
     →やってみたら使い回せる所が多い
     →FeaturePhoneのイベント開始とほぼ同時にSmartPhone版も開始
    同じイベント同時に楽しめる
    ・運用してわかった事
     →SmartPhoneユーザーは20代の女性が多い

    ■星空バータウンの例(CyberX事例)
    ・FeaturePhoneは対応している
    ・SmartPhoneに対応
     →ユーザーデータは共有
    ・開発方針
     →FeaturePhoneとSmartPhoneでソースを共通化
     →必要な部分だけ書き換え、使い分けを極小化して効率化を目指す
    →FeaturePhoneの機能をうまく流用
    →FlashLiteの部分は演出が多いのでぱらぱらアニメーションへ自動変換
    →HTML5 + CSS3 + javaScript使用
    ・SmartPhoneでの問題。Flashに関して
     →FlashLiteで作成した部分の置き換え
     →Flashを画像に変換するツールを作成した。
    →SWFをフレーム毎に画像キャプチャしてコマ送りで作成(プログラムで自動化)
    →既存のFlashLiteの資産をそのまま流用できた
    ・ぱらぱらアニメーションってアニメgifでいいのでは
    →レスポンスが端末依存。iPhoneだと遅かった
    →javascriptで画像をjavascriptで切り替え表示
     →canvasでごりごり
    ・SmartPhoneでの問題。UIに関して
     →アイテムのインタラクティブな配置処理はjavaScriptで実装
      →ドラッグアンドドロップとかスワイプとかは重要だと思う
    ・javascriptのライブラリ
     →JQueryを使用

    ■その他
     ・FeaturePhone,SmartPhoneで共有できなかった部分は?
      →PHPフレームワーク使用。MVC準拠
      →モデルはそのまま使用。ビューはFeaturePhone,SmartPhoneで書き換え
      →コントローラーも流用したかったが、現実的には無理だった
       →必要なとこだけオーバーライドして書き換える
       →2〜3割書き換えれば済むと思っていたが見積もりが甘かった
       →主に画面遷移が変わるものは書き換えないといけなかった
     ・素材の使い回しに関して
      →SmartPhoneだと荒いのがばれてしまうので、画像アイコンなどは
       サイズを4倍にして書き出しなおした
     ・開発期間
      →現在3ヶ月目。製作中。


    SmartPhoneでのアジャイル開発
    ■発表者
     株式会社CA Beat 小田 雄帆さん
    ■アジャイルとは
     「俊敏な」とか言う意味
    ■特徴
     ・プロセスツールよりもコミュニケーションを重視する
     ・既存の開発手法をマスターし尽くした達人向け
     ・ドキュメントよりも動作するソフトウェアを重視する
      →ドキュメントが残らないため責任の所在が不明確


    ぱらぱらアニメーションってスプライトアニメーションの事かと。まんま聞いた内容をメモったのでぱらぱらアニメーションって書いてます。
    ベタ移植程度なら時間はさほどかからないでしょうが、SmartPhoneならではのUIにどこまでこだわるかが開発期間に直結するって事ですかね。
    ある意味予想通りでもあり、甘く見てると地獄を見そうでもあり、、

    その後懇親会にも参加し、色んな方に興味深い話を聞かさせて頂きました。
    アジャイルを試しに広めて行きたいなぁと思うこの頃。
    テストは大事だよ!

    1 / 212