将Cocos2d-iphone转换为Cocos2d-x

时间:2011-12-19 18:39:59

标签: cocos2d-iphone cocos2d-x

我正在尝试将一些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 ++时,我认为它应该是一个静态方法。此外,Cocos2d-x文档建议返回bool,因为id不存在于C ++中。然而,在方法实现中,我不确定要返回什么。我只是回归真实吗?

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

1 个答案:

答案 0 :(得分:2)

在objective-C中,你也可以在静态方法中返回self对象(类方法中的意思)。但是在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));

我认为这对你有帮助。