【问题标题】:SpriteKit - Stop Objects Piling-UpSpriteKit - 阻止对象堆积
【发布时间】:2014-04-30 09:45:32
【问题描述】:

我想知道我应该添加什么代码来阻止石头在屏幕底部堆积,并在休息(不移动)时将它们移除。

这是创建岩石的代码。如果您需要任何其他代码,请告诉我:)

-(void)addRock {

    SKSpriteNode *rock = [SKSpriteNode spriteNodeWithImageNamed:@"asteroid"];
    rock.position = CGPointMake ([self makeRandomXWBetween:0 and:self.size.width], self.size.height);
    rock.name = @"rock";
    rock.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rock.size];
    rock.physicsBody.usesPreciseCollisionDetection = YES;
    rock.physicsBody.categoryBitMask = rockCategory;
    rock.physicsBody.contactTestBitMask = dodgerCategory;
    [self addChild:rock]; 
}

-(void)makeRocks {

    SKAction *makeRocks = [SKAction sequence: @[
                                                [SKAction performSelector:@selector(addRock) onTarget:self],
                                                [SKAction waitForDuration:0.3 withRange:0.0]
                                                ]];
    [self runAction: [SKAction repeatActionForever:makeRocks]];
}

提前感谢您的帮助!

最好的问候, 路易斯。

【问题讨论】:

  • 请提供一些上下文,具体发布创建这些对象的代码以及删除它们的要求(在特定时间之后?触底时?休息时?)。
  • @LearnCocos2D 完成!感谢您的提示:)

标签: ios macos sprite-kit


【解决方案1】:

由于您希望岩石在静止时被移除,因此可以在它们的velocity 属性为零时移除它们。

您可以在-update 方法中进行检查。

-(void)update:(CFTimeInterval)currentTime {

    [self enumerateChildNodesWithName:@"rock" usingBlock:^(SKNode *node, BOOL *stop){

        if ((node.physicsBody.velocity.dx == 0) && (node.physicsBody.velocity.dy == 0) && (node.position.y < self.size.height)) {
            [node removeFromParent];
        }
    }];
}

【讨论】:

  • if (node.physicsBody.velocity.dx == 0 && node.physicsBody.velocity.dy == 0) 应该是 if ((node.physicsBody.velocity.dx == 0) && ( node.physicsBody.velocity.dy == 0))
  • 好的,为了清楚起见,我正在更新答案。
  • 当我添加该代码时似乎仍然无法正常工作......我需要添加任何其他代码吗? @akashg
  • 此代码仅在岩石节点完全静止时才会移除它们。如果节点继续移动,它将不起作用。您是否还有其他要删除节点的条件?
  • @akashg 抱歉,我应该说我在添加该代码时遇到了一堆语法错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
相关资源
最近更新 更多