【问题标题】:Sprites not spawning correctly精灵没有正确生成
【发布时间】:2015-01-30 21:07:22
【问题描述】:

我正在使用此代码生成一排五块砖块,这些砖块相互叠放。第一排是完美的,位置和移动正确。但是,使用 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];

}
}

任何帮助将不胜感激。

【问题讨论】:

  • 你不能使用带参数的选择器来执行Selector,因为你不能传递参数。一旦动作调用了选择器,size 参数是未定义的。如果你很幸运,它是 0,0,但如果你不是,它包含垃圾。幸运的是,您似乎没有使用该参数。然而,使用不匹配的签名执行 Selector 是不合法的。
  • 它传入了 size 参数和 y 位置,而不是 x 位置。也许是因为它不是一个整数。在 addBricks 方法之外定义 x 位置会有帮助吗? @LearnCocos2D

标签: objective-c sprite-kit skspritenode skaction


【解决方案1】:

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

每次调用 addbricks 时,您都会获得五块砖。但是 addbricks 是自称.. 所以 5 块 x 5 块 x 5 块等等。

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

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

在你的 addBricks 方法之外,就这样做

[self runAction:[SKAction repeatActionForever:delayThenSpawn]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2022-09-27
    相关资源
    最近更新 更多