読者です 読者をやめる 読者になる 読者になる

cocos2d-x-3.0系 で CDTで実際開発してみる

自メモ)



 で実際の新規作成。

今回はIOS版の某ソフトの移植なので
ファイル名とかとりあえずIOS版に似せましょう=>リファクタリングを実行してみる

名前のリファクタリングが効かないCDT様。。。
HelloWoldScene => ViewController
とか治そうとすると全部手動。。。

コマンド mac win
小文字に変更 (To Lower Case) shift + command + Y Ctrl + Shift + Y
大文字に変更 (To Upper Case) shift + command + X Ctrl + Shift + X

あたりを駆使して define文とかもカキカキ


 次に新規クラスを作ってみる

GameMainViewController cocos2d::Layer

メソッドの追加

static cocos2d::Scene* createScene();
virtual bool init();
virtual void onExit();//rc2あたりから自前で開放しないと駄目らしい
CREATE_FUNC (ViewController);


ここらへんみてると他の人って新規ソース作る時どうしてるのかなーとか
思ってしまったりする

で書いてみたのがこんなかんじだけど
これが期待されるテンプレートなのかな?うーん(゜-゜)

  • GameMainViewController.h
#ifndef __GAME_MAIN_VIEW_CONTROLLER_H__
#define __GAME_MAIN_VIEW_CONTROLLER_H__

//#include <CCScriptSupport.h>//自動生成でくっついてきた
#include "cocos2d.h"                   //<=でも期待されてるのこっちだよね??

USING_NS_CC; //このnamespace宣言が無いと Eventクラス等が参照エラーに成ってハマる☆

class GameMainViewController: public cocos2d::Layer {
public:
	static cocos2d::Scene* createScene();
	virtual bool init();
	virtual void onExit();//rc2あたりから自前で開放しないと駄目らしい
	CREATE_FUNC (GameMainViewController);
};

#endif /* __GAME_MAIN_VIEW_CONTROLLER_H__ */
  • GameMainViewController.cpp
//#include <GameMainViewController.h> //自動生成コード
#include "GameMainViewController.h" //こっちじゃないとローカルのヘッダ探してくれないっぽい

USING_NS_CC; //このnamespace宣言が無いと Eventクラス等が参照エラーに成ってハマる☆
Scene* GameMainViewController::createScene() {
	// 'scene' is an autorelease object
	auto scene = Scene::create();

	// 'layer' is an autorelease object
	auto layer = GameMainViewController::create();

	// add layer as a child to scene
	scene->addChild(layer);

	// return the scene
	return scene;
}

// on "init" you need to initialize your instance
bool GameMainViewController::init() {
	//////////////////////////////
	// 1. super init first
	if (!Layer::init()) {
		return false;
	}

    return true;
}

void GameMainViewController::onExit() {
	Layer::onExit();//自分で明示的に開放処理しろという路線らしい(rc2以降) ☆☆
}

☆☆)
ここまで来ると自作SceneManagerとか作って自前で開放とかやったほうがいいかもしれない。。。
<現在公式でSceneManagerっぽい事やってるクラスは

Director::pushScene()
Director::popScene()

らへん。

 今回はLayerだけだけど、EventDispacher系もここで開放したほうが良い*1とのこと
まあそれもあって自前でやれってことなんだろうけど
cpptestのサンプルじゃこの実装内から普通わからんよ?



まあ補完も効かんしな。。*2
でとりあえず動かすだけ動かしてみると
cocos2d-xのcore側の info/warning/error ログでLogcatが埋まると。。。

Logcatフィルタ


tag:^(?!cocos2d-x)
でとりあえず弾いてるけど なんだかな。。。これ。。。(汗

LOCAL_CFLAGS += -DCOCOS2D_DEBUG=0
  • Application.mk
APP_CPPFLAGS += -DCOCOS2D_DEBUG=0

とかってCCLOGの出力しない設定だけだしな、、、
ってみてたら

これでデバックできるよ。。。(泣) *3

でもこれ調べてみたらalphaの頃からあったバグらしくて
XCodeでは出てないんですかねーこれ(汗

この対処の後であれば


cocos2d-x debug info
でCCLOGが参照できるようなので,LogCatフィルターは下記で良いっぽい

tag:^(?!NativeActivity|dalvikvm|skia|cocos2dx)



ネット情報系のメモ)
基本2系の情報だらけなので置き換えて考える必要があり

3.0系のブログ)

これはたぶん

のはなしと絡む話だと思う。これ物理メモリ512MBのAnd端末*4とかでOOMが発生しやすいらしく
結構大事な話だとか。。。

アンカー座標系の話)

クラス名の相対表

ラムダ式の書き方

シングルトン設計

ScrollView関連の検証



3.0beta => 3.0RC0 移行でやった作業メモ)

  1. 新規プロジェクト作成
  2. ソースコピー
  • Resource
  • proj.android/jni
  • .cproject
  1. ソース変更
    1. Classes


Object* =>Ref*

  1. .project変更(下記のあたり追加)
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
			<triggers>clean,full,incremental,</triggers>
			<arguments>
			</arguments>
		</buildCommand>


	<linkedResources>
		<link>
			<name>Classes</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/Classes</locationURI>
		</link>
		<link>
			<name>cocos2dx</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/cocos/2d</locationURI>
		</link>
		<link>
			<name>extensions</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/extensions</locationURI>
		</link>
		<link>
			<name>Resources</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/Resources</locationURI>
		</link>
		<link>
			<name>scripting</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/cocos/scripting</locationURI>
		</link>
<!-- X-pluginを使うなら追加  start-->
		<link>
			<name>include_protocols</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/plugin/protocols/include</locationURI>
		</link>
		<link>
			<name>include_android</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/plugin/protocols/platform/android</locationURI>
		</link>
<!-- X-pluginを使うなら追加 end-->		
		</linkedResources>

*1:というかreplaceScene呼んだ段階で落ちる

*2:.xproject並みの .cprojectが提供されていないためorz

*3:一応これはrc1の段階で修正確認済。この対処は必要なくなった

*4:4系での安めの端末だと実はこのスペックででてたりする。昔の2.3系はここらへんのスペックらしい