Я пытаюсь создать 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, и я не могу получить постоянную скорость для легкого уровня. Он начинается довольно быстро, затем постепенно замедляется. Что я здесь не так делаю? Пожалуйста помоги.
Кто-то предложил мне это, и это работает, поэтому я просто опубликую это на тот случай, если кому-то еще это понадобится:
- (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 выполнять вычисления для увеличения и установки максимальной скорости мяча
Других решений пока нет …