Tuesday, September 24, 2013

c++でCSVファイルを読み込む

Monday, September 23, 2013

複数プロジェクトの起動時〜Workspace integrity ほか

cocos2d-xの autorelease() 関数について

Friday, September 13, 2013

cocos2d-x で自作フォントを使うときの注意(備忘録)

Sunday, September 1, 2013

XCode4.6で、Apple March-O Linker Error の対応


cocos2d-x の CCLabelTTF(テキストラベル)を管理するクラスを自作していたところ、途中からコンパイルが通らなくなって困った。何をしたかというと、
1)CCLabelTTF をメンバ変数に持つ自作クラス(SSMsgBoxDQ)を作成。
2)上記クラス内で自作関数(string 対応のprintfなど)を使用しているので、自作関数群を別ファイル(SSlib.h と SSlib.cpp)に抜き出し、SSMsgBoxからヘッダを読み込む。
3)その状態でコンパイル。

すると、ビルドが失敗し、タイトルのエラー「Apple March-O Linker Error」が出た。
linker command failed with exit code 1 (use -v to see invocation)

だそうである。正直よくわからないので、Webで調べてみると、多かったのが「プロジェクトに新規ファイル(この場合"SSlib.h")が認識されていない。ということ。

そこでプロジェクト>BuildPhases の、ビルド対象ファイルに SSlib.cpp が追加されていることを確認。きちんと追加されている。どうやら問題はここではないようだ。クラスからライブラリのヘッダを読み込んでいるのだが、クラスがおかしいのか、ライブラリがおかしいのか???
//  DQ風ウィンドウマネージャ
//  SSMsgBoxDQ.h

#include "SSlib.h"  // 関数ライブラリ

class SSMsgBoxDQ : public CCObject { ...
あれこれ修正して悩んだ結果、「ライブラリのヘッダ内に関数プロトタイプだけでなく、関数の実体を定義していた」のが原因だと判明。

それまで、「c++の関数ライブラリを作るのに、プロトタイプと関数定義を別々に書かないといかんのだろうか?面倒だから .h プロトタイプを書かないで関数定義し、.cpp は空っぽにしてみよう。」とやっていたので、そのためにコンパイルが通らなかったのだ。別々に書き直したら、エラー解消。横着はいかんなと反省。。。
以下、関数プロトタイプと関数本体をきちんと別々に記述したもの(ソースの抜粋)です。
// 関数ライブラリ "SSlib.h"
string strRepeat(const char* str, int count);
// 関数ライブラリ "SSlib.cpp"
#include "SSlib.h"

// 繰り返し文字列を得る(マルチバイト対応)
string strRepeat(const char* str, int count) {
    CCAssert(count>=0 && count<255, __FUNCTION__);
    
    string sRet;
    for(int i=0; i< count; ++i){
        sRet += str;
    }
    
    return sRet;
}

当面の目標

現在、簡単なゲームを作るため、XCode と cocos2d-xを使って色々な実験をしている。

当面の目標:

・XCode に慣れる
 新しいIDEって、慣れるまでけっこう苦労しますね。これまでVisualStudioに慣れてたので、XCodeはどうにも覚えることが多くてたいへんだ(;´Д`)

・cocos2d-x の作法に慣れる
 新しいフレームワークに慣れるのも、少し時間がかかります。自分の場合、中途半端に難しいことをしようとしてしまうので(汎用性の高いクラスを作ろうと思ったり)、かえってややこしくなる部分があるのかもしれない。

・c++ について、いろいろ思い出す
 phpとか VBだと、型だとかメモリ管理にそこまで厳密でなくてもけっこうコードが書けてしまっていた。ので、そういた部分に非常に厳しい c 系の言語作法を思いだすのが本当に大変だ。宣言とか初期化しなくても、いきなり文字列を使えてしまう言語にくらべ、宣言、型変換、メモリ確保、などをきちんと書かなきゃならない言語は自分にとってまだ「面倒」という感じ。勉強始めて2週間くらいだが、ようやく思い出してきた。

・簡単でいいので、「ゲーム」と呼べるものを作ってみる
 iPhoneで動く「ドラクエの格闘場」めいたものを、勉強のために作ってみようかなと考えている。今は、CClabelTTF を使って、いわゆるRPGの「ステータス表示」みたいなものを作ろうと奮闘中だ。ステータス表示のための、ラベルを管理してくれるクラスを作成してます。

bloggerでmarkdown記法のテスト & ソースのハイライト

「Blogger の記事を markdown で記述する」を参考にさせて頂きました。 なお、記事の通りにやってもどうしても「引用文」の背景色が変わらなくて困ったのだが、CSS設定で解決。このページでは以下のようにしています。
pre {
  background-color: #dddddd;
  color: #000000;
  margin-left: 3%;
  margin-right: 3%;
}
code {
  font-weight: bold;
  font-size: 1em;
  line-height: 1.2;
}
ここからはmarkdownのテスト。
ソースコードのハイライト表示は「コードをハイライトする「Code Prettify」ウィジェット」の記事を参考にさせて頂きました。とても便利です。ありがとうございます。
class Test
{
public:
    Test(){cout<<"コンストラクト\n";
        m_str="あいうえお";};
    void test1(){cout << m_str << "\n";};
private:
    string m_str;
    CCLabelTTF* m_label;
};