2

首先,让我解释一下我已经用谷歌搜索了这个,我似乎无法找到一个明确的答案;但我相信这是因为我使用了不正确的术语。

我正在将球移动到 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 坐标(位置。 x) 和 y 坐标 (location.y)。球是 CCSprite,位置是整数。

我是这方面的初学者,所以如果您提供解决方案,请告诉我如何清理它(如内存释放)。

非常感谢!

4

2 回答 2

4

在这里,您有一个可能适合您的片段:

  • (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创建,我假设它已经正确保留在您创建它的位置。如果您提供有关它的更多详细信息,我可以提供进一步的帮助。

于 2011-06-30T18:00:26.507 回答
3

干得好。我在最后删除了保留,因为它不需要。此外,您应该考虑在方法之外在静态变量中进行实际持续时间计算,假设它总是相同的。并且,您可能希望能够将选择器指定为方法参数之一,但至少这会让您开始。

- (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]];
}
于 2011-06-30T18:05:23.280 回答