我使用这段代码在一排五块砖中相互生成。第一排是完美的,位置正确并且移动正确。但是,使用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];
}
}
非常感谢任何帮助。
答案 0 :(得分:0)
你没有看到你的期望是有道理的。你递归地调用这个方法。
每次调用addbricks时,你都会得到五块砖。但是addbricks称自己为..所以5块砖5块砖×5块砖等等。
你必须重新考虑这一点。你为什么要在addbricks中产生更多的砖?
我猜你这样做的原因是你可以永久地产生砖块。但你可以在没有递归的情况下做到这一点。
在addBricks方法之外,只需执行
[self runAction:[SKAction repeatActionForever:delayThenSpawn]]