精灵在不正确的位置产卵
Sprites spawning in incorrect position
我有一排 5 个精灵,它们每 4 秒生成一次并沿 Y 轴向下移动。精灵每次都产生正确的数量,我在屏幕上有 5 个等距的精灵,它们都完美地居中。
但是,当调用 performSelector 操作时,当它在其中生成它们时,它们并没有到达正确的位置。向左移动到我只能在屏幕左侧看到半个精灵。测试后,似乎它们都在错误的位置堆叠在一起。
知道发生了什么事吗?我将不胜感激任何帮助。这是我在场景中使用的所有代码。
-(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.width/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];
[brick runAction:repeatMove];
[self addChild:brick];
}
}
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.backgroundColor = [SKColor colorWithRed:(243.0f/255) green:(228.0f/255) blue:(165.0f/255) alpha:1.0];
//add action to spawn bricks
SKAction *spawn = [SKAction performSelector:@selector(addBricks:) onTarget:(self)];
SKAction *delay = [SKAction waitForDuration:4];
SKAction *delayThenSpawn = [SKAction sequence:@[delay, spawn]];
[self runAction:[SKAction repeatActionForever:delayThenSpawn]];
[self addBricks:size];
}
return self;
}
正如您在上一个问题中提到的 LearnCocos2D.. 将参数传递给方法时不能使用选择器。
addBricks
期望 size
.. 你没有将大小传递给它。
将你的生成动作更改为
SKAction *spawn = [SKAction runBlock:^{
// make this whatever size you want, i'm just using the scene's size
[self addBricks:self.size];
}];
这应该让你开始
我有一排 5 个精灵,它们每 4 秒生成一次并沿 Y 轴向下移动。精灵每次都产生正确的数量,我在屏幕上有 5 个等距的精灵,它们都完美地居中。
但是,当调用 performSelector 操作时,当它在其中生成它们时,它们并没有到达正确的位置。向左移动到我只能在屏幕左侧看到半个精灵。测试后,似乎它们都在错误的位置堆叠在一起。
知道发生了什么事吗?我将不胜感激任何帮助。这是我在场景中使用的所有代码。
-(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.width/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];
[brick runAction:repeatMove];
[self addChild:brick];
}
}
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.backgroundColor = [SKColor colorWithRed:(243.0f/255) green:(228.0f/255) blue:(165.0f/255) alpha:1.0];
//add action to spawn bricks
SKAction *spawn = [SKAction performSelector:@selector(addBricks:) onTarget:(self)];
SKAction *delay = [SKAction waitForDuration:4];
SKAction *delayThenSpawn = [SKAction sequence:@[delay, spawn]];
[self runAction:[SKAction repeatActionForever:delayThenSpawn]];
[self addBricks:size];
}
return self;
}
正如您在上一个问题中提到的 LearnCocos2D.. 将参数传递给方法时不能使用选择器。
addBricks
期望 size
.. 你没有将大小传递给它。
将你的生成动作更改为
SKAction *spawn = [SKAction runBlock:^{
// make this whatever size you want, i'm just using the scene's size
[self addBricks:self.size];
}];
这应该让你开始