Sprite Kit – 使用Switch Case将随机的Sprite节点添加到场景中

我有以下代码来创build随机对象并将其添加到场景中。 最后,在随机延迟之后重复该方法。

-(void)createObjects { // Create random start point float randomStartPoint = arc4random_uniform(4) * 64 + 32; CGPoint startPoint = CGPointMake(self.size.width + 50, randomStartPoint); // Create random object and add to scene switch (arc4random_uniform(2)) { case 0: { SKSpriteNode *crate = [SKSpriteNode spriteNodeWithImageNamed: @"crate"]; crate.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:crate.frame.size]; crate.physicsBody.dynamic = YES; crate.physicsBody.affectedByGravity = NO; crate.physicsBody.categoryBitMask = objectCategory; crate.physicsBody.collisionBitMask = 0; crate.physicsBody.contactTestBitMask = playerCategory; crate.position = startPoint; crate.name = @"object"; crate.zPosition = 20; [self addChild:crate]; break; } case 1: { SKSpriteNode *cactus = [SKSpriteNode spriteNodeWithImageNamed: @"cactus"]; cactus.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:cactus.frame.size]; cactus.physicsBody.dynamic = YES; cactus.physicsBody.affectedByGravity = NO; cactus.physicsBody.categoryBitMask = objectCategory; cactus.physicsBody.collisionBitMask = 0; cactus.physicsBody.contactTestBitMask = playerCategory; cactus.position = startPoint; cactus.name = @"object"; cactus.zPosition = 20; [self addChild:cactus]; break; } default: break; } // After adding child, call same method at random delay float randomNum = arc4random_uniform(4) * 0.4 + 0.25; [self performSelector:@selector(createObjects) withObject:nil afterDelay:randomNum]; } 

实际上,我有更多的案例,并且重复了很多相同的代码,因为每个Sprite节点都具有相同的设置。 有没有办法创build一个精灵节点一次,并在每一个情况下为节点设置一个不同的图像,并将其添加到场景?

您可以在switch case中创buildSKTexture,然后使用该纹理创build节点。

喜欢这个:

 -(void)createObjects { // Create random start point float randomStartPoint = arc4random_uniform(4) * 64 + 32; CGPoint startPoint = CGPointMake(self.size.width + 50, randomStartPoint); // Create random object and add to scene SKTexture* objectTexture; switch (arc4random_uniform(2)) { case 0: objectTexture = [SKTexture textureWithImageNamed:@"crate"]; break; case 1: objectTexture = [SKTexture textureWithImageNamed:@"cactus"]; break; default: break; } SKSpriteNode *object = [SKSpriteNode spriteNodeWithTexture:objectTexture]; object.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:crate.frame.size]; object.physicsBody.dynamic = YES; object.physicsBody.affectedByGravity = NO; object.physicsBody.categoryBitMask = objectCategory; object.physicsBody.collisionBitMask = 0; object.physicsBody.contactTestBitMask = playerCategory; object.position = startPoint; object.name = @"object"; object.zPosition = 20; [self addChild: object]; } 

另一种方法是在switch case之前创build对象,然后使用setTexture创build纹理并在switch case中设置它: