Передача переменных в функцию в цели C - PullRequest
2 голосов
/ 30 июня 2011

Во-первых, позвольте мне объяснить, что я гуглил это, и я не могу найти четкого ответа на это; но я считаю, что это потому, что я использую неправильную терминологию.

Я перемещаю мяч в какое-либо место в приложении cocos2d / chipmunk ipad, например:

// Determine speed of the target
        int minDuration = 2.0;
        int maxDuration = 4.0;
        int rangeDuration = maxDuration - minDuration;
        int actualDuration = (arc4random() % rangeDuration) + minDuration;

        NSLog([NSString stringWithFormat:@"%d",actualDuration]);

        // Create the actions
        id actionMove = [CCMoveTo actionWithDuration:0.2 
                                            position:ccp(location.x, location.y)];
        id actionMoveDone = [CCCallFuncN actionWithTarget:self 
                                                 selector:@selector(spriteMoveFinished:)];
        [ball runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];

        [ball retain]; 

Я хочу поместить этот фрагмент кода в функцию (возможно, называемую «методом» в Obj-C, верно?) И передать в имени спрайта (в данном случае это «шарик») координату x (location.x) и координата y (location.y). Шар - это CCSprite, а локации - целые числа.

Я новичок в этом, поэтому, если вы предлагаете решение, пожалуйста, дайте мне знать, как его очистить (например, освобождение памяти).

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Здесь у вас есть фрагмент кода, который вам подходит:

  • (void) moveBall: (CCNode *) ball toLocation: (CGPoint) location {

// Определить скорость цели int minDuration = 2,0; int maxDuration = 4.0; int rangeDuration = maxDuration - minDuration; int actualDuration = (arc4random ()% rangeDuration) + minDuration;

    NSLog([NSString stringWithFormat:@"%d",actualDuration]);

    // Create the actions
    id actionMove = [CCMoveTo actionWithDuration:0.2 
                                        position:ccp(location.x, location.y)];
    id actionMoveDone = [CCCallFuncN actionWithTarget:self 
                                             selector:@selector(spriteMoveFinished:)];
    [ball runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];

    //        [ball retain];  //-- this makes no sense here

 }

Вам не нужно сохранять ball в этой функции. В любом случае, поскольку вы не указываете, как создается ball, я предполагаю, что он уже правильно сохранен там, где вы его создали. Если вы дадите более подробную информацию об этом, я могу помочь в дальнейшем.

3 голосов
/ 30 июня 2011

Вот, пожалуйста. Я удалил удержание в конце, потому что это не нужно. Кроме того, вам следует подумать о том, чтобы сделать расчет currentDuration вне метода в статической переменной, предполагая, что он всегда будет одинаковым. И, возможно, вы захотите указать селектор в качестве одного из аргументов метода, но по крайней мере это поможет вам начать работу.

- (void) moveBall: (CCSprite *) ball toLocationX: float andY: float {
    int minDuration = 2.0;
    int maxDuration = 4.0;
    int rangeDuration = maxDuration - minDuration;
    int actualDuration = (arc4random() % rangeDuration) + minDuration;

    NSLog([NSString stringWithFormat:@"%d",actualDuration]);
    // Create the actions 
    id actionMove = [CCMoveTo actionWithDuration:0.2 position:ccp(x, y)];
    id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector               (spriteMoveFinished:)];

    [ball runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
}
...