精灵没有正确产卵

时间:2015-01-30 21:07:23

标签: objective-c sprite-kit skspritenode skaction

我使用这段代码在一排五块砖中相互生成。第一排是完美的,位置正确并且移动正确。但是,使用performSelector操作生成的行未正确放入。产生的行的位置偏离屏幕的一半,而不是产生5块砖的数量,它第二次产生25,第三次产生125块砖。在没有任何问题之前,我已经使用过这个项目中的所有操作和方法,有人可以告诉我这里发生了什么。

除了initWithSize之外,这是我在场景中唯一的代码,它们不会引起任何问题。

-(void) addBricks:(CGSize)size {
for (int i = 0; i < 5; i++) {
    //create brick sprite from image
    SKSpriteNode *brick = [SKSpriteNode spriteNodeWithImageNamed:@"brick"];
    //resize bricks
    brick.size = CGSizeMake(60, 30);
    //psoition bricks
    int xPos = size.height/7.5 * (i+.5);
    int yPos = 450;
    brick.position = CGPointMake(xPos, yPos);

    //add move action
    SKAction *wait = [SKAction waitForDuration:3];
    SKAction *move = [SKAction moveByX:0 y:-36.9 duration:1];
    SKAction *sequence = [SKAction sequence:@[wait, move]];
    SKAction *repeatMove = [SKAction repeatActionForever:sequence];

    //add action to spawn bricks
    SKAction *spawn = [SKAction performSelector:@selector(addBricks:) onTarget:(self)];
    SKAction *delay = [SKAction waitForDuration:6];
    SKAction *delayThenSpawn = [SKAction sequence:@[delay, spawn]];

    [self runAction:delayThenSpawn];
    [brick runAction:repeatMove];
    [self addChild:brick];

}
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你没有看到你的期望是有道理的。你递归地调用这个方法。

每次调用addbricks时,你都会得到五块砖。但是addbricks称自己为..所以5块砖5块砖×5块砖等等。

你必须重新考虑这一点。你为什么要在addbricks中产生更多的砖?

我猜你这样做的原因是你可以永久地产生砖块。但你可以在没有递归的情况下做到这一点。

在addBricks方法之外,只需执行

[self runAction:[SKAction repeatActionForever:delayThenSpawn]]