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