精灵未正确生成

Sprites not spawning correctly

我正在使用此代码生成一排五块积木,一块一块积木。第一排是完美的,位置正确,移动正确。但是,使用 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];

}
}

如有任何帮助,我们将不胜感激。

你没有看到你期望的是有道理的。您正在递归调用此方法。

每次调用 addbricks 时,您都会得到五块积木。但是 addbricks 自称……所以 5 块 x 5 块 x 5 块,依此类推。

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

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

在您的 addBricks 方法之外,只需执行

[self runAction:[SKAction repeatActionForever:delayThenSpawn]]