【发布时间】:2014-04-23 18:15:13
【问题描述】:
对不起我的英语;)我正在使用 SpriteKit 做一个无限级别的游戏(比如 Doodle jump),我有一个问题:我不明白怎么做生成一个平台,使新的平台与之前的平台有一定的距离。
这里是生成平台的示例代码:
- (void)addPlatforms
{
int random = arc4random() % (int)(self.frame.size.width-80)+100;
// right end platform
SKSpriteNode *rightEndPlatform = [SKSpriteNode spriteNodeWithImageNamed:@"leftPlatform"];
rightEndPlatform.size = CGSizeMake(16, 16);
rightEndPlatform.physicsBody =
[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(rightEndPlatform.size.width, rightEndPlatform.size.height - 5)];
rightEndPlatform.position = CGPointMake(random, 0);
// left end platform
SKSpriteNode *leftEndPlatform = [SKSpriteNode spriteNodeWithImageNamed:@"rightPlatform"];
leftEndPlatform.size = CGSizeMake(16, 16);
leftEndPlatform.physicsBody =
[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(leftEndPlatform.size.width, leftEndPlatform.size.height - 5)];
leftEndPlatform.position = CGPointMake(rightEndPlatform.position.x - PLATFORM_RANGE, rightEndPlatform.position.y);
// left platform
SKSpriteNode *leftPlatform = [SKSpriteNode spriteNodeWithImageNamed:@"centerPlatform"];
leftPlatform.size = CGSizeMake(leftEndPlatform.position.x, 16);
leftPlatform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:leftPlatform.frame.size];
leftPlatform.position =
CGPointMake(leftEndPlatform.position.x - leftPlatform.size.width/2,
leftEndPlatform.position.y);
// right platform
SKSpriteNode *rightPlatform = [SKSpriteNode spriteNodeWithImageNamed:@"centerPlatform"];
rightPlatform.size = CGSizeMake(self.frame.size.width+rightEndPlatform.position.x, 16);
rightPlatform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rightPlatform.frame.size];
rightPlatform.position =
CGPointMake(rightEndPlatform.position.x + rightPlatform.size.width/2,
rightEndPlatform.position.y);
// add to the scene
[self addChild:rightEndPlatform];
[self addChild:leftEndPlatform];
[self addChild:leftPlatform];
[self addChild:rightPlatform];
// add platforms to array
[platformArray addObject:rightEndPlatform];
[platformArray addObject:leftEndPlatform];
[platformArray addObject:leftPlatform];
[platformArray addObject:rightPlatform];
for (int i = 0; i < [platformArray count]; i++)
{
SKSpriteNode *sprite = [platformArray objectAtIndex:i];
sprite.physicsBody.usesPreciseCollisionDetection = YES;
sprite.physicsBody.dynamic = NO;
sprite.name = [NSString stringWithFormat:@"beforePlayer"];
}
}
然后移动它:
-(void)update:(CFTimeInterval)currentTime
{
for (int i = 0; i < [platformArray count]; i++)
{
SKSpriteNode *platform = [platformArray objectAtIndex:i];
platform.position = CGPointMake(platform.position.x, platform.position.y + PLATFORM_SPEED);
if (platform.position.y > self.frame.size.height+100)
{
[platform removeFromParent];
}
}
}
按时间间隔生成的平台:
timer = [NSTimer scheduledTimerWithTimeInterval:TIME_INTERVAL target:self selector:@selector(addPlatforms) userInfo:nil repeats:YES];
我需要生成彼此之间有一定距离的平台(当第一个平台生成并向上移动 100px - 然后生成第二个平台......等等)
【问题讨论】:
标签: objective-c ios7 sprite-kit