2011-12-19 73 views
2

我試圖將一些Cocos2d-iphone代碼轉換爲Cocos2d-x代碼,並可以使用一些幫助。在的Cocos2D-iPhone的代碼,它包含以下定義:將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]; 
} 

在試圖轉換這(在大膽的聲明),以C++,我認爲它應該是一個靜態方法。另外,Cocos2d-x文檔建議返回bool,因爲C++中不存在id。但是在方法實現中,我不確定要返回什麼。我只是迴歸真實?

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

回答

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)); 

我認爲這可以對你有所幫助。

+0

我已經將幾個遊戲從cocos2d-iphone移植到cocos2d-x v2.x和v3.x.我閱讀了一些關於C++的書籍以加快速度(C++與Objc截然不同)。我發現挖掘槽cocos2d-x測試和框架源代碼來查看基本模式非常有幫助。 Cocos2d-x框架使用某些模式創建對象並管理必須學習的內存。我強烈推薦的書籍是Scott Meyers爲C++最佳實踐和Robert Nystrom編寫的遊戲編程模式的Effective C++ Digital Collection。 – 2015-04-23 15:52:29