0

我正在尝试为我正在尝试开发的游戏创建 3 个不同的难度级别(简单、中等和困难)。我使用一个标志来区分 3(简单 = 1,中等 = 2,困难 = 3)。现在,我试图弄清楚如何将速度设置为简单,然后在中等碰撞 20 次后增加速度,然后在选择硬时增加 10 次。这就是我试图实现它的方式:

-(id)init)
{vel = 8;
counter = 0;}

-(void)update:(ccTime)dt{
_world->Step(dt, vel, 10);

    for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
        if (b->GetUserData() != NULL) {
            CCSprite *sprite = (CCSprite *)b->GetUserData();
            sprite.position = ccp(b->GetPosition().x * PTM_RATIO,
                              b->GetPosition().y * PTM_RATIO);
            sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
        }
    }
    if((contact.fixtureA == _paddleFixture && contact.fixtureB == _ballFixture) || (contact.fixtureA == _ballFixture && contact.fixtureB == _paddleFixture))
    {
        counter++;
        [self updateSpeed];
    }
}

-(void)updateSpeed{
if(diffLevel == 2)
{
    if(counter%20 == 0)
    {
        vel = vel + 5;
    }
}
else if(diffLevel == 3)
{
    if(counter%10 == 0)
    {
        vel = vel + 10;
    }
}
else
{
    vel = 8;
}}

计数器确实可以工作,但是只要计数器可以被 20 或 10 整除,速度似乎就不会增加,而且我也无法为简单的级别获得恒定的速度。它开始很快,然后逐渐减慢。我在这里做错了什么?请帮忙。

4

1 回答 1

0

有人向我建议了这个并且它有效,所以我会发布它以防其他人需要它:

- (void)update:(ccTime) dt {
    _world->Step(dt, 10, 10);
    for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
        if (b->GetUserData() != NULL) {
            CCSprite *sprite = (CCSprite *)b->GetUserData();
            if(sprite.tag == 2)
            {
                int maxSpeed = 140;

                b2Vec2 dir = b->GetLinearVelocity();
                dir.Normalize();

                float currentSpeed = dir.Length();
                float accelerate = vel;

                if(currentSpeed < maxSpeed)
                {
                    b->SetLinearVelocity(accelerate * dir);
                }

                sprite.position = ccp(b->GetPosition().x * PTM_RATIO,
                                      b->GetPosition().y * PTM_RATIO);
                sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
}}}

这基本上是我对代码进行修改的唯一部分。我让 updateSpeed 方法进行计算以增加并设置球的最大速度

于 2013-03-07T05:24:51.167 回答