Конвертировать Cocos2d-iphone в Cocos2d-x - PullRequest
2 голосов
/ 19 декабря 2011

Я пытаюсь преобразовать некоторый код 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 ++.Однако в реализации метода я не уверен, что возвращать.Я только что вернул true?

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

1 Ответ

2 голосов
/ 12 января 2012

В target-C вы можете также возвращать объект self в статических методах (имеется в виду в методах класса). Но в c ++. Если вы хотите вернуть текущий объект, вам нужно создать объект для текущего класса и вам нужно вернуть только этот объект. мы не можем использовать «это» напрямую. Итак, сделайте этот метод нестатичным и верните текущий объект класса "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));

Я думаю, это может быть полезно для вас.

...