Cocos2D随机精灵运动

3
作为一个Cocos2D的初学者,我正在尝试制作一个iPhone游戏,在屏幕上随机移动一些奶牛。我使用了这里的移动精灵代码:highoncoding.com/.../。我在init方法中使用addAnimal方法添加精灵:
-(void) addAnimal {
animal = [CCSprite spriteWithFile:@"cow.png"];
animal.position = [self generateRandomCoordinates];

[self addChild:animal];
[self startAnimation:animal];
}

我的问题: 当我在游戏中添加多头奶牛时,它们会从随机生成的位置移动到另一个随机位置,然后第一头奶牛停止,而其他奶牛则正常运行。在finishedMoving方法中的startAnimation命令总是到最后一个精灵。这意味着我需要更好地控制我的精灵,但如何正确做到这一点呢?

请查看BOIDS群集算法。 - tallen11
我会在更熟悉Cocos2D后再尝试。谢谢! - gimp
1个回答

4
你可以尝试实现一个动物类,其中包含你的精灵并封装随机移动。类似于:
@implementation Cow

- (id) init
{
    self = [super init];

    if( self != nil )
    {
        CCSprite* cowSprite = [CCSprite spriteWithFile:@"cow.png"];
        [self addChild: cowSprite];
    }

    return self;
}

- (void) onEnter
{
    [super onEnter];
    [self makeRandomMovement];
}

- (void) makeRandomMovement
{
    id randomMoveAction = // create your random move action here
    id moveEndCallback = [CCCallFunc actionWithTarget: self selector: @selector(makeRandomMovement)];
    id sequence = [CCSequence actionOne: randomMoveAction two: moveEndCallback];
    [self runAction: sequence];
}

@end

在随机移动部分结束后,该方法将再次调用makeRandomMovement来生成并启动新的随机移动部分。

然后重新编写您的addAnimal方法,使其类似于以下内容

- (void) addAnimal
{
    Cow* newCow = [Cow node];
    [newCow setPosition: [self generateRandomPosition]];
    [self addChild: newCow];
}

谢谢Morion。对我来说完美无缺。 - gimp
你好,不用谢。你可以将我的答案标记为正确的,以帮助其他人之后更容易找到它。 - Morion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接