【问题标题】:How to generate platforms with a certain distance between each other如何生成彼此之间有一定距离的平台
【发布时间】: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


    【解决方案1】:

    保留一个变量,其中包含有关用户移动了多“远”的信息。由于您的平台以固定的速度不断向下移动,因此只需使用变量 _screenAltitude += PLATFORM_SPEED; - 那么当 if(_screenAltitude % distance_between_platforms==0) addPlatForm();

    回顾一下:跟踪您当前的屏幕高度。当该模数平台之间的距离为零时,您将添加一个新平台。只要确保平台速度是平台距离的净除数:) - 否则模数永远不会为零。

    我不会生成带有计时器的平台 :)

    【讨论】:

    • 我同意,我会在角色移动时生成平台。计时器让您的游戏玩法变得不可预测。
    • 非常感谢!我会试试的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2021-09-29
    • 2017-07-06
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多