2011-12-19 14 views
2

私はCocos2d-iphoneコードをCocos2d-xコードに変換しようとしています。 Cocos2d-iphoneのコードでは、それは次のような定義が含まれます。C++にこの(太字の文)を変換しようとしてCocos2d-iphoneをCocos2d-xに変換する

@interface CCPanZoomControllerScale : CCScaleTo { 
    CCPanZoomController *_controller; 
    CGPoint _point; 
}+(id) actionWithDuration:(ccTime)duration scale:(float)s controller:(CCPanZoomController*)controller point:(CGPoint)pt; 

@end 

@implementation CCPanZoomControllerScale 

+(id) actionWithDuration:(ccTime)duration 
        scale:(float)s 
       controller:(CCPanZoomController*)controller 
        point:(CGPoint)pt 
{ 

return [[[self alloc] initWithDuration:duration scale:s controller:controller point:pt] autorelease]; 
} 

を、私はそれが静的メソッドであるべきと考えています。また、Cocos2d-xドキュメントでは、idがC++に存在しないため、boolを返すことを推奨しています。しかし、メソッドの実装では、私は何を返すか分からない。私は真実を返すだけですか?

Objective-Cで

static bool actionWithDuration(ccTime duration, float scale, PanZoomController* controller, CCPoint point){ return true; }

答えて

2

、あなたは現在のオブジェクトを返すようにしたい場合は、あなたがオブジェクトを作成する必要があり、(クラスメソッドにおける手段).But C++では、静的メソッドで自己のオブジェクトを返すことができます現在のクラスのために、そのオブジェクトだけを返す必要があります。私たちは "this"を直接使用することはできません。したがって、このメソッドを非staticとして、現在のクラスオブジェクト "this"を返します。

以下に示すようにメソッド宣言を指定できます。

CCAction* className::actionWithDuration(ccTime duration, float scale, PanZoomController *controller, CCPoint point) 
{ 
    return (your class object); 
} 

あなたは、このメソッドを呼び出して、その特定のクラスのオブジェクトを作成し、例えばオブジェクト上でこのメソッドを呼び出して、

PanZoomController *controller = new PanZoomController(); 
CCPanZoomControllerScale *scaleController = new CCPanZoomControllerScale(); 
sprite -> runAction(scaleController -> actionWithDuration(duration, scale, controller, pt)); 

したいときはいつでも、私はこれがあなたのために役立つことができると思います。

+0

私はcocos2d-iphoneからcocos2d-x v2.xとv3.xにいくつかのゲームを移植しました。私はC++についていくつかの本を読んでスピードアップしています(C++はObjcとは大きく異なります)。私は基本パターンを見るために、cocos2d-xテストとフレームワークのソースコードを掘り下げることが非常に役立つことを発見しました。 Cocos2d-xフレームワークは、特定のパターンを使用してオブジェクトを作成し、学習する必要があるメモリを管理します。私は、Robert NystromのC++ベストプラクティスとゲームプログラミングパターンのScott MeyersによるEffective C++ Digital Collectionを強くお勧めします。 –

関連する問題