Передать переменные в функцию в Objective C

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

Я перемещаю мяч в определенное место в приложении для iPad cocos2d/chipmunk следующим образом:

// 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, а расположение — целые числа.

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

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


person Doug Molineux    schedule 30.06.2011    source источник
comment
В Objective-C есть функции; это не то же самое, что методы, хотя они и связаны между собой. Методы — это своего рода функции, принадлежащие объектам. Синтаксис немного отличается -- Метод: - (void) thisIsAMethodWithAParameter: (int)param { return; } Функция: void thisIsAFunction(int param){ return; }   -  person jscs    schedule 30.06.2011
comment
Спасибо за разъяснение Джош   -  person Doug Molineux    schedule 30.06.2011


Ответы (2)


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

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

// Определяем скорость цели int minDuration = 2.0; интервал maxDuration = 4,0; int rangeDuration = maxDuration - minDuration; int factDuration = (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, я предполагаю, что он уже правильно сохранен там, где вы его создаете. Если вы дадите более подробную информацию об этом, я могу помочь дальше.

person sergio    schedule 30.06.2011
comment
Ха-ха, ты, должно быть, шутишь. Во всяком случае, опередил меня на 4 минуты, так что голосую! - person Perception; 30.06.2011
comment
Отлично, большое спасибо, серджио, у меня достаточно, чтобы бегать здесь :) - person Doug Molineux; 30.06.2011
comment
Я пытался исправить проблему форматирования с помощью этого ответа, но не смог, потому что изменения не превышали 6 символов без пробелов. - person Doug Molineux; 27.08.2012

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

- (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]];
}
person Perception    schedule 30.06.2011