Spritekit - 生成怪物的波浪

时间:2014-06-09 12:13:08

标签: sprite-kit

我制作了一个简单的赛车游戏,其中怪物是在纵向模式中从5个车道中的3个中随机生成的。

 -(void)addEnemy
{
SKSpriteNode *Enemy;
Enemy = [SKSpriteNode spriteNodeWithImageNamed:@"Enemy1"];
[Enemy setScale:.65];

Enemy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Enemy.size];
Enemy.physicsBody.categoryBitMask = obstacleCategory;
Enemy.physicsBody.dynamic = YES;
Enemy.zPosition = 2;
Enemy.physicsBody.contactTestBitMask = TurtleCategory;
Enemy.physicsBody.collisionBitMask = 0;
Enemy.physicsBody.usesPreciseCollisionDetection = YES;
Enemy.name = @"Enemy";


//selecting random y position for Enemy

int r = (arc4random() % 5) ;

Enemy.position = CGPointMake(48+r*56,self.frame.size.height);

[self addChild:Enemy];
SKAction *actionMove =
[SKAction moveTo:CGPointMake(Enemy.position.x,-80)
        duration:1.43];
[Enemy runAction:actionMove];

SKSpriteNode *Enemy2;
Enemy2 = [SKSpriteNode spriteNodeWithImageNamed:@"Enemy1"];
[Enemy2 setScale:.65];

//Adding SpriteKit physicsBody for collision detection
Enemy2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Enemy.size];
Enemy2.physicsBody.categoryBitMask = obstacleCategory;
Enemy2.physicsBody.dynamic = YES;
Enemy2.zPosition = 2;
Enemy2.physicsBody.contactTestBitMask = TurtleCategory;
Enemy2.physicsBody.collisionBitMask = 0;
Enemy2.physicsBody.usesPreciseCollisionDetection = YES;
Enemy2.name = @"Enemy2";


//selecting random y position for Enemy

int r2 = (arc4random() % 5) ;

Enemy2.position = CGPointMake(48+r2*56,self.frame.size.height);

[self addChild:Enemy2];
SKAction *actionMove2 =
[SKAction moveTo:CGPointMake(Enemy2.position.x,-80)
        duration:1.43];
[Enemy2 runAction:actionMove2];

SKSpriteNode *Enemy1;
Enemy1 = [SKSpriteNode spriteNodeWithImageNamed:@"boss1"];
[Enemy1 setScale:.65];

//Adding SpriteKit physicsBody for collision detection
Enemy1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Enemy1.size];
Enemy1.physicsBody.categoryBitMask = obstacleCategory;
Enemy1.physicsBody.dynamic = YES;
Enemy1.zPosition =2;
Enemy1.physicsBody.contactTestBitMask = TurtleCategory;
Enemy1.physicsBody.collisionBitMask = 0;
Enemy1.physicsBody.usesPreciseCollisionDetection = YES;
Enemy1.name = @"Enemy1";


int r1 = (arc4random() % 5) ;

Enemy1.position = CGPointMake(48+r1*56,self.frame.size.height);

[self addChild:Enemy1];

SKAction *actionMove1 =
[SKAction moveTo:CGPointMake(Enemy1.position.x,-80)
        duration:1.43];
[Enemy1 runAction:actionMove1];

然而,这段代码的一个问题是怪物有时会相互产生。有一个更好的方法吗? 谢谢

1 个答案:

答案 0 :(得分:0)

- (CGFloat)randomValueBetween:(CGFloat)low andValue:(CGFloat)high {
return (((CGFloat) arc4random() / 0xFFFFFFFFu) * (high - low)) + low;
}

我认为这是来自raywenderlich教程的这段代码。

你能做的就是打电话,

 CGFloat r1 = [self randomValueBetween:0 andValue:3];
 CGFloat r2 = [self randomValueBetween:3 andValue:6]; etc

可能会为您提供可用作偏移的不同值。