2

Cocos2d-iphone のコードを Cocos2d-x のコードに変換しようとしていますが、少し手助けが必要です。Cocos2d-iphone コードには、次の定義が含まれています。

@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];
}

これ (太字のステートメント) を C++ に変換しようとすると、静的メソッドである必要があると思います。また、C++ には id が存在しないため、Cocos2d-x のドキュメントでは bool を返すことを推奨しています。ただし、メソッドの実装では、何を返すかわかりません。true を返すだけですか?

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

4

1 に答える 1

2

Objective-Cでは、静的メソッドでも自己オブジェクトを返すことができます(クラスメソッドを意味します)。しかし、C++では、現在のオブジェクトを返したい場合は、現在のクラスのオブジェクトを作成し、そのオブジェクトを返す必要がありますそれだけ。「this」を直接使用することはできません。したがって、このメソッドを非静的にして、現在のクラス オブジェクト「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));

これはあなたに役立つと思います。

于 2012-01-12T06:08:24.640 に答える