[Cocos2d-x]Cocos2d-x 3.3 正式版リリース

Cocos2d-x 3.3 の正式版がリリースされたようです。

http://www.cocos2d-x.org/news/387

ここを見る感じだと3D機能の強化が多いようですかね。

近々自分のプロジェクトもバージョンアップしてみようと思います。

[UE4]AActor::Tick()を使用する際の設定メモ

AActorを継承したクラスで、Tick()を使用する際の設定メモです。
コンストラクタで以下のようにしてあげるとTick()が毎フレ呼ばれるようになります。

AHoge::AHoge(const class FPostConstructInitializeProperties& PCIP)
	: Super(PCIP)
{
	// Tickを毎フレ呼び出せるようにする
	PrimaryActorTick.bCanEverTick = true;
	// Tickグループの設定(デフォルトはTG_PrePhysicsです)
	PrimaryActorTick.TickGroup = TG_PrePhysics;
}

void AHoge::Tick( float DeltaSeconds )
{
	Super::Tick( DeltaSeconds );
}

Cocos2d-x 3.2 の開発環境構築手順

3.0から放置していましたが、3.1をすっとばして、Cocos2d-x 3.2 の開発環境手順をまとめました。

ぎじゅつめも | Cocos2d-x開発環境の構築

3.0 で作成しているローカルのプロジェクトを3.2にアップデートする作業をしないとだめなんですが、それはまた後日・・・。

(C++11)テンプレート使用時の primary-expression token なビルドエラー対応方法メモ

C++11のテンプレートメソッド内で別のテンプレートを呼び出している箇所で、特定のコンパイラでコンパイル時、
error: expected primary-expression before ‘>’ token
なエラーに悩んでしまったので解決方法をメモします。
今まで見たことないので多分C++11からの仕様だと思います。

コードは以下のような感じになります。


// テンプレートなクラス
template<typename T1>
class TemplateClass
{
public:
	template<typename T2> T2 func() { return T2(); }
};

// テンプレートな関数
template<typename T1, typename T2>
void templateFunction()
{
	TemplateClass<T1>	t;
	t.func<T2>();		// < ここでエラーがでます
}

// templateFunctionをコール
void main()
{
	templateFunction<int,float>();
}

上記のコードをビルドするとこんなエラーが出ます。

hoge.cpp: In function 'void templateFunction()':
hoge.cpp:xxx:xxx: error: expected primary-expression before '>' token
   t.func<T2>();
            ^
hoge.cpp:xxx:xxx: error: expected primary-expression before ')' token
   t.func<T2>();
              ^

VisualStudioでは出ずに、gccで出ます。
templateFunction()内の

t.func<T2>();

を以下のように書き換えるとビルドエラーが解消されます。

t.template func<T2>();

Cocos2d-x 3.0 rc0 の開発環境構築手順

Cocos2d-x 3.0 rc0 がリリースされました。
beta2から、そこまで大きな変更は多分ないと思いますが、セットアップ方法やプロジェクト新規作成方法の手順などが少し変わりました。

とりあえずHelloWorldまでの手順をWindows版、Android版共にWikiにまとめました。

ぎじゅつめも – Cocos2d-x開発環境の構築

setup.pyの導入により、前よりわかりやすくなったかもしれませんね。

さて、beta2で作成したプロジェクトをrc0に対応しないと・・・

静的コンストラクタ

クラスの静的コンストラクタを実現する方法を紹介します。
起動時に一度だけ行いたい処理を書く時などに便利です。
ただし、他のstaticなオブジェクトと同じく、初期化順番は保証されない点は注意してください。

ヘッダはこんな感じ。

class Hoge
{
private:
	//! 静的コンストラクタ用のprivateな構造体
	struct Construct
	{
		Construct()
		{
			// ここに初期化処理を書きます
			sm_hoge = 0;
		}
	};
private:
	static Construct	sm_construct;	//!< 静的コンストラクタ
	static int			sm_hoge;
};

cpp側はこんな感じになります。

Hoge::Construct	Hoge::sm_construct;
int				Hoge::sm_hoge = 0;

ご覧のとおり、今回のパターンだとsm_hogeはもともと0で初期化しているので静的コンストラクタで処理している内容に意味はなかったりします。

Cocos2d-xプロジェクトをVisualStudioでビルドした際に出る警告 C4819 の解消方法

VisualStudio2013で、Cocos2d-xのプロジェクトをビルドすると CCSAXParser.h 等で、
warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
な警告が出てしまいます。

CCSAXParser.h は、utf8形式のエンコードなのですが、『BOM』が付いていません。
VisualStudioのutf8はBOM付きじゃないとダメだという噂です。
というわけなので、BOMを付けて保存し直しましょう。

VisualStudio2013上で、エンコードの変更ができます。

CCSAXParser.hを開いてからツールバーのファイル>保存オプションの詳細設定
を選択します。
エンコードを
Unicode(UTF-8 シグネチャ付き) – コードページ65001
にしてOK。ファイルを保存します。これで、utf8のBOM付きで保存されます。

エンコード変更の必要があったファイルは
CCSAXParser.cpp
CCSAXParser.h
CCScale9Sprite.h
CCTMXXMLParser.cpp
MciPlayer.h (これはすでに文字化けしていました)
CCFont.cpp (これはエンコード変更するとwarning C4566: ユニバーサル文字名 ‘\u00A1’ によって表示されている文字は、現在のコード ページ (932) で表示できません な警告が新たに発生してしまうので、スルーしました)
plane.c
vec3.c
になります。

この状態でリビルドすれば、警告がなくなっているのが確認できると思います。

*Cocos2d-xのバージョンは 3.0 beta2 です。

CocoStudioのUI Editorで出力したUIを再生する

前回のAnimation Editorに続き、
Cocos2d-x 3.0 beta2 で
CocoStudioのUI Editorで出力したアニメーションを再生する手順をまとめました。
windows版、android版で再生しています。
CocoStudioのUI Editorで出力したUIを再生する | ぎじゅつめも

CocoStudioのAnimation Editorで出力したアニメーションを再生する

Cocos2d-x 3.0 beta2 で
CocoStudioのAnimation Editorで出力したアニメーションを再生する手順をまとめました。
windows版、android版で再生しています。
CocoStudioのAnimation Editorで出力したアニメーションを再生する | ぎじゅつめも

cocos2d-x 3.0 のTextureCacheのインスタンス取得方法

TextureCache::getInstance()->addImage(“hoge.png”);

な感じで書くと、

warning C4996: ‘cocos2d::TextureCache::getInstance’: が古い形式として宣言されました。
cocos2d\cocos\2d\cctexturecache.h(68) : ‘cocos2d::TextureCache::getInstance’ の宣言を確認してください。

てな具合でコンパイル時に警告が出ました。
TextureCacheの宣言してあるヘッダを見てみると、3.0からはDirectorを経由してTextureCacheのインスタンスを取得してねと書いてありました。

ということなので、

Director::getInstance()->getTextureCache()->addImage(“hoge.png”);

これが正解みたいです。
警告も解消されました。よかったよかった。