Cocos 2 d-xにおける属性に関連するマクロ


2.2.4属性
C++のクラスメンバーはメソッドとフィールドのみで,属性とイベントがなく,開発者に不便をもたらした.Objective-Cで提供されるプロパティ機能を実現するためには、getおよびsetアクセサをシミュレートする方法を使用しなければなりません.Cocos 2 d-xは,属性アクセサのメソッド名をgetまたはsetを接頭辞とし,属性名を後接することを規定している.CCNodeには、ノードにタグを付けるためのTag属性など、多くの属性が含まれており、そのアクセサはgetTag()とsetTag(int aTag)であり、その実現原理は以下の通りである.

    
    
    
    
  1. int tag;  
  2. int getTag() { return tag; }  
  3. void setTag(int aTag) { tag = aTag; } 

この例では,属性のタイプはintであり,処理が簡単である.メモリ管理に関わるため,開発において数値タイプ,構造体タイプ,Cocos 2 d−xオブジェクトの処理方法が異なる点は,2.3節で紹介したCocos 2 d−xメモリ管理について読者が理解すると,より深く理解できる.
各プロパティに1つまたは2つのアクセサメソッドを記述することは、重複した作業を回避するために、Cocos 2 d-xは、プロパティの作成を容易にするための一連のマクロを提供します.表2-1には、エンジンディレクトリの「platform/CPlatformMacros.h」に定義されたすべての属性に関連するマクロが列挙されている.
表2-1 Cocos 2 d-xにおける属性関連マクロ
マクロ#マクロ#
説明
CC_PROPERTY
実装されていないプロパティとそのアクセサを定義します.
通常は単純な値タイプで使用されます
CC_PROPERTY_READONLY
属性を定義します.
get
アクセサ、実装されていません
CC_PROPERTY_PASS_BY_REF
リファレンスタイプパスを使用するアクセサのプロパティを定義します
パラメータを渡して、実現していません.通常は構造体タイプに使用されます
CC_PROPERTY_READONLY_PASS_BY_REF
属性を定義します.
get
アクセサ、
参照タイプを使用してパラメータを渡すが、実装されていない
(続き)
マクロ#マクロ#
説明
CC_PROPERTY_READONLY_PASS_BY_REF
属性を定義します.
get
アクセサ、
参照タイプを使用してパラメータを渡すが、実装されていない
CC_SYNTHESIZE

CC_PROPERTY
、アクセサメソッドの実装
CC_SYNTHESIZE_READONLY

CC_PROPERTY_READONLY
、アクセサメソッドの実装
CC_SYNTHESIZE_PASS_BY_REF

CC_PROPERTY_PASS_BY_REF
,
アクセサメソッドの実装
CC_SYNTHESIZE_READONLY_PASS_BY_REF

CC_PROPERTY_READONLY_PASS_BY_REF
,
アクセサメソッドの実装
CC_SYNTHESIZE_RETAIN

CC_PROPERTY
,アクセサメソッドを実現した.
派生元
CCObject
のタイプ、アクセス
器取
Cocos2d-x
のメモリマネージャ
自動メンテナンス
オブジェクトの参照数
これらのマクロはクラスの定義に書けばよい.各マクロには3つのパラメータがあります.varType、属性タイプ、属性タイプがオブジェクトの場合、ポインタの形式に書く必要があります.varName、属性のプライベートフィールド名;funName、プロパティのアクセサ名、つまりgetまたはset接頭辞の直後の部分です.
Cocos 2 d-xが提供するマクロを利用して、上のTag属性定義は次の文で置き換えることができます.

    
    
    
    
  1. CC_SYNTHESIZE(int, tag, Tag)